Linux檔案系統中/usr目錄的真實身份

usr並不是user

只要稍微使用過Linux,就一定會遇到/usr這個目錄。

我第一次使用Linux時也是這樣想的:

“啊,/usr,那一定是user吧。應該是跟使用者帳號有關的資料放這裡。”

許多Linux新手可能也會有類似的誤解。 但結論先說:

/usr不是個別「使用者(user)」資料的目錄。 使用者的家目錄由/home負責,而/usr則扮演完全不同的角色。

本文將整理/usr目錄的真實身份與角色,以及 /home/opt/var等其他目錄的角色分工


1. 先說結論:/usr不是「使用者資料」目錄



在現代Linux中,將/usr的位置用一句話概括:

/usr = 系統使用的「可共用且(大多)唯讀的程式、函式庫、資料」所在區域

簡單來說:

  • OS與應用程式的執行檔
  • 這些執行檔所使用的函式庫
  • 公共使用的手冊、圖示、資料檔

相對地,我們常想像的「使用者個別的文件、設定、下載檔」等,則:

  • 存放於/home/使用者名稱以下。
  • /usr的角色完全不同。

所以把/usr視為「user用目錄」其實是錯誤的。


2. 那麼usr是什麼的縮寫?

這裡有一點歷史與爭議。

  • Unix早期,/usr下確實有使用者家目錄。
  • 因此有人將usr視為「user」的縮寫。
  • 後來也有人重新詮釋為「Unix System Resources」等。

但對於現代Linux使用者來說,重要的是目前的角色,而非歷史字母。

Linux檔案系統層級結構標準(FHS)對/usr的定義(簡化):

  • 系統全域可共用(可假設為唯讀共用)的資料區域
  • 程式、函式庫、手冊、公共資料等

換句話說,現在的Linux:

usr是否為user的縮寫並不重要, 「這裡是系統與應用程式的共用資源區」才是實際的理解。


3. /usr下會有什麼?



直接在伺服器或桌面上執行ls /usr,通常會看到以下目錄:

$ ls /usr
bin  lib  lib64  local  sbin  share  include  ...

各目錄大致意義如下:

  • /usr/bin
  • 一般使用者用的執行檔(指令)
  • 例:/usr/bin/python/usr/bin/grep/usr/bin/curl
  • /usr/sbin
  • 系統管理用執行檔,主要由root使用
  • 例:/usr/sbin/sshd/usr/sbin/apachectl
  • /usr/lib/usr/lib64
  • 程式使用的共用函式庫
  • 例:.so(shared object)檔案
  • /usr/share
  • 與架構無關的共用資料
  • 例:手冊頁(/usr/share/man)、圖示、語系資料 …
  • /usr/include
  • C/C++標頭檔,開發工具鏈使用
  • /usr/local
  • 非系統套件管理器安裝的程式,本地直接安裝的程式

總結:

/usr是「系統全域使用的程式與相關資源集合」 — 執行檔、函式庫、共用資料聚集的大倉庫


4. /usr vs /home vs /opt vs /var — 角色差異

Linux檔案系統結構剛開始時會很混亂。 尤其是/usr/home/opt/var容易混淆,以下整理其差異:

4.1 /home — 真正的「使用者(user)家」

  • 路徑例:/home/alice/home/bob
  • 每個使用者:
  • 文件、照片、下載、專案資料夾
  • 使用者設定(~/.config~/.ssh 等)
  • 重新安裝OS時,通常只保留/home

個人資料、個人設定 = 幾乎全都在/home

4.2 /usr — 系統與應用程式的「共用資源」

  • 程式執行檔:/usr/bin/usr/sbin
  • 函式庫:/usr/lib*
  • 共用資料:/usr/share

「整個系統共用的程式/函式庫/資料」 = /usr

此處不會放「個別使用者帳號的檔案」。

4.3 /opt — 「單一應用程式」的安裝區

  • 不是發行版套件,而是獨立發行的商用/第三方應用
  • 例:/opt/google/chrome/opt/mycompany/app
  • 通常整個應用程式放在一個目錄下。

「這個應用程式完整放在這裡」的應用程式單位管理空間

4.4 /var — 變動資料(Variable)

  • 日誌:/var/log
  • 快取:/var/cache
  • 隊列、列印佇列:/var/spool
  • 資料庫、狀態檔等頻繁變動資料

「頻繁變動的(run-time)資料」 = /var


5. 為什麼不是/bin而是/usr/bin?(而且現在更混亂)

舊文件中會說/bin/usr/bin分開的原因,但現在大多數發行版已簡化:

  • /bin/usr/bin 的符號連結
  • /sbin/usr/sbin 的符號連結

(Fedora、Ubuntu等)

也就是說,現在系統中:

  • 大部分執行檔在/usr/bin/usr/sbin
  • /bin/sbin僅作為向後相容的前置目錄存在

對初學者來說可能更混亂,但核心是:

「實際程式在哪裡?」 → 大多在/usr/bin/usr/sbin


6. 初學者如何避免混淆

Linux剛開始使用時,許多人會遇到以下困惑:

  • /usr是user嗎?」
  • 「那我的程式應該安裝在/usr嗎?」
  • /home和什麼不同?」

實際使用時,只要記住以下標準即可:

6.1 個人腳本/工具放哪?

  • 只屬於自己的腳本、工具:通常放在~/bin~/scripts
  • 加入PATH即可使用
mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc

這些放在個人區域,與/usr不同。

6.2 系統全域使用的自訂程式?

  • 直接編譯安裝的程式
  • AppImage、tar.gz等第三方程式

若想全系統使用

  • 執行檔/程式本體:放在/opt/程式名稱
  • 執行入口:在/usr/local/bin建立符號連結

這樣的模式很乾淨。

因此,/usr/local的慣例是:

「非發行版套件管理器安裝的、本地管理的程式」的空間。

比起/usr,更像是管理員隨意使用的專用區


7. 總結:/usr不是「使用者的家」,而是「系統的倉庫」

最後再一次總結:

  • /usr不是user資料目錄
  • 現代Linux中的/usr
  • 系統與應用程式的共用執行檔
  • 他們使用的函式庫
  • 共用的手冊、圖示、資料
  • 就是大倉庫
  • 真正的使用者個人資料在/home/使用者名稱下。
  • 我們自行安裝的程式通常使用/opt/usr/local等。

了解Linux檔案系統結構後,會更容易判斷:

  • 「這個檔案該放哪?」
  • 「這個程式是全系統使用還是僅自己使用?」
  • 「重新安裝OS時,哪些資料需要保留?」

而這一切的起點,就是正確理解/usr的角色。