Linux 文件系统层级标准 FHS 详解:/bin、/etc、/var 到底该放什么

很多刚接触 Linux 的人,第一次打开根目录都会被 /bin/etc/var/usr 这一堆目录搞晕。它们不是随便起的名字,而是遵循一套叫 FHS(Filesystem Hierarchy Standard,文件系统层级标准) 的规范。理解这套规范,是搞懂 Linux 文件系统结构 的第一步,也能让你在排错、迁移、做备份时少走弯路。

一、为什么需要 FHS

早期的 Unix 各发行版目录摆放很随意,导致软件在不同系统间难以移植。FHS 的出现就是为了解决“文件到底该放哪”的混乱:它规定哪些目录是静态的(不随运行改变)、哪些是动态的(运行时产生),哪些是仅管理员可写、哪些是所有用户可读。这套约定让 Linux 各目录作用 变得可预期。

1.1 静态与动态的分界线

静态文件指操作系统和软件本身,升级之外不会变,例如二进制、库、配置文件模板;动态文件指日志、缓存、进程运行数据,随使用不断产生。FHS 把两者分到不同顶层目录,正是为了让你能单独挂载、单独备份。

二、根目录下的核心成员

2.1 /bin 与 /sbin:最基础的命令

/bin 存放所有用户都能用的基础命令(ls、cp、mv、cat)。/sbin 则放系统管理命令(fdisk、reboot、ifconfig),通常只有 root 需要。现代发行版(如 systemd 系)很多把 /bin 软链到 /usr/bin,这是“usr merge”带来的变化,但语义不变。

2.2 /etc:配置的家

所有系统级配置文件都在 /etc:网络、用户、服务、计划任务。它是静态的,但内容会随你修改而改变。这也是 /var 与 /etc 区别 的关键——/etc 存“怎么跑”,/var 存“跑出来的结果”。

2.3 /var:运行时数据的仓库

/var 存放经常变化的文件:日志(/var/log)、邮件队列、打印队列、网站数据(/var/www)、包缓存(/var/cache)。它永远是动态的,备份策略应和 /etc 分开。

2.4 /usr:用户程序的大本营

/usr 是只读的用户态软件区:/usr/bin 放绝大多数命令,/usr/lib 放库,/usr/share 放文档与区域数据。它和 / 根分区的区别是:根分区只需要能启动的最小集合,其余都交给 /usr

三、搞清楚启动链路,目录才有意义

目录结构不是孤立的。想真正理解根分区里为什么只有 /bin 而没有整套 /usr,得先看机器是怎么从按下电源到进入系统的。我们之前详细拆解过 从 UEFI/BIOS 到 systemd 的完整开机过程,其中 ramdisk 阶段加载的正是 /bin/lib 这些最小集合,等真正的根挂载后才切换过去。

四、日常排错中的实用观察

当你发现某个服务起不来,第一反应常是去 /var/log 翻日志;发现命令找不到,要确认它在 /usr/bin 还是被路径变量漏掉。进程层面的排查则可以参考 从 ps/top 到 systemd 服务管控实战,把“目录里有什么”和“进程在跑什么”对应起来。

4.1 权限是另一半真相

目录放对了,文件却读不了,多半是权限问题。/etc/shadow 只能 root 读、/tmp 所有人可写但他人不可改,这些约定也是 FHS 精神的一部分。需要细粒度控制时,可以看 从 chmod 到 ACL 访问控制 把读写执行权限讲到透。

五、给备份与迁移的实操建议

基于以上认知,一套稳妥的备份策略是:/etc 全量备份(配置无价);/var/log 可只保留近期;/usr 不必备份(重装即得);/home 重点备份(用户数据)。这样既省空间又保关键。

小结

FHS 不是死规定,而是“让系统可预期”的约定。记住 /bin 放命令、/etc 放配置、/var 放变化、/usr 放软件 这条主线,再结合启动流程与权限模型,你就能在任何一台 Linux 上迅速定位文件该去哪。下一台新机器,不妨先用 tree -L 1 / 把根目录看一遍,目录结构会一下子清晰起来。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容