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 不含 /sbinsudo 才临时拥有。
  • 翻车案例ifconfig 找不到?Debian 系已弃用 net-tools,用 ip(在 /bin)。

3. /lib:/bin 与 /sbin 的“后勤部”

  • **libc.so.libm.so.等基础共享库,以及内核模块/lib/modules/$(uname -r)`。
  • 64 位系统常见 /lib64 软链,保证多架构共存。

4. /etc:配置大排档——“etc”=“et cetera”

FHS 4.1 节规定:主机特有的静态配置文件必须放这里,不可放可执行二进制。

  • 经典文件
  • /etc/passwd 用户库
  • /etc/fstab 磁盘映射
  • /etc/nginx/nginx.conf Web 服务器
  • 目录化趋势
  • /etc/apt/sources.list.d/*.list 模块化源
  • /etc/systemd/system/ 单元文件
  • 权限黄金法则:目录 755,文件 644;只有 root 可写,防止普通用户改 DNS 劫持。
  • 备份技巧
sudo tar -czf /backup/etc-$(date +%F).tar.gz -C / etc

5. /usr:UNIX Software Resource——“第二系统”

  • 只读、可共享,可被多台无盘客户端 NFS 挂载。
  • 子目录与根目录对应:
  • /usr/bin 普通用户命令(git, vim)
  • /usr/lib 应用程序库
  • /usr/include 头文件
  • /usr/local:本地编译软件默认前缀,不受包管理器管辖。手工 make install 装到 /usr/local/bin,升级系统不冲突。

6. /var:可变数据“菜市场”

  • v = variable,大小随时间增长。
  • 三大金刚
  1. /var/log 日志(syslog, dmesg, nginx/access.log)
  2. /var/lib 包管理器数据库(dpkg, rpm)
  3. /var/spool 任务队列(打印、邮件、cron)
  • 清理策略
sudo journalctl --vacuum-time=30d   # systemd 日志
sudo apt autoremove --purge

7. /tmp & /dev/shm:临时文件“双雄”

特性

/tmp

/dev/shm

存储

磁盘(可 swap)

纯内存(tmpfs)

权限

1777 任何人可写

默认 1777

速度


极快,重启丢

场景

编译中间文件

进程间共享内存

技巧:把浏览器缓存搬进内存,减少 SSD 写入

mkdir -p /dev/shm/$USER-chromium
ln -s /dev/shm/$USER-chromium ~/.cache/chromium

8. /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-killer

8.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_governor

9. /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)集中地,目录名通常带版本号,便于回滚。
  • /srvs = 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 背后的位运算与特殊标志,敬请期待!