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 的身份。
目前没有评论。