教程

細說 Linux/Unix 下 /usr 目錄的前世今生

簡潔版本:

/usr是用來存放全局的只讀文件的。你安裝的所有軟體都會在那裡,但它不與任何除/bin/lib外的所有文件重複。/bin/lib/usr/bin/usr/lib作用範圍不一樣,前者只存放引導系統啟動需要的二進位文件和庫,而後者是用來存放所有可執行文件和庫的。(就此打住,不要問/sbin又是用來幹嘛的啦,畢竟這是簡潔版本嘛)

現在,「引導文件」的區分已經一點點淡化了。因為大多數發行版(包括 Ubuntu ),在缺失了一些/usr的文件後可能無法啟動。這也就是存在合併/usr/bin/bin的強烈趨勢的原因。或許未來的 Ubuntu 版本中的/bin將會是一個指向/usr/bin的軟鏈接呢。(原文中作者還說可能在 Ubuntu 12.10 中實現,然而經過譯者驗證,在Ubuntu 14.04 版本,/bin/usr/bin仍是兩個不同的目錄)

詳細版本:

早在七十年代,Unix 里的軟盤沒有多少空間。而且系統的二進位文件已經超出單張磁碟的儲存容量了。開發者們不得不將它們分散在幾個盤裡並為此多創建了幾個掛載點。/bin目錄塞滿了,所以他們把其餘的二進位文件放進了/usr/bin里,並且在那時/usr是他們的用戶目錄!

在那次(幾乎是尷尬甚至是被認為是笑話的)分割之後,他們開始(人為的)決定什麼東西應該放在/bin里什麼東西應該放在/usr/bin里。一個非正式的規則是:重要的東西放在/bin里,其餘的放在/usr/bin里。/bin目錄也是一樣的。不久後,/usr中混雜著堆滿了系統相關文件和用戶文件。因此,/home目錄應運而生,用來吧/usr中的用戶文件分離出來。

在那很長一段時間後,FHS 的誕生讓/usr目錄成了一個非常尷尬的存在,儘管在那時它早已和 "user" 沒有多大關係了。是的,什麼 "U NIX s ource r epository" 、 "U NIX s ystem r esources" 都是化名,想要重命名也已經為時已晚了。

那麼有人會問了,「/usr/sbin又是啥?」 其實就是用來存放只有 root 用戶才能執行的命令的啦,比如 mountfdisk

「那豈不是跟/bin差不多?」。是的,但是...

「等等,那為什麼還要有/sbin呢,這不科學啊」。這個嘛...

看,你身後有隻有三個頭的猴子!?

好吧,希望你還能有足夠的注意力,我們繼續...

(如果你覺得我在扯淡,那麼你是對的。官方的說法是:「一些只能由 root 用戶來執行並且甚至可以在/掛載之前執行的重要命令」)。事實上,這個說法是很模糊的,很多歷史遺留的名字就這麼無法避免的「卡住」了。

關於/usr的分割,systemd 中是這麼解釋的:

關於 /bin, /sbin 和 /lib 從 /usr 中分離出來的歷史原因,對於現今來說已經不存在了。它們的分離是為了讓更快的硬碟(當時的硬碟還很小而且很昂貴)能裝下所有用來掛載其他相對慢一些的硬碟的工具。如今,一個單獨的 /usr 分區早在預引導過程中掛載,也就是分離 /usr 的原因。此外,現在 /bin 和 /sbin 很多工具已經失去了運行沒有預先安裝 /usr 使用的能力。對於多層次結構的系統,已經沒有必要分離 /usr 盤了,它失去了它的作用

還有出自的 Rob Landley 有關/usr的分割及其理由的一篇文章:
Understanding the bin, sbin, usr/bin , usr/sbin split

現在的狀況

關於安裝目錄,你可以這麼理解:
  • /usr - 系統自帶的全局只讀文件。
  • /usr/local - 系統管理員安裝的系統級的只讀文件(通常是你),這也就是為什麼 /usr/local中的文件名與/usr相同的原因了。
  • /opt - 其中包含著全局、獨立的只讀文件。也就是說,其中的軟體不會將文件分散在binlibshareinclude等目錄中。
  • ~/.local - 用戶對應的/usr/local,存放用戶安裝的軟體。
  • ~/.local/opt- 用戶對應的/opt

那我應該把軟體裝在哪?

  • 對於單一目錄、自包含的軟體,比如 Eclipse IDE 和其他 java apps,如果想要所有用戶都能使用,那麼安裝在/opt
  • 和前面一樣,如果是針對單一用戶的,安裝在~/.local/opt
  • 如果是安裝文件散落在其他目錄(binshare等),比如以傳統方式./configure && make && sudo make install安裝的的軟體並想要所有用戶都可訪問的,安裝在/usr/local
  • 一樣的,只為單一用戶安裝的話,放在~/.local
  • 系統自帶的或是通過包管理軟體安裝的,尤其是會隨著系統升級被覆蓋的文件。放在/usr
順帶一提:
  • 這解釋了為什麼默認安裝目錄是/usr/local,當你需要只為當前用戶安裝時需要指定./configure --prefix=$HOME/.local
  • 你可能主要到了,前面提到的所有目錄文件都是只讀的(安裝、卸載軟體的情況除外)。可寫文件一般放在/etc(全局軟體)和~/.config(用戶軟體)。不過許多傳統軟體將用戶軟體放在~/.<文件名>下。
  • ~/.local~/config並不是 FHS 規範的一部分,FHS不處理用戶的主目錄。他們是另一個標準組織面向桌面環境 XDG(如GNOME,KDE和Unity)的一種嘗試,嘗試設置一些關於用戶的主結構的約定。並非所有軟體堅持它(例如~/local/bin不在用戶的默認$PATH),他們並沒有強制用戶遵循它,但如果他們這樣做,會獲得許多操作性上的好處,。

原文鏈接:http://askubuntu.com/questions/130186/what-is-the-rationale-for-the-usr-directory

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0

You may also like

Leave a reply

您的郵箱地址不會被公開。 必填項已用 * 標註

此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

More in:教程

教程

在 Ubuntu 像22.04 LTS Linux 安裝 JUnit 5

JUnit 不僅簡單而且是一種有效的方法來編寫和執行 Java 應用程序的單元測試,因此它是開源類別中使用最廣泛的測試框架。 JUnit的最新版本5發布時帶來了許多改進。 所以,如果你使用Ubuntu […]
教程

同時運行多個 Linux 命令

了解如何在 Linux 中同時執行多個命令可以顯著提高您的效率和生產力。本文將指導您通過各種方式在單行中運行多個 Linux 命令,甚至如何自動化重複的任務。 理解基礎知識 在深入了解高級技巧之前,您 […]