Linux 文件系统采用单一树状层次结构,所有分区、设备、虚拟文件系统都挂载在统一的根目录 / 之下,没有 Windows 式的 C:、D: 盘概念。这一设计遵循 Filesystem Hierarchy Standard(FHS),由 Linux 基金会(早期)维护,最新版本为 3.0(2015 年发布,2025 年由 FreeDesktop.org 重新发布并接管维护)。
FHS 的核心目标是:
- 确保不同发行版目录用途一致,便于用户、管理员、脚本跨系统迁移
- 区分静态/可共享 与 动态/主机特定 数据
- 支持系统恢复、单用户模式、网络挂载等场景
现代主流发行版(Ubuntu 24.04+、Fedora 40+、Arch、Debian bookworm+、Rocky/Alma 9+)基本遵循 FHS 3.0,同时大量采用 merged-/usr(/bin → /usr/bin 的符号链接),少数仍保留传统分离布局。
1. FHS 目录分类原则
FHS 将目录按两个维度分类:
- 可共享 vs 不可共享(shareable vs unshareable)
- 可共享:可以放在 NFS 等网络文件系统上,多主机共用(如 /usr、/opt)
- 不可共享:特定主机独有(如 /etc、/var、/home)
- 静态 vs 可变(static vs variable)
- 静态:安装后基本不变(如 /bin、/usr/bin、/lib)
- 可变:运行中频繁修改(如 /var/log、/var/spool、/tmp)
这四个象限组合决定了目录的典型位置。
2. 根目录 / 下主要目录详解(2026 年现状)
以下表格按重要程度和实际使用频率排序,包含用途、是否 merged-/usr 影响、典型大小、是否可卸载到独立分区、现代变化点。
| 目录 | 主要用途 | 是否必须在根分区 | 典型占用 | 可独立分区 | 现代趋势与备注 |
|---|---|---|---|---|---|
| / | 整个文件系统根起点 | 是 | — | — | — |
| /boot | 内核、initramfs、引导加载器(GRUB、systemd-boot)配置文件 | 强烈推荐 | 几百 MB–2GB | 是(常见) | EFI 系统下常为 /boot/efi(FAT32);某些发行版放 /boot/efi/boot |
| /etc | 主机特定系统和服务配置文件中心 | 是 | 几十–几百 MB | 否 | 几乎所有手工修改集中在此;docker/kubernetes 配置常放 /etc/xxx |
| /bin | 基础必需命令(单用户模式也能用)→ 已 merged 到 /usr/bin | 是(符号链接) | — | 否 | 2025–2026 Fedora/Arch/Ubuntu/Debian 均为 symlink |
| /sbin | 系统管理命令(传统上 root 专用)→ 已 merged 到 /usr/sbin | 是(符号链接) | — | 否 | 同上;systemd 时代 /usr/sbin 内容越来越少 |
| /usr | 只读、可共享的用户与系统软件主目录 | 推荐 | 5–20+ GB | 是(常见) | 现代 merged-/usr 布局下成为实际软件存储根;/usr/local 放手工编译软件 |
| /var | 运行时可变数据:日志、缓存、队列、数据库文件、Docker/Podman 数据 | 推荐 | 可达数十 GB | 是(强烈推荐) | /var/log、/var/lib/docker、/var/cache 是磁盘爆满头号嫌疑人 |
| /home | 用户个人数据、家目录 | 推荐 | 用户决定 | 是(常见) | 企业服务器常单独分区,便于系统重装不丢数据 |
| /root | root 用户家目录 | 是 | 小 | 否 | 与普通用户 /home 分开,避免混淆 |
| /tmp | 临时文件(很多发行版用 tmpfs,重启清空) | — | 几百 MB–几 GB | 可(但多为 tmpfs) | systemd-tmpfiles 自动清理;/var/tmp 保留跨重启临时文件 |
| /dev | 设备节点(由 udev 动态创建) | — | 很小 | 否(devtmpfs) | 现代为 devtmpfs + tmpfs 混合 |
| /proc | 进程与内核运行时信息(procfs,纯内存文件系统) | — | 很小 | 否 | /proc/cpuinfo、/proc/meminfo、/proc/<pid>/ 实时数据 |
| /sys | 设备、驱动、内核参数暴露(sysfs,纯内存) | — | 很小 | 否 | /sys/class/net/、/sys/block/、/sys/module/ 常用 |
| /run | 运行时临时数据(取代旧 /var/run,tmpfs) | — | 小 | 否(tmpfs) | systemd、lock 文件、pid 文件集中 |
| /mnt | 管理员临时挂载点 | — | — | — | 手动 mount 用;不建议长期使用 |
| /media | 自动挂载可移动介质(U 盘、光盘) | — | — | — | udisks/桌面环境使用 |
| /opt | 第三方独立软件包(非包管理器安装) | — | 可大 | 可 | 如 Google Chrome、某些商业软件 |
| /srv | 服务提供的数据(www、ftp、rsync 等) | — | 可大 | 可 | 逐渐被 /var/www、/var/lib/gitea 等取代 |
| /lost+found | ext4 文件系统修复时孤立文件恢复目录 | — | — | — | fsck 自动生成 |
3. 关键目录深度对比:/etc vs /var vs /usr vs /proc vs /sys
这五个目录最常被新手混淆,以下是核心区别:
- /etc:静态、主机特定配置 只读性质为主(权限多 644/640),几乎不随运行变化。 典型文件:passwd、group、fstab、nginx.conf、sshd_config、resolv.conf 改动频率:管理员手工或 ansible 改,改后需重启服务。
- /var:动态、可变运行数据 权限宽松,内容随系统运行爆炸式增长。 子目录重点:
- /var/log/* — 所有日志(journald 可选转存)
- /var/lib — 服务状态数据(docker、mysql、postgresql 数据目录常在此)
- /var/cache — 包缓存、字体缓存
- /var/spool — 打印队列、邮件队列
- /var/tmp — 需跨重启保留的临时文件
- /usr:静态、可共享的软件与数据 现代 merged 布局下,/usr 是实际的“程序安装根”。 子目录:
- /usr/bin、/usr/sbin — 几乎所有命令
- /usr/lib — 库、模块
- /usr/share — 架构无关数据(文档、图标、locale)
- /usr/local — 源码编译安装的软件(优先级高于 /usr)
- /proc:内核暴露的进程与系统实时信息(虚拟文件系统) 内容由内核动态生成,无实际磁盘占用。 常用文件:
- /proc/cpuinfo、/proc/meminfo、/proc/loadavg
- /proc/sys/* — 调整内核参数(sysctl 实际操作这里)
- /proc/<pid>/ — 每个进程的 fd、maps、limits、environ
- /sys:设备模型与驱动参数接口(sysfs) 比 /proc 更结构化,面向设备树。 常用路径:
- /sys/class/net/eth0/statistics/
- /sys/block/nvme0n1/queue/
- /sys/module/ — 加载的内核模块参数
- /sys/power/ — 电源管理
4. 现代趋势(2025–2026 年现状)
- merged-/usr 已成事实标准:Fedora 42+、Arch、Ubuntu/Debian bookworm+、openSUSE 均完成 /bin、/sbin、/lib → /usr 下对应目录的符号链接转换。
- /usr-merge 进一步简化 initramfs 和早期启动逻辑。
- tmpfs 使用扩大:/run、/dev/shm、/tmp(部分发行版)、甚至 /var/tmp 在高安全环境中用 tmpfs。
- /var/lib/containers 或独立分区越来越常见(Podman/Docker/Kubernetes 时代)。
- FHS 本身更新缓慢,但实际实现随 systemd、容器化、eBPF 等技术演进。
5. 实用建议
- 服务器规划分区时推荐顺序:
- /boot 或 /boot/efi(1–2GB)
- /(根,20–50GB,根据软件量)
- /var(剩余大部分空间,或单独大分区)
- /home(用户数据)
- swap(视内存大小,推荐 zram + 小 swap 分区)
- 快速查看目录占用:du -sh /* | sort -hr
- 查找配置文件:find /etc -type f -name "*nginx*"
- 实时监控 /proc /sys:watch -n 2 cat /proc/meminfo
理解 Linux 文件系统结构,就是理解了“系统把什么放在哪里,为什么这么放”。一旦建立这个地图,后续排查问题、优化性能、写自动化脚本都会事半功倍。