《UNIX/Linux系统管理技术手册-读书笔记-第五章

1. 文件系统概述

组成部分 说明
名字空间 为对象命名并按层次化组织(目录树)
API 系统调用集(open/read/write/close等)
安全模型 权限、所有权、ACL等控制访问
实现 连接逻辑模型与硬件的软件层(ext4/XFS/UFS/ZFS/Btrfs等)

UNIX/Linux特点:一切皆文件——普通文件、目录、设备、进程信息、内核参数、套接字、管道等均通过文件系统访问。

2. 路径名

概念 说明 能做什么
绝对路径 /(根目录)起始 从根开始唯一定位文件
相对路径 以当前目录为起点 基于当前位置访问文件
路径长度限制 每部分≤255字符,总长Linux≤4095字节,BSD≤1024字节 超长路径需cd到中间目录后用相对路径
目录 vs 文件夹 同一概念,但“文件夹”非技术术语 技术交流建议用“目录”

3. 文件系统挂载与卸载

命令/概念 功能 示例
mount /dev/sda4 /users 将设备挂载到目录(挂载点) 使该设备内容在/users下可见
mount(无参数) 列出所有已挂载文件系统 查看当前挂载状态
/etc/fstab 系统引导时自动挂载的文件系统列表 定义永久挂载配置
umount /users 卸载文件系统 文件系统繁忙时失败
umount -l(Linux惰性卸载) 从树中移除,待引用关闭后真正卸载 有争议,慎用
umount -f 强制卸载(慎用,尤其日志文件系统) 紧急情况
fuser -c /mountpoint 找出正在使用该文件系统的进程PID 排查“设备繁忙”无法卸载的原因
lsof 列出打开的文件及其所属进程 fuser的增强替代品

卸载失败时,先用fuser -c /mountpointlsof | grep /mountpoint查谁在用。

4. 文件树标准目录(重点)

目录 内容 说明
/ 根目录 文件树起点
/bin 核心操作系统命令 系统启动和修复必需
/sbin 系统管理命令 通常由root使用
/boot 引导装载程序、内核 启动所需文件
/etc 关键系统配置文件 升级时注意保留本地修改
/home 用户主目录默认位置 数据存储
/lib, /lib64 共享库 与/bin、/sbin配套
/dev 设备文件 虚拟文件系统,自动维护
/proc 进程和内核信息(虚拟) 动态查看系统状态
/sys 内核设备/驱动接口(虚拟) Linux特有
/run 运行时数据(PID、套接字) 内存文件系统
/tmp 临时文件 重启可能清空
/var 变化数据(日志、假脱机) 独立分区防止写满根
/usr 次要文件、命令、库、文档 大规模目录(/usr/bin、/usr/lib、/usr/local、/usr/share/man)
/opt 可选软件包 实际使用较少
/mnt, /media 临时/可移动设备挂载点

man hier可查看系统目录结构指导。

5. 文件类型(7种)与识别

类型 ls符号 创建方法 删除方法
普通文件 - cp、编辑器 rm
目录 d mkdir rmdirrm -r
字符设备文件 c mknod(自动管理) rm
块设备文件 b mknod(自动管理) rm
本地域套接字 s socket系统调用 rm
具名管道(FIFO) p mknod rm
符号链接 l ln -s rm

识别命令

  • file /path:显示文件类型(普通文件还会识别具体格式,如ELF可执行文件)
  • ls -ld /path:显示文件类型代码和详细信息

删除特殊文件名(如-f、含控制字符):

