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 兆字節)的 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 兆字節的大關,大約在同一時間出現了分區調整軟件(partition magic 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的符號鏈接,現在是受那個規則約束的,重啟時不清除。是的,這個之前都是 也剛好root FS是只讀的,然後你也不需要往/usr裡寫東西,但是你需要往/var裡寫。 大多 不能寫入,除非在 /etc 中,有時試圖將其移至 /var ...)

像 Linux 基金會(它在多年前的擴張期間吞併了自由標準組織)這樣的官僚機構很樂意記錄這些規則並將其複雜化,而從不試圖弄清楚它們為什麼存在。 他們沒有意識到的是,Ken 和 Dennis 只是將部分操作系統移到了他們的主目錄中,因為 PDP-05 上的 RK11 磁盤太小了。

我很確定 busybox 只是按照它過去開發的方式來放置文件。 直到現在還沒有真正的理由這樣做。 就個人而言,我只是將 /bin、/sbin 和 /lib 鏈接到 /usr 中的類似目錄。 畢竟,使用嵌入式軟件的人試圖理解和簡化......

來源: www.habr.com

添加評論