Linux /usr 目錄不是 User 的縮寫嗎?

50年前的「硬體事故」帶來的蝴蝶效應

使用 Linux 或 Unix 系統時,你可能也會想過這個問題。

"到底 /usr 是什麼的縮寫?"

乍一看好像是把 Usere 去掉了。 如果是這樣,為什麼不直接寫 /user 呢?

  • 是因為打字麻煩?
  • 有字數限制嗎?
  • 但像 /boot/home/proc 這樣四個字的目錄還是存在。

如果真的代表「使用者(user)」,那就應該寫 /user。 為什麼還要用模糊的 /usr 呢?其實背後隱藏著一段我們不知的歷史。

今天,我們將揭開這個 /usr 目錄背後的故事,帶你走進一段 50 年前的「可笑」硬體歷史,讓開發者在閱讀時不禁會心一笑。

image


1. 結論先說:現在的 /usr 不是「User」



在目前的 Linux 文件系統標準(FHS,Filesystem Hierarchy Standard)中,/usr 被定義為:

系統全域使用、(大多)只讀的程式、函式庫、共享資料所在區域

因此,我們常見的結構就是:

  • /usr/bin – 大部分使用者執行檔
  • /usr/sbin – 系統管理執行檔
  • /usr/lib* – 這些執行檔使用的函式庫
  • /usr/share – 手冊、圖示、語言資料等架構獨立資料

無論從哪裡看,這都與「使用者個人檔案」相距甚遠。 家目錄(~/...)或文件、照片等都在 /home 之下。

從今天的觀點來說,簡單定義 /usr 為:

/usr = 「不是 User,而是 OS 與應用程式的『共用系統資源倉庫』」

那麼,還剩下一個問題:

「那麼 usr 不是 User 的縮寫嗎?」

這裡就出現了趣味的轉折。 最初的確是「User」的縮寫,但之後 50 年的使用方式完全被顛倒。


2. 初期 Unix:/usr/帳號名 是家目錄

回到 1970 年代初期的 Unix 時代。

當時 Unix 系統的家目錄不是像現在的 /home/alice,而是

  • /usr/alice 這樣直接放在 /usr 之下。

也就是說,當時的 /usr 真正是:

「用戶相關的東西放進去的目錄」

那時的電腦是 PDP‑11 等設備,磁碟容量比今天小得多。

  • 根磁碟(/ – 只放 OS 核心檔案的狹窄空間
  • 第二磁碟(/usr – 相對寬裕的空間,放置使用者家目錄

這樣的結構在當時是合理的。


3. 「磁碟滿了」 → 把系統檔案搬到 /usr



Unix 持續成長,新的指令與功能不斷加入。 問題是 根磁碟(/)的容量保持不變

最終有一天,情況變成:

「已經沒有空間放程式到 / 了…」

開發者做出了實際的選擇:

「既然第二磁碟(/usr)空間充足, 把不必在啟動時立即使用的程式搬到那裡。」

於是,最初是「用戶家目錄」的 /usr,開始慢慢被 程式、函式庫、資料 逐漸塞滿。

結果就是我們現在熟悉的結構:

  • /bin – 必須在啟動時使用的「最小」指令(原本在根磁碟)
  • /usr/bin – 其餘一般指令(搬到第二磁碟)
  • /lib vs /usr/lib 也類似

簡而言之:

原本是「用戶家」的 /usr,因為「空間多」而被系統檔案「搬進」來。

這就是「硬碟容量不足所帶來的權宜之計」。

隨後 Unix 繼續發展:

  • 用戶家目錄搬到 /home 等更直觀的目錄
  • /usr 完全成為「共用程式/函式庫區」

這時的情況已經相當滑稽:

  • 名稱:usr(user)
  • 實際內容:系統與應用程式專用檔案

房主搬走,房子卻被系統檔案佔滿


4. 「Unix System Resources」?那是後來才起的說法

這種矛盾的情況持續了很久,後來有人開始說:

「現在 /usr 可以說是 Unix System Resources 的縮寫。」

你可能在某些文件中見過「/usr = Unix System Resources」的說法。 但關鍵是:

這是 後來插入的 backronym,並非最初設計時的正式意義。

早期 Unix 文檔與證言顯示:

  • /usr 原本是 user 的縮寫
  • /usr/帳號名 用來放家目錄
  • 之後因磁碟容量問題,意義逐漸擴張到「用戶使用的程式」→「程式與函式庫」

隨著時間推移,人們把現實簡化為:

「現在 /usr 是放系統資源的地方,叫做 Unix System Resources。」

這種做法稱為 backronym:先有縮寫,再後面賦予意義。

在開發者圈子裡,這種現象相當常見:

  • 暫時的名稱/結構
  • 進入文件
  • 成為標準
  • 最後被解釋為「本來就這樣」

5. 50 年前的結構至今:Usr Merge

聽完這些,你可能會想:

「如果磁碟空間足夠,為什麼還要把 /bin/usr/bin 分開?」

實際上,現代 Linux 發行版(Ubuntu、Fedora、Debian 等)正試圖整理這段歷史,這就是 /usr merge(UsrMerge)

在最近的發行版中,試試以下指令:

$ ls -l /
lrwxrwxrwx 1 root root    7  ...  bin  -> usr/bin
lrwxrwxrwx 1 root root    7  ...  sbin -> usr/sbin
lrwxrwxrwx 1 root root    7  ...  lib  -> usr/lib

大多數情況下會看到這樣的結構。

  • /bin 其實不是實際目錄,而是 指向 /usr/bin 的符號連結
  • /sbin/lib 亦同

也就是說,今天的實際結構是:

「大部分程式與函式庫都在 /usr 之下」

為什麼要合併?原因多樣,但主要包括:

  • 套件管理/移植更簡單
  • 容器/映像部署時,將 /usr 視為「整個系統映像」更方便
  • 舊硬體限制已不再需要維持分離結構

有趣的是,所有這一切的起點都是:

「1970 年代磁碟太小,程式被塞進 /usr

這正是「臨時解決方案永遠不會真正永久」的典型例子。


6. 那麼今天我們該如何理解 /usr

在實際操作 Linux 系統時,對 /usr 的理解可以這樣:

「這個系統共用的程式、函式庫、共享資料所在區」

相對地:

  • 個人檔案 / 設定/home/你的帳號
  • 經常變動的資料(日誌、快取、資料庫等)/var
  • 非發行版套件、手動安裝的應用程式 → 通常在 /opt/usr/local

簡而言之:

  • /usrOS 與應用程式的世界
  • /home使用者個人的世界

這樣區分後,混淆就會大幅減少。


7. 總結:一個目錄名稱背後的開發者妥協

/usr 這個目錄包含:

  • 「磁碟容量不足的早期 Unix 開發者」的實際考量
  • 「先這樣做,之後再整理」的常見妥協
  • 之後數十年來的標準化與整理工作(UsrMerge)

比起單純記住:

  • /usr = Unix System Resources」
  • /usr 不是使用者目錄」

了解這段背景後,當你在終端看到 /usr/bin/usr/lib 時,會有更深的感觸:

「這是 50 年前硬碟空間不足所留下的遺產。」

在黑色螢幕中的一個目錄,竟然蘊藏著那段硬體限制與開發者妥協的歷史,這不正是開發者最喜歡的趣事嗎?