| 核心结论 | 说明 |
|---|---|
| FHS 解决“文件应该放哪里”的问题 | 统一 Linux 目录用途,降低运维和软件适配成本 |
/etc 放配置,/var 放可变数据,/usr 放大部分用户态软件资源 | 排查问题时先按目录职责定位 |
/proc、/sys、/run 多数不是普通磁盘文件 | 它们常是内核或 systemd 提供的虚拟文件系统 |
| 现代发行版常启用 usr-merge | /bin、/sbin、/lib 可能只是指向 /usr/* 的软链接 |
1.简介
FHS(Filesystem Hierarchy Standard,文件系统层次标准)定义 Linux 系统中各目录的用途。
它主要解决两个问题:
- 文件应该放在哪里;
- 出问题时应该去哪里找。
对于运维和后端开发,FHS 的价值不是背目录,而是建立排查路径:
- 配置问题:优先看
/etc; - 日志问题:优先看
/var/log; - 运行时状态:优先看
/run; - 进程和内核状态:优先看
/proc、/sys; - 第三方软件:优先看
/opt、/usr/local。
2.说明
2.1 FHS 的四类目录属性
FHS 按两个维度理解目录:
- 是否可以被多台机器共享;
- 内容是否经常变化。
| 类型 | 可分享 | 不可分享 |
|---|---|---|
| 不变 | /usr、/opt | /etc、/boot |
| 可变 | /var/mail、/var/spool/news | /var/run、/var/lock |
说明:
| 属性 | 含义 |
|---|---|
| 可分享 | 可以被其他系统挂载使用,例如只读共享 /usr |
| 不可分享 | 与本机强相关,例如主机配置、启动文件 |
| 不变 | 安装后变化较少,例如程序和库文件 |
| 可变 | 运行中经常变化,例如日志、缓存、锁文件 |
2.2 根目录常见路径
| 目录 | 作用 | 排查场景 |
|---|---|---|
/bin | 基础用户命令,现代系统常指向 /usr/bin | ls、cat、cp 等基础命令 |
/sbin | 基础系统管理命令,现代系统常指向 /usr/sbin | ip、mount、reboot 等 |
/boot | 内核、initramfs、Bootloader 文件 | 内核启动失败、GRUB 问题 |
/dev | 设备文件 | 磁盘、终端、伪设备排查 |
/etc | 系统和服务配置 | 配置文件、systemd override、网络配置 |
/home | 普通用户家目录 | 用户配置、SSH key、shell 配置 |
/lib、/lib64 | 共享库,现代系统常指向 /usr/lib* | 动态库缺失、ld.so 问题 |
/media | 可移动设备挂载点 | U 盘、光盘自动挂载 |
/mnt | 临时手动挂载点 | 临时挂载磁盘、NFS、镜像 |
/opt | 第三方独立软件 | 手动安装的软件包 |
/proc | 进程和内核虚拟文件系统 | CPU、内存、进程、内核参数 |
/root | root 用户家目录 | root 用户配置 |
/run | 运行时状态数据 | pid 文件、socket、lock |
/srv | 服务对外提供的数据 | Web、FTP、业务服务数据 |
/sys | 内核设备模型虚拟文件系统 | 设备、驱动、cgroup、内核对象 |
/tmp | 临时文件 | 临时缓存,通常可被定期清理 |
/usr | 用户态程序、库、文档 | 绝大多数系统软件资源 |
/var | 可变数据 | 日志、缓存、队列、数据库运行数据 |
排查 Linux 问题时先按目录职责定位:配置找
/etc,日志找 /var/log,进程找 /proc,运行态找 /run。2.3 /usr、/usr/local、/opt 的区别
这三个目录容易混淆。
| 目录 | 用途 | 管理方式 |
|---|---|---|
/usr | 发行版软件包安装的主要位置 | 包管理器管理,例如 apt/yum/dnf |
/usr/local | 本机管理员手动安装的软件 | 本机维护,不应被发行版包覆盖 |
/opt | 第三方独立软件目录 | 软件自带目录结构,例如 /opt/google/chrome |
示例:
| |
建议:
- 不建议手动修改
/usr/bin下由包管理器安装的文件; - 自编译小工具可以放
/usr/local/bin; - 完整第三方软件包可以放
/opt/<name>。
2.4 /etc 常见配置文件
| 路径 | 说明 |
|---|---|
/etc/passwd | 用户账号信息 |
/etc/shadow | 用户密码哈希,权限敏感 |
/etc/group | 用户组信息 |
/etc/fstab | 开机挂载配置 |
/etc/hosts | 本地域名解析 |
/etc/resolv.conf | DNS 解析配置,可能由 NetworkManager/systemd-resolved 管理 |
/etc/hostname | 主机名 |
/etc/ssh/sshd_config | SSH 服务端配置 |
/etc/sudoers、/etc/sudoers.d/ | sudo 权限配置 |
/etc/systemd/system/ | 本机 systemd unit 覆盖和自定义配置 |
/etc/profile、/etc/profile.d/ | 全局登录 shell 配置 |
修改配置建议:
| |
配置类文件修改前建议备份;服务类配置修改后建议先做语法检查,再 reload/restart。
2.5 /var 常见目录和日志
/var 存放运行中会变化的数据。
| 路径 | 说明 |
|---|---|
/var/log | 日志目录 |
/var/cache | 应用缓存 |
/var/lib | 应用状态数据,例如数据库、包管理器状态 |
/var/spool | 队列数据,例如 mail、cron |
/var/tmp | 跨重启保留时间更长的临时文件 |
/var/run | 旧路径,现代系统通常指向 /run |
/var/lock | 旧路径,现代系统通常指向 /run/lock |
常见日志:
| 日志文件 | 说明 |
|---|---|
/var/log/messages | RHEL/CentOS 常见系统日志 |
/var/log/syslog | Debian/Ubuntu 常见系统日志 |
/var/log/auth.log | Debian/Ubuntu 认证日志 |
/var/log/secure | RHEL/CentOS 认证日志 |
/var/log/cron | cron 任务日志,RHEL/CentOS 常见 |
/var/log/dmesg | 内核启动日志快照 |
/var/log/wtmp | 登录、注销、重启记录,last 查看 |
/var/log/btmp | 登录失败记录,lastb 查看 |
/var/log/lastlog | 用户最近登录记录,lastlog 查看 |
systemd 系统还需要关注 journal:
| |
2.6 /proc、/sys、/run
这几个目录不是普通意义上的磁盘目录。
| 目录 | 类型 | 说明 |
|---|---|---|
/proc | procfs | 进程、内核参数、系统状态 |
/sys | sysfs | 设备、驱动、内核对象、cgroup |
/run | tmpfs | 本次启动周期内的运行时状态 |
常见排查路径:
| 路径 | 说明 |
|---|---|
/proc/cpuinfo | CPU 信息 |
/proc/meminfo | 内存信息 |
/proc/loadavg | 系统负载 |
/proc/<pid>/ | 指定进程状态 |
/proc/<pid>/fd/ | 进程打开的文件描述符 |
/proc/mounts | 当前挂载信息 |
/sys/class/net/ | 网卡设备信息 |
/run/systemd/ | systemd 运行态数据 |
示例:查看某进程打开了哪些文件:
| |
2.7 usr-merge 说明
现代发行版常见现象:
| |
这叫 usr-merge。
目的:
- 简化系统目录结构;
- 避免
/bin与/usr/bin中命令重复; - 让大多数只读系统资源集中到
/usr。
影响:
- 老文档中说
/bin放基础命令,现代系统上可能实际在/usr/bin; - 排查命令路径时,以
which、type、readlink -f的实际结果为准。
| |
3.总结
- FHS 是 Linux 目录用途规范,核心是明确文件应该放哪里、问题应该去哪里查;
/etc放配置,/var放可变数据,/usr放系统软件资源,/opt放第三方独立软件;/proc、/sys、/run多数是虚拟文件系统,不应按普通磁盘目录理解;- 现代发行版常启用 usr-merge,
/bin、/sbin、/lib可能只是指向/usr的软链接; - 排查问题时,先按目录职责定位,再结合
systemctl、journalctl、/proc等工具确认。