bin、sbin、usr/bin、usr/sbin的区别

30 年 2010 月 XNUMX 日,大卫·科利尔 (David Collier) 写道:

我注意到在 busybox 中链接被分为这四个目录。
是否有一些简单的规则来确定哪个链接应该位于哪个目录中......
例如,kill在/bin中,killall在/usr/bin中......我在这个分区中看不到任何逻辑。

您可能知道 Ken Thompson 和 Dennis Ritchie 于​​ 7 年在 PDP-1969 上创建了 Unix。 因此,在 1971 年左右,他们升级到带有一对 RK11 磁盘(每个 05 MB)的 PDP-1,5。

当操作系统增长并且不再适合第一个磁盘(根 FS 所在的位置)时,它们将部分移动到主目录所在的第二个磁盘(因此,挂载点称为 /usr - 来自单词用户)。 他们复制了所有必要的操作系统目录(/bin、/sbin、/lib、/tmp ...)并将文件放在新磁盘上,因为旧磁盘空间不足。 然后他们有第三个磁盘,他们将其安装在 /home 目录中,并将用户的主目录移动到那里,以便操作系统可以占用两个磁盘上的所有剩余空间,这些是 多达三兆字节 (哇!)。

当然,他们必须制定一个规则,“当操作系统启动时,它必须能够在/usr中挂载第二个磁盘,所以不要将mount之类的程序放在/usr中的第二个磁盘上,否则你会这是一个先有鸡还是先有蛋的问题。” 就是这么简单。 那是 6 年前的 Unix V35。

/bin 和 /usr/bin(以及所有此类目录)的拆分是这些事件的遗产,是 70 年代的实施细节,几十年来一直被官僚复制。 他们从未问过这个问题 为什么他们刚刚做到了。 甚至在 Linux 创建之前,这种划分就不再有意义,原因如下:

  1. 启动时,会使用 initrd 或 initramfs,它可以解决诸如“我们在那个文件之前需要这个文件”之类的问题。 因此,我们有 已经有了 用于加载其他所有内容的临时文件系统。
  2. 共享库(由 Berkley 的人添加到 Unix 中)不允许您独立更改 /lib 和 /usr/lib 的内容。 这两个部分必须匹配,否则将无法工作。 这在 1974 年并没有发生,因为当时由于静态链接,它们具有一定的独立性。
  3. 廉价硬盘在 100 年左右突破了 1990 MB 的大关,大约在同一时间,分区大小调整软件出现(分区魔法 3.0 于 1997 年问世)。

当然,既然有划分,就有人提出了合理化的规则。 例如,根分区是各种一般操作系统功能所必需的,并且您需要将本地文件放在 /usr 中。 或者将 AT&T 分发的内容放入 /usr 中,将 IBM AIX、Dec Ultrix 或 SGI Irix 添加的分发内容放入 /usr,并且 /usr/local 包含特定于您的系统的文件。 然后有人认为 /usr/local 不是安装新软件的正确位置,所以让我们添加 /opt! 如果 /opt/local 也出现,我不会感到惊讶......

当然,在 30 年的时间里,由于这种分离,各种有趣的特定于发行版的规则来来去去。 例如,“/tmp 在重新启动时被清除,但 /usr/tmp 则不会。” (在Ubuntu中原则上没有/usr/tmp,而在Gentoo中/usr/tmp是一个到/var/tmp的符号链接,它现在受该规则的约束,并且在重新启动时不会被清除。是的,这个之前都是这样,也恰好根FS是只读的,那么你也不需要向/usr写入任何东西,但是需要向/var写入。 基本上 除了 /etc 之外无法写入,有时尝试将其移至 /var ...)

像 Linux 基金会(在几年前的扩张过程中吞并了自由标准组织)这样的官僚很乐意记录这些规则并使这些规则复杂化,而从未试图弄清楚它们存在的原因。 他们没有意识到 Ken 和 Dennis 只是将操作系统的一部分移至他们的主目录,因为 PDP-05 上的 RK11 磁盘太小。

我很确定 busybox 只是以与历史开发相同的方式放置文件。 到目前为止还没有真正的理由这样做。 就我个人而言,我只是将 /bin、/sbin 和 /lib 链接到 /usr 中的类似目录。 毕竟,使用嵌入式软件的人试图理解并简化......

来源: habr.com

添加评论