现代linux普遍采用usr-merge,/bin和/sbin实为/usr/bin和/usr/sbin的符号链接,源于早期磁盘受限需分离启动必需命令与非必需命令,现因硬件进步、systemd强制支持及容器化需求而统一。

因为现代 Linux 发行版普遍采用 usr-merge(/usr 合并)方案,/bin 和 /sbin 实际上是 /usr/bin 和 /usr/sbin 的符号链接,目的是简化结构、消除冗余、统一维护。
/bin 与 /usr/bin 分离的原始原因
早期 Unix 系统受限于极小磁盘(如 PDP-11 上仅 1.5MB),根分区 / 必须精简。系统启动初期只能挂载 /,因此:
-
/bin 存放所有用户都能用的核心命令(如
ls、cp、sh),确保系统刚开机就能运行基础操作 -
/sbin 存放仅 root 可用的系统管理命令(如
fdisk、ifconfig),同样要求启动早期可用 - /usr/bin 和 /usr/sbin 则放在第二块硬盘挂载的 /usr 下,属于“非必需启动项”,等系统跑起来再加载
为什么现在要合并成链接?
硬件早已不是瓶颈:/ 和 /usr 通常共处同一分区,分离既无必要,又增加复杂度。几个关键推动因素:
- systemd 自 255 版本起 不再支持 / 和 /usr 分离挂载,强制要求合并
- 容器和原子更新场景中,/usr 被视为“只读操作系统层”,/ 是可变配置层;统一路径更利于镜像构建与回滚
- 避免重复打包:发行版无需同时维护 /bin/cp 和 /usr/bin/cp 两份,减少出错可能
- 多数主流发行版(Fedora、Debian 12+、Arch、openSUSE)已默认启用 usr-merge
怎么验证你系统是否用了链接?
终端执行:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
ls -l /bin—— 通常显示/bin -> usr/bin -
ls -l /sbin—— 通常显示/sbin -> usr/sbin -
readlink -f /bin/ls—— 会返回/usr/bin/ls
注意:即使目录是链接,命令行为完全一致,普通用户几乎无感。
/usr/local/bin 为何不参与合并?
它保持独立,是因为定位不同:
- /usr/bin 属于发行版包管理器(如 apt、dnf)安装的官方软件
- /usr/local/bin 专供管理员手动编译或安装的第三方程序(比如自己 build 的 nginx、新版本 Python),不被包管理器跟踪
- 保留独立路径可避免冲突,也符合“本地覆盖系统”的传统语义
这个目录不会被 usr-merge 触及,也不会变成链接。










