/usr 可安全只读挂载,因其内容无运行时状态、日志、缓存或用户配置,且配置、数据、日志等均分离至 /etc、/var、/run 等独立目录;现代发行版默认将其单独分区并设为 ro。

/usr 是系统级只读资源的核心存放区,设计初衷就是“安装后不预期被修改”。它不是用户家目录,也不是临时工作区,而是由发行版统一提供、供所有用户共享的稳定软件资源树。
/usr 的标准结构与职责边界
按照 FHS(文件系统层次标准),/usr 下各子目录有明确分工:
- /usr/bin:日常命令(如 vim、grep、python),但不包含单用户模式必需的工具(那些必须放在 /bin)
- /usr/sbin:非关键系统管理命令(如 httpd、sshd),与 /sbin 中的启动/修复命令分离
- /usr/lib 和 /usr/lib64:架构相关库文件,供 /usr/bin 下程序链接使用
- /usr/share:与 CPU 架构无关的共享数据(man 手册、locale、图标、字体等)
- /usr/include:C/C++ 头文件,仅在编译时需要
- /usr/src:内核或第三方源码(如 /usr/src/linux),仅开发者访问,运行时不参与
- /usr/local:本地编译安装软件的“镜像副本”,结构与 /usr 一致,但完全独立、可写
为什么 /usr 可以且适合只读挂载
它的内容天然满足只读前提:无运行时状态、无日志、无缓存、无用户配置。只要把动态数据移出,/usr 就能安全挂为只读:
- 配置文件不在 /usr,而在 /etc;运行时数据不在 /usr,而在 /var 或 /run
- 日志写入 /var/log,数据库文件存于 /var/lib,缓存放在 /var/cache —— 这些都与 /usr 解耦
- 现代发行版(如 Debian 12+、RHEL 9+)默认将 /usr 单独分区,并在 fstab 中设为 ro(read-only)
- 即使 /usr 被只读挂载,系统仍可在单用户模式下启动(因为关键工具如 mount、sh、ls 已提前放入 /bin 和 /sbin)
只读挂载的实际操作要点
不能只靠 chmod 或 chattr,必须通过挂载参数实现真正只读:
- 在 /etc/fstab 中为 /usr 分区添加 ro 选项,例如:
/dev/sda2 /usr ext4 defaults,ro 0 2 - 若已挂载,可用
sudo mount -o remount,ro /usr立即生效 - 注意:/usr 下符号链接(如 /bin → /usr/bin)依赖底层文件系统可读,挂载为 ro 不影响其解析
- 误将 /usr 设为只读后若需临时写入(如升级软件),应先 remount rw,操作完再切回 ro,避免长期开放写权限
常见误用与风险提示
违背只读原则的操作会破坏系统稳定性与可重现性:
- 直接向 /usr/bin 写入自编译二进制 —— 应改用 /usr/local/bin
- 在 /usr/share 中手动修改主题或语言包 —— 应通过包管理器更新,或覆盖到 /usr/local/share
- 把应用配置文件硬编码到 /usr/lib/systemd/system/ —— 正确位置是 /etc/systemd/system/
- 试图在只读 /usr 上运行 rpm/deb 安装 —— 包管理器会失败,需先 remount 或切换到支持的安装路径


