1
2
3
4
5
6
# 方法1:用相对路径
rm ./-f
# 方法2:使用 -- 结束选项
rm -- -f
# 方法3:配合 -i 和通配符(安全交互)
rm -i ./*

6. 硬链接 vs 符号链接

对比 硬链接 符号链接(软链接)
本质 同一文件的多目录引用(多个名字指向同一inode) 指向目标路径的指针文件
跨文件系统 ❌ 不可 ✅ 可
指向已删除文件 链接计数>0,文件保留 悬空链接(目标不存在)
目录链接 一般不允许(避免环路) ✅ 可指向目录
inode号 相同 不同(链接文件自身有独立inode)
权限 共享原文件权限 权限虚设,实际由目标决定

操作

1
2
3
ln oldfile newfile          # 创建硬链接
ln -s target_path link_name # 创建符号链接(目标为字符串字面量,非文件名解析)
ls -li                      # 查看inode号(硬链接相同)

ln -s的第一个参数是字符串,不是相对于当前目录解析的文件名,注意路径写法。

7. 文件属性与权限(核心)

7.1 9位权限模型

分类 权限位 8进制值 对文件作用 对目录作用
属主(user) rwx 700 读/写/执行 读内容/创建删除/进入
属组(group) rwx 070 读/写/执行 读内容/创建删除/进入
其他人(other) rwx 007 读/写/执行 读内容/创建删除/进入

目录执行位(搜索位):允许进入目录或将其作为路径一部分,即使不能列内容也可以访问已知路径。

7.2 setuid / setgid / 粘滞位

8进制值 文件上效果 目录上效果
setuid 4000 执行时EUID=文件属主UID 无意义(忽略)
setgid 2000 执行时EGID=文件属组GID 新文件继承目录属组而非创建者属组
粘滞位 1000 过时(忽略) 仅属主/root可删除/重命名目录中文件(如/tmp安全)

7.3 ls -l 输出详解

-rwxr-xr-x 4 root wheel 37432 Nov 11 2016 /usr/bin/gzip
字段 含义
- 文件类型(普通文件)
rwxr-xr-x 权限:属主rwx,属组r-x,其他人r-x
4 硬链接数
root 属主
wheel 属组
37432 大小(字节),设备文件显示主/次设备号
Nov 11 2016 最后修改时间
/usr/bin/gzip 文件名

特殊权限显示:setuid显示为s(原x位),setgid为s,粘滞位为t;有ACL时尾部显示+

7.4 chmod:改权限

8进制语法(推荐管理员用):

1
2
3
chmod 755 script.sh    # 属主rwx,属组r-x,其他人r-x
chmod 640 secret.txt   # 属主rw-,属组r--,其他人---
chmod 4711 prog        # 属主rws--x--x(setuid + 属主rwx + 其他x)

助记符语法(灵活部分修改):

写法 含义
chmod u+w file 属主添加写
chmod go-w file 组和其他删除写
chmod a+x file 所有分类添加执行
chmod g=u file 组权限设为和属主相同
chmod -R g+w mydir/ 递归添加组写(保留原有其他位)
chmod --reference=fileA fileB 从fileA复制权限(Linux)

递归chmod -R a-x会移除目录的执行位,导致无法进入目录,慎用。

7.5 chown / chgrp:改所有权

1
2
3
4
chown matt file                # 改属主
chgrp staff file               # 改属组
chown matt:staff file          # 同时改属主和属组
chown -R matt:staff ~matt/restore/  # 递归恢复(注意避免点号模式)

改属组需超级用户或文件属主且为目标组成员。chown现为特权操作。

7.6 umask:默认权限掩码

umask值 效果 新文件权限(默认请求666) 新目录权限(默认请求777)
022(常用) 组和其他无写 644(rw-r–r–) 755(rwxr-xr-x)
027 组无写,其他无所有 640(rw-r—–) 750(rwxr-x—)
002 其他无写 664(rw-rw-r–) 775(rwxrwxr-x)
1
2
umask 027   # 设置当前shell的umask
umask       # 查看当前值

8. Linux额外文件标志

标志 用途 注意
i(immutable) 文件不可变、不可删除 仅root;配置管理噩梦
a(append-only) 仅允许追加写入 仅root;慎用
A(no atime) 不更新访问时间(性能优化) 现代内核相对atime已减少此需求
d(no dump) 备份工具忽略 需备份系统支持
DSj 同步写入/日志控制 支持数据库,显著降低性能

命令

1
2
3
lsattr file          # 查看标志
chattr +i file       # 设置不可变
chattr -i file       # 解除不可变

9. 访问控制列表(ACL)(扩展知识)

9.1 概述与警示

要点 说明
ACL作用 突破“属主/属组/其他人”三分类,为多个用户和组分别设置权限
两种标准 POSIX ACL(Linux主流)、NFSv4 ACL(FreeBSD主流,更强大)
现实态度 主流之外,复杂易出错,非必要不建议部署

9.2 POSIX ACL(Linux标准)

表项类型 格式 示例
文件属主 user::perms user::rw-
指定用户 user:username:perms user:trent:rw-
文件属组 group::perms group::r-x
指定组 group:groupname:perms group:staff:rw-
其他人 other::perms other::---
Mask mask::perms mask::rwx(限制具名用户/组的最大权限)

命令

1
2
3
4
5
6
getfacl file                # 查看ACL
setfacl -m user:alice:rw file   # 添加alice的读写权限
setfacl -m group:dev:rx file    # 添加dev组的读执行
setfacl -x user:alice file      # 删除alice的ACE
setfacl -b file                 # 删除整个ACL(恢复传统)
setfacl -dm user:alice:rw dir/  # 设置目录default ACE(新文件继承)

关键行为

  • 带ACL文件在ls -l权限末尾显示+
  • chmod修改属组权限时,实际修改的是mask,限制所有具名用户/组的最高权限
  • 有ACL时,访问判定顺序:属主 → 指定用户 → 指定组/属组 → 其他人(配合mask过滤)

9.3 NFSv4 ACL(FreeBSD)

特性 说明
权限粒度更细 区分创建文件/创建子目录、追加、读/写属性、读/写ACL、改所有权等(见表5.8)
ACE类型 allow(允许)和deny(拒绝)
判断顺序 按ACL中ACE顺序迭代,遇deny立即拒绝
特殊实体 owner@group@everyone@
继承标志 f(传给文件)、d(传给目录)、i(仅继承不应用)、n(不传播)

命令(FreeBSD)

1
2
3
4
getfacl -v file              # 详细显示NFSv4 ACL
setfacl -a 0 user:ben:full_set::deny file  # 在索引0插入拒绝ACE(最高优先级)
setfacl -m user:alice:rwxp file    # 追加ACE到尾部
getfacl -q file > acl.txt; vi acl.txt; setfacl -b -M acl.txt file   # 批量编辑

Linux不支持本地文件的NFSv4 ACL(仅NFS挂载点支持,通过nfs4_getfacl/nfs4_setfacl)。

10. 本章核心命令速查表

命令 用途
ls -l / ls -ld 查看文件/目录属性
ls -li 查看inode号(识别硬链接)
ls -b 控制字符显示为八进制
file 识别文件类型
mount / umount 挂载/卸载文件系统
fuser -c /mount / lsof 查文件系统使用者
chmod 改权限(8进制/助记符)
chown / chgrp 改属主/属组
umask 设置默认权限掩码
ln / ln -s 创建硬链接/符号链接
mkdir / rmdir / rm -r 创建/删除目录
lsattr / chattr 查看/设置Linux文件标志
getfacl / setfacl 查看/设置POSIX ACL
nfs4_getfacl / nfs4_setfacl NFSv4 ACL(Linux NFS挂载点)

DBA视角补充

  • 数据目录权限:数据库数据目录需确保数据库用户(如mysql、postgres、oracle)拥有正确的rwx权限,避免使用root运行数据库进程。
  • 挂载选项:数据库数据卷建议使用noatime减少不必要的访问时间更新,nosuid可防setuid攻击。
  • ACL应用:如需为多个DBA团队分配不同级别的数据目录访问权限,ACL比传统模型更灵活(例如setfacl -m user:alice:rwx /data/mysql)。
  • umask:数据库服务启动脚本的umask应确保日志和临时文件权限安全(如027),避免敏感信息泄露。
  • 硬链接 vs 软链接:数据库表空间文件常用符号链接跨磁盘分布;硬链接不能跨文件系统,少用。
  • 粘滞位/tmp的粘滞位(1777)是数据库临时文件安全的基础,确保多用户无法删除他人临时文件。