为什么 System V 传统上将 /bin 符号链接到 /usr/bin?

str*_*gee 4 fhs history directory-structure

这个systemd wiki 页面关于 /usr 合并,在神话 #6 下,指出它/bin传统/usr/bin上是 System V UNIX 上的符号链接。

这样做的动机是什么?为了向后兼容,这是有道理的,但我不明白为什么在早期会这样。(或者,我误解了吗?早期的 UNIX 版本是否区分/bin/usr/bin,而 System V 通过合并它们改变了这一点?)

Mar*_*ick 9

简短的答案是,是的,这是做了兼容性(大量的引用程序/bin/sh/bin/ed),并在初期/bin/usr/bin包含完全不相交的文件集。/bin位于根文件系统上,这是一个计算机启动固件必须能够访问的小磁盘,并保存更关键和经常使用的文件。/usr/bin在 上/usr,通常是一个完全独立的更大的磁盘。/usr,起初,还包含用户的主目录。随着/usr成长,我们会定期用更大的东西替换它的驱动器。系统可以在没有/usr安装的情况下运行,即使不是那么有用。

/usr的磁盘(或磁盘分区)是在 Unix 内核启动后挂载的,并且系统处于用户模式启动过程的中途(/etc/rc),因此像shmountfsck必须在根文件系统中,通常在/bin和 中/etc。Sun 甚至进行了重新排列//usr以便/usr可以通过网络以只读方式安装共享副本。/usr/tmp成为/var/tmp. /var要么在根文件系统上,要么最好在另一个分区上。

我相信是 Sun 在某一时刻决定,如果系统/usr被破坏,那么勇敢地尝试让系统能够启动是不值得的。大多数用户要么拥有//usr在同一个物理磁盘上——所以如果它死了,两个文件系统都会被吐司——或者/usr从服务器以只读方式挂载。因此,用于系统启动和维护的一些关键项目进行了静态编译和投入/sbin,但大多数在节目中/bin被转移到/usr/bin/bin成为一个符号链接/usr/bin

R4 之前的 System V 甚至没有符号链接。Sun 和 AT&T 致力于将 SunOS 和 SVR3 结合起来,从而成为 SVR4(和 Solaris 2)。它有/bin一个符号链接到/usr/bin.

因此,当该网站说“在 SysV Unix 上/bin传统上一直是到/usr/bin”的符号链接时,他们真的应该说“在 System V Release 4 和后续版本中,......”。