Ubuntu 系统目录结构详解(基于 FHS 标准)
Ubuntu(以及几乎所有主流 Linux 发行版)严格遵循 Filesystem Hierarchy Standard (FHS),这是 Linux Foundation 维护的文件系统层次结构标准(最新正式版为 3.0,2015 年发布,后续由 freedesktop.org 等组织维护与小幅更新)。FHS 的核心设计目标是:
- 统一不同发行版的文件布局,便于软件移植、文档编写和系统管理
- 区分可共享 / 不可共享、静态 / 可变 文件,支持网络文件系统(NFS)、只读挂载 /usr 等高级场景
- 保持根文件系统(/)尽可能小且包含启动、恢复所需的一切
所有文件和目录都从单一的根目录 / 开始,没有 Windows 式的 C:、D: 盘符。以下按重要性与使用频率,从根目录开始逐一详解 Ubuntu 24.04 LTS / 26.04 LTS 中的典型目录结构(实际内容可能因安装的软件包略有差异)。
核心目录一览表(FHS 要求 + Ubuntu 常见实践)
| 目录 | 是否必须在根分区 | 主要内容类型 | 可共享? | 可变? | 典型用途与注意事项 |
|---|---|---|---|---|---|
| / | 是 | 整个文件系统根 | — | — | 起点,不可删除或创建随意文件。空间尽量控制在 10–30 GB(云服务器常见)。 |
| /bin | 是 | 基本用户命令二进制 | 是 | 否 | ls、cp、mv、cat、bash 等。即使单用户模式也能使用。Ubuntu 24.04+ 很多已移到 /usr/bin(符号链接)。 |
| /boot | 是(强烈推荐) | 内核、initramfs、引导加载器 | 否 | 部分 | vmlinuz、initrd.img、grub.cfg。EFI 系统还有 /boot/efi(FAT32 分区)。 |
| /dev | 是 | 设备文件(动态生成) | 否 | 是 | /dev/sda、/dev/null、/dev/zero。由 udev / devtmpfs 管理,通常是 tmpfs。 |
| /etc | 是 | 系统配置文件 | 否 | 是 | 最常修改的地方:/etc/passwd、/etc/fstab、/etc/nginx/、/etc/apt/sources.list 等。 |
| /home | 可分离 | 用户家目录 | 部分 | 是 | /home/wu、/home/user/.ssh/ 等。建议单独分区,便于备份与重装系统。 |
| /lib / /lib64 | 是 | 核心共享库与内核模块 | 是 | 否 | libc.so、ld-linux.so 等。类似 /bin,部分内容符号链接到 /usr/lib。 |
| /media | 是 | 自动挂载的可移动介质 | 否 | 是 | 插入 U 盘、光盘时自动出现 /media/wu/USB 等(由 udisks 管理)。 |
| /mnt | 是 | 管理员手动临时挂载点 | 否 | 是 | 经典用法:mount /dev/sdb1 /mnt 测试新硬盘。 |
| /opt | 可分离 | 第三方独立软件包 | 是 | 部分 | 手工安装的软件如 /opt/google/chrome、/opt/idea。较少使用。 |
| /proc | 是 | 进程与内核信息(虚拟) | 否 | 是 | /proc/cpuinfo、/proc/meminfo、/proc/sys/ 等。tmpfs,不占磁盘。 |
| /root | 是 | root 用户的家目录 | 否 | 是 | root 的 .bashrc、.ssh 等。注意与 / 根目录区分。 |
| /run | 是 | 运行时数据(自上次启动) | 否 | 是 | /run/user/1000(用户运行时文件)、/run/docker.sock 等。tmpfs,重启清空。 |
| /sbin | 是 | 系统管理命令 | 是 | 否 | fdisk、reboot、ifconfig(旧)、ip 等。普通用户也能执行但常需 sudo。 |
| /srv | 可分离 | 服务数据(如 www、ftp) | 是 | 是 | /srv/www、/srv/ftp。现代用法较少,很多人仍放 /var/www。 |
| /sys | 是 | 内核设备树与 sysfs(虚拟) | 否 | 是 | /sys/class/net/eth0、/sys/block/sda 等。tmpfs。 |
| /tmp | 可分离(推荐) | 临时文件 | 否 | 是 | 重启可能清空(取决于 /etc/tmpfiles.d 配置)。很多程序写中间文件在这里。 |
| /usr | 可分离(推荐只读) | 用户程序与数据 | 是 | 否 | 最大目录:/usr/bin、/usr/lib、/usr/share、/usr/local(本地编译安装)。 |
| /var | 可分离(强烈推荐) | 可变数据 | 否 | 是 | 日志(/var/log)、缓存(/var/cache)、邮件(/var/mail)、数据库(/var/lib/mysql)。 |
三大主要层次的逻辑划分(FHS 核心思想)
根文件系统(/) 必须包含启动、单用户模式恢复所需的一切。设计目标:尽量小(现代云镜像根分区常 8–20 GB)。 强制包含:/bin、/boot、/dev、/etc、/lib、/sbin(或符号链接形式)。
/usr 层次(可共享、静态) 存放绝大多数用户可见的程序、库、文档。 子目录示例:
- /usr/bin → 普通命令(git、python3、docker 等)
- /usr/sbin → 管理命令
- /usr/lib → 共享库
- /usr/share → 架构无关数据(文档、图标、时区文件)
- /usr/local → 本地手工安装软件(优先级高于 /usr/bin)
- /usr/src → 内核源码(可选)
现代系统常把 /usr 设计为只读挂载,提高安全性与一致性。
/var 层次(不可共享、可变) 存放会随系统运行而变化的数据。 常见子目录:
- /var/log → journal、syslog、nginx、apache2 等日志(最常占空间)
- /var/cache → apt 缓存、snap 缓存
- /var/lib → 数据库(mysql、docker)、dpkg 状态
- /var/spool → 打印队列、邮件队列
- /var/tmp → 比 /tmp 更持久的临时文件
Ubuntu 特有或现代变化(24.04 / 26.04 时代)
- /snap:Snap 包安装后出现在这里(/snap/core、/snap/postman 等)。
- /var/log/journal:systemd-journald 的持久化日志(默认启用)。
- /etc/systemd:systemd 单元文件、networkd 配置。
- 很多发行版已将 /bin、/sbin、/lib 符号链接到 /usr 对应目录(merged-usr 方案),Ubuntu 24.04+ 也逐步推进。
- /run 一定是 tmpfs(内存文件系统),重启丢失。
快速查看与管理技巧
Bash
# 查看整体目录占用(从大到小)
sudo du -sh /* | sort -hr | head -15
# 查看目录树(需安装 tree)
tree -L 2 /
# systemd-path 查看标准路径
systemd-path理解这些目录的定位后,你就能快速判断“日志满了该清哪里”“配置文件改哪”“新软件装哪里”“重装系统时哪个分区要备份”。这是 Linux 系统管理最基础但也最核心的知识点之一。