UNIX/Linux系统管理技术手册-读书笔记-第五章
《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 /mountpoint或lsof | 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 |
rmdir或rm -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、含控制字符):
6. 硬链接 vs 符号链接
| 对比 | 硬链接 | 符号链接(软链接) |
|---|---|---|
| 本质 | 同一文件的多目录引用(多个名字指向同一inode) | 指向目标路径的指针文件 |
| 跨文件系统 | ❌ 不可 | ✅ 可 |
| 指向已删除文件 | 链接计数>0,文件保留 | 悬空链接(目标不存在) |
| 目录链接 | 一般不允许(避免环路) | ✅ 可指向目录 |
| inode号 | 相同 | 不同(链接文件自身有独立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进制语法(推荐管理员用):
助记符语法(灵活部分修改):
| 写法 | 含义 |
|---|---|
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:改所有权
改属组需超级用户或文件属主且为目标组成员。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) |
8. Linux额外文件标志
| 标志 | 用途 | 注意 |
|---|---|---|
i(immutable) |
文件不可变、不可删除 | 仅root;配置管理噩梦 |
a(append-only) |
仅允许追加写入 | 仅root;慎用 |
A(no atime) |
不更新访问时间(性能优化) | 现代内核相对atime已减少此需求 |
d(no dump) |
备份工具忽略 | 需备份系统支持 |
D、S、j |
同步写入/日志控制 | 支持数据库,显著降低性能 |
命令:
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(限制具名用户/组的最大权限) |
命令:
关键行为:
- 带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):
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)是数据库临时文件安全的基础,确保多用户无法删除他人临时文件。
文章作者 会写代码的小郎中
上次更新 2011-06-15
许可协议 CC BY-NC-ND 4.0