Linux 文件系统深度游:/bin 到 /srv 每个目录都有故事
——学习 Linux 系列第 4 篇(约 3500 字)
目标:读完本文,你能把 Linux 的目录树当成“博物馆”——一眼看出哪件展品该摆哪,遇到“找不到命令”“配置文件在哪”时,三秒内说出绝对路径。
0. 一切从“一切皆文件”说起
Unix 哲学里,硬件、进程、内核参数……都能用“文件”读写。目录树就是统一的命名空间。为防各家发行版“各唱各的调”,Linux 遵循 FHS(Filesystem Hierarchy Standard),把目录功能写进“宪法”。下面按字母顺序逛 11 个高频目录,穿插 3 大实战节。
1. /bin:急救工具箱——系统起不来也得能用
- 含义:binary,单用户模式下管理员必需命令。
- 居民:
ls,cp,rm,cat,mount等 100 多个小程序,静态编译,不依赖外部库。 - 冷知识:
/bin/sh往往指向 dash/bash,是脚本“默认 Shell”,系统升级失败时可进单用户模式用它们手动修复。
2. /sbin:管理员的“特权手术刀”
- s = super-user。
fdisk,fsck,ifconfig,iptables都在这。普通用户 PATH 不含/sbin,sudo才临时拥有。 - 翻车案例:
ifconfig找不到?Debian 系已弃用 net-tools,用ip(在/bin)。
3. /lib:/bin 与 /sbin 的“后勤部”
4. /etc:配置大排档——“etc”=“et cetera”
FHS 4.1 节规定:主机特有的静态配置文件必须放这里,不可放可执行二进制。
- 经典文件:
/etc/passwd用户库/etc/fstab磁盘映射/etc/nginx/nginx.confWeb 服务器
- 目录化趋势:
/etc/apt/sources.list.d/*.list模块化源/etc/systemd/system/单元文件
- 权限黄金法则:目录 755,文件 644;只有 root 可写,防止普通用户改 DNS 劫持。
- 备份技巧:
sudo tar -czf /backup/etc-$(date +%F).tar.gz -C / etc5. /usr:UNIX Software Resource——“第二系统”
- 只读、可共享,可被多台无盘客户端 NFS 挂载。
- 子目录与根目录对应:
/usr/bin普通用户命令(git, vim)/usr/lib应用程序库/usr/include头文件
- /usr/local:本地编译软件默认前缀,不受包管理器管辖。手工
make install装到/usr/local/bin,升级系统不冲突。
6. /var:可变数据“菜市场”
- v = variable,大小随时间增长。
- 三大金刚:
/var/log日志(syslog, dmesg, nginx/access.log)/var/lib包管理器数据库(dpkg, rpm)/var/spool任务队列(打印、邮件、cron)
- 清理策略:
sudo journalctl --vacuum-time=30d # systemd 日志
sudo apt autoremove --purge7. /tmp & /dev/shm:临时文件“双雄”
特性 | /tmp | /dev/shm |
存储 | 磁盘(可 swap) | 纯内存(tmpfs) |
权限 | 1777 任何人可写 | 默认 1777 |
速度 | 慢 | 极快,重启丢 |
场景 | 编译中间文件 | 进程间共享内存 |
技巧:把浏览器缓存搬进内存,减少 SSD 写入
mkdir -p /dev/shm/$USER-chromium
ln -s /dev/shm/$USER-chromium ~/.cache/chromium8. /proc 与 /sys:魔法目录二人组
8.1 /proc —— 进程的“X 光片”
- 虚拟文件系统,不占用磁盘,内核实时生成。
- 必会路径:
/proc/cpuinfo型号、核心/proc/meminfo内存用量/proc/$PID/cmdline进程启动参数
- 实战:秒看内核启动参数
cat /proc/cmdline- 实战:瞬间杀进程
echo 1 > /proc/sys/kernel/sysrq
echo f > /proc/sysrq-trigger # 立即触发 OOM-killer8.2 /sys —— 统一设备模型
- 2.6 内核后引入,把 设备、驱动、总线 分层展示。
- LED 彩蛋:
找到键盘灯路径
echo 1 | sudo tee /sys/class/leds/input4::capslock/brightness- 电源管理:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor9. /boot:内核与引导器的“车库”
- **vmlinuz-*` 压缩内核
- **initrd.img-*` 临时根文件系统,含磁盘驱动
- EFI 时代:
/boot/efi/EFI/ubuntu/grubx64.efi是实际引导文件,删除即无法开机。 - 备份建议:
sudo tar -C /boot -czf /backup/boot-$(uname -r).tar.gz .10. /media & /mnt:临时挂载“停车场”
- /media:桌面环境自动挂载 U 盘、光盘,权限 700,用户私有。
- /mnt:管理员手动挂载点,建议建子目录
/mnt/sdb1,避免混用。
11. /opt & /srv:大型应用与对外服务数据
- /opt:第三方商业软件(Chrome、VS Code、Minecraft)集中地,目录名通常带版本号,便于回滚。
- /srv:s = service,放 Web、FTP、Git 仓库等对外提供的数据,与系统文件隔离。
- 例:Nginx 默认网页
/srv/www/htdocs - rationale:系统升级时
/usr可被只读镜像覆盖,/srv保证数据不丢。
12. 可视化实战:tree 与 find 双剑合璧
12.1 安装与基础
sudo apt install tree
tree -L 2 / # 只看两层,防止刷屏常用 flag:
-d仅目录-h人类可读大小-I 'node_modules|__pycache__'排除垃圾目录
12.2 find 条件拼图
# 找出 /etc 下最近 7 天被修改过的 conf 文件
sudo find /etc -type f -name '*.conf' -mtime -7
# 把 /var/log 大于 100 MB 的日志搬到 /tmp
sudo find /var/log -size +100M -exec mv -t /tmp/ {} +
# 批量改权限:目录 755,文件 644
find /srv/www -type d -exec chmod 755 {} \;
find /srv/www -type f -exec chmod 644 {} \;12.3 画出一棵“带尺寸”的目录树
du -h --max-depth=1 /usr | sort -hr | head -n 10输出:
2.1G /usr/lib
1.4G /usr/share
...配合 tree -sh --du 可一层层钻到最胖子目录,定位磁盘杀手。
13. 一张思维导图总结(文字版)
/ 根目录
├─bin 急救工具
├─sbin 管理员工具
├─lib 基础库
├─etc 配置文件
├─usr 第二系统(只读)
│ ├─bin
│ ├─lib
│ └─local 手工编译
├─var 可变数据
├─tmp 临时磁盘
├─dev/shm 临时内存
├─proc 进程、内核参数
├─sys 设备模型
├─boot 内核与 GRUB
├─media 自动挂载
├─mnt 手动挂载
├─opt 第三方商业软件
└─srv 对外服务数据记住“功能>名字”,就能在任何发行版(甚至 macOS)秒找文件。
14. 结语:把目录树装进脑子,比背命令更重要
当你能下意识说出“Nginx 主配置在 /etc/nginx/nginx.conf,日志进 /var/log/nginx,网页根目录放 /srv/www”时,
- 装系统不再纠结分区大小;
- 排查“No such file or directory”先
find /etc -name xxx; - 备份知道只需 tar
/etc、/srv、/var/lib。
下一篇《权限与所有者:chmod、chown、umask 实战指南》将带你深入 rwx 背后的位运算与特殊标志,敬请期待!
















