Linux 文件系统中 /usr 目录的真实身份

usr 并不是 user

只要你稍微使用过 Linux,就一定会遇到 /usr 这个目录。

我第一次使用 Linux 时也是这么想的。

“啊,/usr,一定是 user 相关的目录吧。用户账号相关的东西会放在这里。”

许多 Linux 新手可能也会有类似的误解。 但结论是:

/usr 并不是为单个“用户(user)”数据准备的目录。 用户的主目录由 /home 负责,而 /usr 承担着完全不同的角色。

本文将整理 /usr 目录的 真实身份与作用,以及 /home/opt/var 等其他目录 如何分工


1. 先说结论:/usr 不是“用户数据”目录



在现代 Linux 中,用一句话概括 /usr 的位置:

/usr = 系统使用的“可共享、(大多)只读的程序·库·数据”所在区域

简单来说:

  • OS 与应用的 可执行文件
  • 这些可执行文件使用的
  • 公共使用的 手册、图标、数据文件

这些都放在这里。

相反,我们常想象的 “用户专属的文档、设置、下载文件” 等:

  • 存在于 /home/用户名 之下。
  • /usr 的角色完全不同。

所以把 /usr 视为 “user 用目录” 是不准确的。


2. 那么 usr 是什么的缩写?

这里有一点历史与争议。

  • Unix 初期,/usr 下确实有用户主目录。
  • 因此有人把 usr 视为 “user” 的缩写。
  • 后来也有人把它重新解释为 “Unix System Resources”。

现代 Linux 用户最关心的是“当前角色”,而不是历史拼写。

Linux 文件系统层次结构标准(FHS)对 /usr 的定义(简述):

  • 系统全局可共享(可假设为只读共享)的 数据 所在区域
  • 程序、库、手册、公共数据等

也就是说,在我们使用的 Linux 中:

usr 是否是 user 的缩写并不重要, “这里是系统与应用的公共资源区” 更为实用。


3. /usr 下会有什么?



直接在服务器或桌面上执行 ls /usr,通常会看到以下目录。

$ ls /usr
bin  lib  lib64  local  sbin  share  include  ...

每个目录大致意义如下。

  • /usr/bin
  • 普通用户使用的可执行文件(命令)。
  • 例:/usr/bin/python/usr/bin/grep/usr/bin/curl
  • /usr/sbin
  • 系统管理用可执行文件,主要由 root 使用。
  • 例:/usr/sbin/sshd/usr/sbin/apachectl
  • /usr/lib/usr/lib64
  • 程序使用的公共库。
  • 例:.so(共享对象)文件。
  • /usr/share
  • 与架构无关的共享数据。
  • 例:手册页(/usr/share/man)、图标、语言数据 …
  • /usr/include
  • C/C++ 头文件,开发工具链使用。
  • /usr/local
  • 非发行版包管理器安装的 本地直接安装程序 所用空间(稍后单独说明)。

总结:

/usr 是 “系统全局使用的程序与相关资源集合” — 可执行文件、库、公共数据聚集的大仓库


4. /usr vs /home vs /opt vs /var — 各自的区别

Linux 文件系统结构起初很容易混淆。 尤其是 /usr/home/opt/var,比较它们的角色可以这样归纳。

4.1 /home — 真正的“用户(user)”家

  • 路径示例:/home/alice/home/bob
  • 每个用户:
  • 文档、照片、下载、项目文件
  • 用户专属设置(~/.config~/.ssh 等)
  • 即使重装 OS,通常也会单独保留 /home

个人数据、个人设置 = 几乎全在 /home

4.2 /usr — 系统与应用的 “公共资源”

  • 可执行文件:/usr/bin/usr/sbin
  • 库:/usr/lib*
  • 公共数据:/usr/share

“整个系统共用的程序/库/数据” = /usr

这里不包含任何单独用户账户的文件。

4.3 /opt — “单个应用完整包” 的存放区

  • 不是发行版包,而是 单独分发的商业/第三方应用
  • 例:/opt/google/chrome/opt/mycompany/app
  • 通常一个目录里放完整个应用。

“此应用完整放在此处”——按应用单元管理

4.4 /var — 可变数据(Variable)

  • 日志:/var/log
  • 缓存:/var/cache
  • 队列、喷洒:/var/spool
  • 数据库、状态文件等经常变化的数据

“经常变化的(运行时)数据” = /var


5. 为什么不是 /bin 而是 /usr/bin?(而且现在更混乱)

旧文档中会提到 /bin/usr/bin 的区别,但现代发行版往往简化为:

  • /bin/usr/bin 的符号链接
  • /sbin/usr/sbin 的符号链接

(Fedora、Ubuntu 等)

也就是说,当前系统中:

  • 大部分可执行文件位于 /usr/bin/usr/sbin
  • /bin/sbin 仅是 兼容旧系统的前置路径

初学者可能更困惑,但核心是:

“程序实际在哪里?” → 大多数在 /usr/bin/usr/sbin


6. 初学者如何避免混淆

Linux 初次使用时,很多人会遇到类似的困惑。

  • /usr 是 user 吗?”
  • “那我的程序应该装在 /usr 吗?”
  • /home 和什么区别?”

只要记住以下准则,绝大多数混淆就能解决。

6.1 个人脚本/工具放在哪里?

  • 仅自己使用的脚本、工具:通常放在 ~/bin~/scripts
  • 通过 PATH 添加即可。
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc

这属于 “个人空间”,与 /usr 完全不同。

6.2 系统全局使用的自定义应用?

  • 源码编译后直接安装的程序
  • AppImage、tar.gz 分发的第三方应用

如果想让 系统全局使用

  • 可执行文件/应用主体:放在 /opt/应用名
  • 入口点:在 /usr/local/bin 创建符号链接

这种模式很整洁。

因此,/usr/local 的常规用途是:

“非发行版包(apt、dnf、pacman 等)安装的、本地管理的程序

比起 /usr,更像是 管理员随意使用的专用区


7. 总结:/usr 不是“用户的家”,而是“系统的仓库”

再次总结。

  • /usr 不是用户数据目录
  • 在现代 Linux 中:
  • 系统与应用的 公共可执行文件
  • 它们使用的
  • 公共 手册、图标、数据
  • 这是一块 大仓库
  • 真正的用户个人数据在 /home/用户名 下。
  • 自己安装的应用通常使用 /opt/usr/local 等。

理解 Linux 文件系统结构后,你会更清晰地回答:

  • “这文件应该放在哪里?”
  • “这应用是系统全局使用还是仅我使用?”
  • “重装 OS 时需要保留哪些?”

而这一切的起点,就是正确理解 /usr 的身份。