当你第一次进入 Linux 系统的根目录,执行 ls / 看到 bin、etc、usr、var 这些缩写时,可能会觉得困惑。这套目录结构并不是随意创造的,而是遵循 文件系统层级标准(Filesystem Hierarchy Standard,简称 FHS)。FHS 定义了一套统一的目录布局和用途规范,让不同 Linux 发行版在文件组织上保持高度一致,无论是 Debian、Red Hat 还是 Arch,你都能在同样的位置找到系统配置、可执行程序和运行时数据。
理解 FHS 不是死记硬背,而是要明白每个目录背后设计的实际用途,这样在定位配置文件、查找日志、安装软件或排查故障时能快速找到正确的位置。
1. 根目录 / 下的核心目录
/bin:系统基础命令,如ls、cp、cat、mkdir。这些程序在系统启动或单用户维护模式下也必须可用,因此通常独立于/usr存在。在现代发行版中/bin经常是/usr/bin的符号链接,但概念上依然表示“基础命令”。/boot:存放系统启动所需的文件,如内核镜像(vmlinuz)、初始内存盘(initrd.img)和引导加载程序配置(GRUB)。这个目录通常单独分区,以保证启动文件不被其他数据影响。/dev:设备文件目录,每个文件都对应一个硬件设备或内核虚拟设备。例如/dev/sda是第一块硬盘,/dev/tty是终端,/dev/null是数据黑洞。这些文件由内核和 udev 动态创建,用户不能随意删除。/etc:系统配置文件的“大本营”。几乎所有的全局软件和服务配置都放在这里,如网络配置/etc/network/interfaces、SSH 服务配置/etc/ssh/sshd_config、用户账户信息/etc/passwd。这个目录仅包含静态配置文件,不应存放可执行程序或二进制数据。/home:普通用户的个人家目录,例如/home/alice。每个用户的数据、个人配置和文件都存放在自己的家目录下,与系统全局配置隔离。无论在职场还是实验中,这是一个非常需要备份和保护的位置。/lib和/lib64:存放系统启动和/bin、/sbin中程序所需的共享库文件和内核模块。例如 C 标准库libc.so.6。类似/bin,现代系统中这两个目录常常是/usr/lib的符号链接。/media和/mnt:传统挂载点。/mnt通常用于管理员临时手动挂载文件系统,如挂载 U 盘或 ISO 镜像;/media多用于系统自动挂载可移动设备(光盘、U 盘等)。/opt:可选大型商业软件或第三方软件包的手动安装目录。当你手动安装某个独立的第三方程序(而非通过包管理器),习惯上把它放在/opt/软件名/下,避免与系统包管理的文件混淆。/proc和/sys:虚拟文件系统,不占用磁盘。/proc提供进程和系统内核运行时信息,如/proc/cpuinfo、/proc/meminfo;/sys更结构化地暴露设备、驱动和内核参数,例如/sys/class/net/eth0/address。这些“文件”动态生成,是监控和调试的利器。/root:root 用户的家目录,与普通用户/home分开,以便在单用户模式或/home不可用时依然能正常登录系统。/run:存放系统启动以来的运行时数据,如 PID 文件、socket 文件等。这是一个挂载在内存中的临时文件系统(tmpfs),所有数据在重启后消失,适合需要每次启动重新建立的、短暂存活的信息。/sbin:系统管理命令,如fdisk、iptables、shutdown。与传统/bin一样,在目前许多发行版中已合并到/usr/sbin。/srv:服务数据目录,用于存放网络服务提供的数据文件,如 Web 服务器的网站文件可能放在/srv/www,FTP 文件放在/srv/ftp。这个目录不是必须的,但遵循标准有助于服务数据的统一管理。/tmp:临时文件目录,所有用户和程序都可以在此创建临时文件。通常也挂载为 tmpfs 即内存盘,权限通常设置了 sticky 位,防止用户删除他人的文件。重启后内容通常会被清除。/usr:绝大多数用户空间的软件和资源包放在这里,包括二进制程序(/usr/bin)、共享库(/usr/lib)、头文件(/usr/include)、文档(/usr/share)和源码(可选,/usr/src)。在早期 Unix 中/usr曾作为用户目录存放,但现在已是“Unix System Resources”的含义,不涉及用户个人文件。/var:频繁变动或不断增长的数据,包括系统日志(/var/log)、邮件队列(/var/mail)、打印队列(/var/spool)、数据库文件(/var/lib)、Web 服务器缓存等。/var目录经常被单独分区,防止日志写满磁盘时影响到根分区和系统稳定性。
2. 为什么 FHS 很重要
- 跨发行版的通用性:不论你用的是 Ubuntu、CentOS 还是 Debian,都知道去
/etc找配置,去/var/log看日志,去/opt寻手动安装的软件。这种可预期性大大降低了迁移和管理的成本。 - 维护与排错的效率:当服务无法启动时,FHS 让你首先去
/var/log查明原因,去/etc核对配置,而不是在整个磁盘里盲目搜索。编写自动化脚本时,也可以直接引用标准化路径,确保脚本可移植。 - 安全与权限分离:诸如
/boot、/、/home、/var可以分区挂载并设置不同的挂载选项(如noexec、nosuid),从而限制攻击面和防止恶意代码运行。这种分层隔离依赖的是目录布局的稳定。 - 备份与恢复的清晰性:确定哪些需要备份(如
/home、/etc、/var/lib/some-service)哪些不需要(如/tmp、/proc、/run),FHS 让备份策略变得直观。
3. 实用速查
- 想修改网络配置 ➔
/etc/netplan/或/etc/sysconfig/network-scripts/(视发行版) - 想查看系统整体性能 ➔
cat /proc/meminfocat /proc/loadavg - 想知道某个服务运行状态 ➔ 查看
/var/log/syslog或/var/log/messages - 想临时挂载U盘 ➔
mount /dev/sdb1 /mnt - 刚手动装了软件到
/opt/myservice➔ 执行文件通常就在/opt/myservice/bin/下
掌握 FHS 不是让你背诵所有路径,而是理解这套布局的背后逻辑:将系统所需按“静态与动态”“共享与独立”“启动必需与普通使用”进行分类隔离。这种思想让你在管理任何 Linux 系统时都能快速理清头绪,成为一名自信从容的运维者。