linux目录结构源于unix演进,受硬件限制、多用户需求等约束:/与/usr物理分离形成启动核心与软件主体分工;/lib系列按abi分层适配多架构;/etc、/var、/tmp依数据生命周期隔离;/home、/root、/opt明确用户、权限与第三方软件边界。

Linux目录结构不是凭空设计的,而是从早期Unix一路演进过来的。它的分层逻辑、目录命名和存放规则,核心不是“该放哪”,而是“为什么当初要这样放”——背后是硬件限制、多用户需求、安全演进和跨架构兼容等现实约束共同塑造的结果。
/ 和 /usr:物理分离催生的逻辑分工
1971年PDP-11上,一块RK05磁盘只有1.5MB容量,系统很快装不下。工程师把第二块盘挂载为/usr,专门放用户程序,而/只保留最精简的启动和核心工具。这种物理隔离后来固化为语义分工:
- / 存放系统启动必需的二进制(/bin、/sbin)、内核模块(/lib/modules)、动态链接器(/lib/ld-linux.so*)
- /usr 成为“只读”的软件主体:/usr/bin 是绝大多数命令所在,/usr/lib 是第三方库主阵地,/usr/share 存放架构无关数据(手册、图标、本地化文件)
- 现代发行版常将 /usr 合并进根分区,但语义边界仍被严格遵守;FHS明确禁止在 /usr 下放置可变数据或运行时文件
/lib 与多架构共存:从单一到分层的必然选择
2001年x86_64出现前,/lib 就是32位系统的全部系统库家。但64位ABI不兼容32位,硬塞一起会破坏动态链接器查找逻辑。于是演化出:
- /lib 保留给与架构无关的启动关键库(如ld-linux.so.*)和内核模块路径
- /lib64 在x86_64系统中成为64位系统库主目录(/lib64/ld-linux-x86-64.so.2)
- /libx32 为x32 ABI(32位指针+64位寄存器)单独开辟空间,避免混用风险
- 这种“按ABI分目录”策略,比修改链接器逻辑更轻量,也延续了Unix“显式优于隐式”的哲学
/etc、/var 与 /tmp:数据生命周期驱动的分离
早期Unix把配置、日志、临时文件全堆在根下,导致升级时极易误删。FHS按数据稳定性重新划分:
- /etc 只存静态配置:纯文本、管理员手动编辑、不随运行改变(如passwd、fstab、nginx.conf)
- /var 专管可变数据:日志(/var/log)、邮件队列(/var/spool/mail)、数据库文件(/var/lib/mysql)、缓存(/var/cache)——这些必须能独立挂载且支持定期清理
- /tmp 和 /var/tmp 区分临时性:前者重启清空,后者跨重启保留(用于长时间运行任务的中间文件)
/home、/root 与 /opt:用户、权限与第三方软件的边界意识
多用户环境倒逼出清晰归属管理:
- /home 是普通用户主目录的统一挂载点,每个子目录(/home/alice)对应一个UID,便于配额、备份和迁移
- /root 独立于/home,确保管理员账户不受用户空间故障影响(比如/home满导致root无法登录)
- /opt 专供第三方商业软件(如Oracle、MATLAB),目录结构自包含(/opt/oracle/product/),不污染/usr,卸载只需删整个/opt子树











