為什麼 System V 傳統上將 /bin 符號連結到 /usr/bin?
這個關於 /usr merge 的 systemd wiki 頁面,在 Myth #6 下,指出
/bin
傳統上它是/usr/bin
System V UNIX 上的符號連結。這樣做的動機是什麼?為了向後兼容,這是有道理的,但我不明白為什麼早期會這樣。(或者,我是不是誤會了?早期的 UNIX 版本是否區分了
/bin
and/usr/bin
,而 System V 通過合併它們來改變這一點?)
簡短的回答是,是的,它是為了兼容性而完成的(引用了很多程序),
/bin/sh
並且/bin/ed
在早期/bin
並且/usr/bin
包含完全不相交的文件集。/bin
位於根文件系統上,這是電腦啟動韌體必須能夠訪問的一個小磁碟,它保存著更重要和經常使用的文件。/usr/bin
上/usr
,通常是一個完全獨立的、更大的磁碟。/usr
,起初,還包含使用者的主目錄。隨著/usr
增長,我們會定期用更大的驅動器替換它的驅動器。/usr
即使沒有那麼有用,系統也可以在沒有安裝的情況下執行。
/usr
的磁碟(或磁碟分區)是在 Unix 核心啟動後掛載的,並且系統處於使用者模式啟動過程的中途(/etc/rc
),因此sh
和mount
和之類的程序fsck
必須在根文件系統中,通常在/bin
和/etc
. Sun 甚至進行了重新安排/
,/usr
以便/usr
可以通過網路以只讀方式安裝 的共享副本。/usr/tmp
成為 的符號連結/var/tmp
。/var
要麼在根文件系統上,要麼最好在另一個分區上。我相信是 Sun 在某一時刻決定,如果系統被毀壞,不值得英勇地嘗試讓一個系統能夠出現
/usr
。大多數使用者要麼擁有/
並/usr
在同一個物理磁碟上——所以如果它死了,兩個文件系統都烤好了——或者/usr
從伺服器上以只讀方式掛載。所以一些用於系統啟動和維護的關鍵程序被靜態編譯並放入/sbin
,但其中的大部分程序/bin
都被移到/usr/bin
了/bin
.symlink/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 和後續版本上,……”。