原标题:Linux文件系统

Linux 一切皆文件。

/
├── bin      #基础命令(binary)
├── etc      #系统配置
├── home     #普通用户
├── root     #root 用户
├── usr      #用户程序(**Unix System Resources**)
├── var      #经常变化的数据
├── opt      #第三方软件
├── tmp      #临时文件
├── dev      #设备
├── proc     #内核信息
└── sys      #内核设备接口

各目录的作用

/bin - 基本命令二进制文件(ls、cp、mv、cat 等),系统启动和单用户模式下必须可用的命令。现代发行版中常常是 /usr/bin 的符号链接。

/etc - 系统级配置文件(“etcetera”的缩写,历史遗留命名)。纯文本配置为主,不含二进制程序。

/home - 普通用户的家目录,每个用户一个子目录(如 /home/star),存放个人文件、用户级配置(~/.bashrc、~/.config 等)。

/root - root 用户专属的家目录。

/usr - “Unix System Resources”(不是 user 的缩写,这是常见误解),存放绝大多数用户态软件、库、文档、共享数据。子目录结构模仿根目录:/usr/bin、/usr/lib、/usr/share 等。

/var - “variable”,存放会随系统运行不断变化的数据:日志、缓存、邮件队列、数据库文件、锁文件等。

/opt - 可选的第三方/商业软件包,通常自成一体不遵循 FHS 拆分规则(比如某软件把 bin、lib、conf 都塞在自己的 /opt/软件名/ 目录下)。

/tmp - 临时文件,系统重启通常会清空。

/dev - 设备文件,硬件设备在文件系统中的抽象接口(如 /dev/sda、/dev/null)。

/proc - 虚拟文件系统,实时反映内核和进程状态(如 /proc/cpuinfo、/proc/1234/status),不占用实际磁盘空间。

/sys - 虚拟文件系统,暴露内核对象、设备驱动、内核参数(比 /proc 更现代、更结构化)。

为什么配置在 /etc

Unix 设计哲学是“按数据性质分类,而非按软件包分类”。所有系统级配置无论属于哪个程序,统一放在一处,方便系统管理员备份、审计、批量管理(比如直接 tar 整个 /etc 就能备份全部配置)。

为什么日志在 /var/log

日志属于“运行时产生、持续增长的可变数据”,这正是 /var 存在的意义。把易变数据和静态程序/配置分开,便于给 /var 单独挂载分区、设置磁盘配额,避免日志爆炸把根分区写满导致系统瘫痪。

为什么软件在 /usr

历史原因:早期 Unix 磁盘空间小,/(根分区)放最小可用系统,/usr 最初是给用户放东西的独立分区,后来演变成存放非必需但常用的程序和库。现代发行版里 /usr 事实上承载了系统里绝大部分软件,是为了把“启动必需的最小系统”(根分区)和“普通运行时软件”分开,即便合并到同一分区,这个逻辑分层依然保留,方便只读挂载 /usr 做安全加固,或做网络共享(多台机器共享一个 /usr)。

为什么家目录在 /home

把用户个人数据集中一处,方便:

  • 单独挂载 /home 到独立分区/磁盘,重装系统时保留用户数据
  • 统一设置权限、配额
  • NFS 等网络共享用户目录时只需导出这一处

为什么 root 不在 /home/root

核心原因是启动依赖和权限隔离:

  1. /home 常常是独立挂载的分区(甚至是网络挂载的 NFS)。如果 root 的家目录在 /home/root,一旦 /home 没挂载成功或网络故障,root 就无法登录,也就没法用来排障和修复系统——这是致命的鸡生蛋问题。/root 在根分区上,根分区是系统启动必须优先挂载好的,所以永远可用。
  2. 权限隔离:/home 目录本身及其子目录权限通常对其他用户可读(或至少可遍历),把 root 的家目录放在里面存在信息泄露和权限管理上的风险,独立的 /root 更便于设置严格权限(默认 700,只有 root 自己能访问)。