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的角色。
目前沒有評論。