让我以 Ubuntu 22.04 上的 Debian 软件包 coreutils 为例。如果我们检查 coreutils 安装的文件列表:
$ cat /var/lib/dpkg/info/coreutils.list | less
我们看到有些二进制文件被放入了/bin
,有些则放入了/usr/bin
。但是,由于/usr
合并,/bin
目录本质上是 的符号链接。在安装时目录无论如何都会被放入 ,/usr/bin
为什么有些二进制文件被放入 ,/bin
而有些则被放入?/usr/bin
usr merged
文件被传送进来
/bin
主要/usr/bin
是出于历史原因;部分原因是过去可以在没有它的情况下启动系统/usr
,并在启动过程的后期安装它 — 因此启动系统所需的所有文件都/usr
必须位于根文件系统中。(这很简单,但细节在这里并不重要。)合并
/usr
系统是 Debian 最近的一次变化;版本 12 是第一个仅支持合并的版本/usr
(我认为第一个合并的 Linux 发行版是 2012 年的 Fedora 17)。由于 Debian 处理版本升级的方式,决定软件包不应将历史上在/bin
等处发布的文件移动到 中的新位置/usr
,至少对于 Debian 12 来说是这样。Ubuntu 22.04 根据 Debian 12 之前的开发版本发布软件包,因此该暂停也适用于它(过渡性地)。在 Debian 13 中情况有所改变;例如,
coreutils
Debian 13 将在 中发布其所有文件/usr
。此更改发生在软件包的 9.4-3.1 版本中,因此 Ubuntu 24.10 及更高版本仅coreutils
在 中发布文件/usr
。另请参阅Debian 维基页面上的
/usr
合并以及systemd 中给出的合并理由。