人人都会AI编程

2.3 文件系统层级标准(FHS)

更新时间:2026-07-12

当你第一次进入 Linux 系统的根目录,执行 ls / 看到 binetcusrvar 这些缩写时,可能会觉得困惑。这套目录结构并不是随意创造的,而是遵循 文件系统层级标准(Filesystem Hierarchy Standard,简称 FHS)。FHS 定义了一套统一的目录布局和用途规范,让不同 Linux 发行版在文件组织上保持高度一致,无论是 Debian、Red Hat 还是 Arch,你都能在同样的位置找到系统配置、可执行程序和运行时数据。

理解 FHS 不是死记硬背,而是要明白每个目录背后设计的实际用途,这样在定位配置文件、查找日志、安装软件或排查故障时能快速找到正确的位置。

1. 根目录 / 下的核心目录

  • /bin:系统基础命令,如 lscpcatmkdir。这些程序在系统启动或单用户维护模式下也必须可用,因此通常独立于 /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:系统管理命令,如 fdiskiptablesshutdown。与传统 /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 可以分区挂载并设置不同的挂载选项(如 noexecnosuid),从而限制攻击面和防止恶意代码运行。这种分层隔离依赖的是目录布局的稳定。
  • 备份与恢复的清晰性:确定哪些需要备份(如 /home/etc/var/lib/some-service)哪些不需要(如 /tmp/proc/run),FHS 让备份策略变得直观。

3. 实用速查

  • 想修改网络配置 ➔ /etc/netplan//etc/sysconfig/network-scripts/(视发行版)
  • 想查看系统整体性能 ➔ cat /proc/meminfo cat /proc/loadavg
  • 想知道某个服务运行状态 ➔ 查看 /var/log/syslog/var/log/messages
  • 想临时挂载U盘 ➔ mount /dev/sdb1 /mnt
  • 刚手动装了软件到 /opt/myservice ➔ 执行文件通常就在 /opt/myservice/bin/

掌握 FHS 不是让你背诵所有路径,而是理解这套布局的背后逻辑:将系统所需按“静态与动态”“共享与独立”“启动必需与普通使用”进行分类隔离。这种思想让你在管理任何 Linux 系统时都能快速理清头绪,成为一名自信从容的运维者。