細說 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
用戶才能執行的命令的啦,比如 mount
和 fdisk
。
「那豈不是跟/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
- 其中包含著全局、獨立的只讀文件。也就是說,其中的軟體不會將文件分散在bin
、lib
、share
、include
等目錄中。~/.local
- 用戶對應的/usr/local
,存放用戶安裝的軟體。~/.local/opt
- 用戶對應的/opt
。
那我應該把軟體裝在哪?
- 對於單一目錄、自包含的軟體,比如 Eclipse IDE 和其他 java apps,如果想要所有用戶都能使用,那麼安裝在
/opt
- 和前面一樣,如果是針對單一用戶的,安裝在
~/.local/opt
- 如果是安裝文件散落在其他目錄(
bin
和share
等),比如以傳統方式./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