最後更新日期: 2025 年 4 月 18 日
介紹
Ubuntu 是基於 Debian 的流行 Linux 發行版,廣泛應用於桌面、伺服器和雲端環境。作為遵循 Filesystem Hierarchy Standard (FHS) 的發行版,Ubuntu 的檔案系統結構在很大程度上符合 FHS 3.0 的規範,確保與其他 Linux 發行版的相容性。然而,Ubuntu 根據其設計理念和用戶需求,對 FHS 進行了一些調整和擴展,這些差異主要體現在目錄結構、檔案放置和軟體包管理(如 Snap)等方面。以下詳細介紹 Ubuntu 的 FHS 實現,並分析其與標準 FHS 的差異。
Ubuntu 的 FHS 實現
Ubuntu 的檔案系統結構遵循 FHS 3.0,根目錄(/
)下的主要子目錄與 FHS 定義一致。以下概述 Ubuntu 中各主要目錄的實現,重點突出其遵循 FHS 的部分:
/bin
和/sbin
:- 符合 FHS:儲存基本命令(
/bin
)和系統管理工具(/sbin
),如ls
、cp
、fsck
。 - 實現細節:
- Ubuntu 採用 usrmerge(自 16.04 LTS 起逐漸實現),將
/bin
符號連結到/usr/bin
,/sbin
連結到/usr/sbin
。這意味著基本命令和用戶命令實際儲存在/usr
下,但透過連結保持相容。 - 內容與 FHS 一致,確保單用戶模式可用。
- Ubuntu 採用 usrmerge(自 16.04 LTS 起逐漸實現),將
- 符合 FHS:儲存基本命令(
/etc
:- 符合 FHS:儲存系統和應用配置文件,如
/etc/fstab
、/etc/passwd
、/etc/apt/sources.list
。 - 實現細節:
- Ubuntu 使用 APT 軟體包管理,
/etc/apt/
包含軟體源配置(如/etc/apt/sources.list
)和快取。 - 桌面環境配置(如
/etc/gdm/
)和服務配置(如/etc/systemd/
)遵循 FHS,但結構因 Ubuntu 的預設軟體(如 GNOME、systemd)而有所不同。
- Ubuntu 使用 APT 軟體包管理,
- 符合 FHS:儲存系統和應用配置文件,如
/home
:- 符合 FHS:儲存用戶家目錄,如
/home/<username>
,包含.bashrc
、.config/
等。 - 實現細節:
- Ubuntu 桌面版預設啟用自動掛載(如透過
udisks
),用戶家目錄可能包含桌面環境的快取(如~/.cache/
)。 - 可選加密家目錄(透過
ecryptfs
),增強安全性。
- Ubuntu 桌面版預設啟用自動掛載(如透過
- 符合 FHS:儲存用戶家目錄,如
/root
:- 符合 FHS:root 用戶的家目錄,位於根檔案系統。
- 實現細節:與 FHS 一致,無顯著差異。
/lib
和/lib64
:- 符合 FHS:儲存共享函式庫和核心模組,如
libc.so
、/lib/modules/<kernel-version>/
。 - 實現細節:
- 因 usrmerge,
/lib
連結到/usr/lib
,/lib64
(若存在)連結到/usr/lib64
。 - Ubuntu 的核心模組結構與 FHS 一致。
- 因 usrmerge,
- 符合 FHS:儲存共享函式庫和核心模組,如
/usr
:- 符合 FHS:儲存非啟動必需的軟體和資料,如
/usr/bin
、/usr/share
。 - 實現細節:
- usrmerge 使
/usr/bin
成為主要命令儲存地,/bin
僅為符號連結。 /usr/local
用於本地安裝軟體,遵循 FHS,但 Ubuntu 鼓勵使用 APT 或 Snap 管理軟體,減少手動安裝。/usr/share
包含豐富的桌面環境資料(如 GNOME 的/usr/share/applications
)。
- usrmerge 使
- 符合 FHS:儲存非啟動必需的軟體和資料,如
/var
:- 符合 FHS:儲存動態檔案,如
/var/log
、/var/cache
、/var/tmp
。 - 實現細節:
/var/log
包含 Ubuntu 特定的日誌,如/var/log/apt/
(APT 安裝日誌)。/var/cache/apt/
儲存 APT 下載的軟體包快取。/var/run
連結到/run
,符合 FHS 3.0。
- 符合 FHS:儲存動態檔案,如
/tmp
:- 符合 FHS:儲存臨時檔案,通常為 tmpfs。
- 實現細節:Ubuntu 預設使用 tmpfs,內容重啟後清除。
/boot
:- 符合 FHS:儲存啟動檔案,如核心映像和 GRUB 配置。
- 實現細節:Ubuntu 使用 GRUB2,
/boot/grub/
包含詳細配置。
/dev
,/proc
,/sys
:- 符合 FHS:分別為設備檔案、進程資訊和系統資訊的虛擬檔案系統。
- 實現細節:Ubuntu 使用 udev 管理
/dev
,systemd 管理/proc
和/sys
,與 FHS 一致。
/mnt
和/media
:- 符合 FHS:
/mnt
用於臨時掛載,/media
用於自動掛載可移動設備。 - 實現細節:Ubuntu 桌面版透過
udisks
自動掛載 USB 至/media/<username>/<label>
。
- 符合 FHS:
/run
:- 符合 FHS:儲存運行時資料,如 PID 檔案和套接字。
- 實現細節:Ubuntu 使用 tmpfs,
/var/run
連結到/run
。
/opt
:- 符合 FHS:儲存第三方軟體。
- 實現細節:Ubuntu 鼓勵使用 Snap,許多第三方軟體安裝在
/snap
而非/opt
。
/srv
:- 符合 FHS:儲存服務資料。
- 實現細節:Ubuntu 預設未廣泛使用
/srv
,但支援(如 Apache 的/srv/www
)。
Ubuntu 與標準 FHS 的差異
雖然 Ubuntu 大體遵循 FHS 3.0,但其在實現中引入了一些差異,以適應其軟體包管理、桌面環境和現代化需求。以下詳細分析這些差異:
- usrmerge(/usr 合併):
- FHS 標準:FHS 傳統上將
/bin
、/sbin
、/lib
與/usr/bin
、/usr/sbin
、/usr/lib
分隔,區分啟動必需和非必需檔案。 - Ubuntu 的差異:
- Ubuntu 自 16.04 LTS 起逐步採用 usrmerge,將
/bin
、/sbin
、/lib
符號連結到/usr/bin
、/usr/sbin
、/usr/lib
。 - 例如,執行
ls -l /bin
會顯示/bin -> /usr/bin
。 - 這意味著所有命令和函式庫實際儲存在
/usr
下,簡化檔案系統結構。
- Ubuntu 自 16.04 LTS 起逐步採用 usrmerge,將
- 原因:
- 現代 Linux 系統啟動時幾乎總能掛載
/usr
,傳統分隔的必要性降低。 - 簡化軟體包管理,減少重複檔案。
- 現代 Linux 系統啟動時幾乎總能掛載
- 影響:
- 與 FHS 的模組化原則略有衝突,可能影響需要嚴格分隔的舊系統。
- 提高相容性,與 Fedora、Debian 等其他採用 usrmerge 的發行版一致。
- FHS 標準:FHS 傳統上將
- Snap 軟體包與 /snap 目錄:
- FHS 標準:FHS 未定義
/snap
,第三方軟體通常安裝在/opt
或/usr/local
。 - Ubuntu 的差異:
- Ubuntu 推廣 Snap(容器化軟體包格式),Snap 軟體安裝在
/snap
目錄。 - 例如,安裝 Firefox 的 Snap 版本會出現在
/snap/firefox/
,包含獨立的二進位檔案、函式庫和資料。 /var/snap
儲存 Snap 的動態資料(如快取、配置)。
- Ubuntu 推廣 Snap(容器化軟體包格式),Snap 軟體安裝在
- 原因:
- Snap 提供隔離性和跨發行版相容性,獨立於 FHS 的傳統結構。
- 允許多版本共存(如
/snap/firefox/123
和/snap/firefox/124
)。
- 影響:
/snap
是 Ubuntu 的非標準擴展,可能導致與 FHS 相容性問題。- Snap 軟體繞過傳統的
/usr/bin
,需透過$PATH
或桌面啟動器訪問。 - 增加磁碟使用量,因每個 Snap 包自帶依賴。
- FHS 標準:FHS 未定義
- APT 相關的配置與快取:
- FHS 標準:FHS 未明確規範軟體包管理器的配置,但配置文件應位於
/etc
,快取應在/var/cache
。 - Ubuntu 的差異:
- Ubuntu 使用 APT(基於 Debian),其配置集中在
/etc/apt/
(如/etc/apt/sources.list
),快取在/var/cache/apt/
和/var/lib/apt/
。 - 這些目錄是 Debian/Ubuntu 特定的結構,其他發行版(如 Arch 的
pacman
)使用不同路徑(如/var/cache/pacman
)。
- Ubuntu 使用 APT(基於 Debian),其配置集中在
- 原因:
- 繼承 Debian 的軟體包管理系統,APT 需要專用目錄組織軟體源和快取。
- 影響:
- 符合 FHS 的
/etc
和/var
原則,但目錄名稱和結構為 Ubuntu/Debian 獨有。 - 與非 APT 發行版的配置路徑不同,影響移植性。
- 符合 FHS 的
- FHS 標準:FHS 未明確規範軟體包管理器的配置,但配置文件應位於
/var/run
與/run
:- FHS 標準:FHS 3.0 規範
/run
取代/var/run
,儲存運行時資料。 - Ubuntu 的差異:
- Ubuntu 完全遵循 FHS 3.0,
/var/run
是/run
的符號連結(如lrwxrwxrwx /var/run -> /run
)。 - 無顯著差異,但 Ubuntu 的 systemd 服務(如
/run/systemd/
)和 Snap 運行時資料(如/run/snapd/
)增加了/run
的使用。
- Ubuntu 完全遵循 FHS 3.0,
- 原因:Ubuntu 採用 systemd 和 Snap,需擴展
/run
的功能。 - 影響:與 FHS 一致,但 Snap 相關的運行時資料為 Ubuntu 特有。
- FHS 標準:FHS 3.0 規範
/opt
的使用減少:- FHS 標準:
/opt
用於第三方或非標準軟體。 - Ubuntu 的差異:
- Ubuntu 鼓勵使用 APT 或 Snap 管理軟體,減少對
/opt
的依賴。 - 許多第三方軟體(如 Google Chrome)透過 Snap 安裝到
/snap
,而非/opt
。
- Ubuntu 鼓勵使用 APT 或 Snap 管理軟體,減少對
- 原因:
- Snap 提供更現代的軟體分發方式,取代傳統的
/opt
安裝。 - APT 儲存庫涵蓋大多數軟體,減少手動安裝需求。
- Snap 提供更現代的軟體分發方式,取代傳統的
- 影響:
/opt
在 Ubuntu 中使用較少,與 FHS 的預期用途略有偏差。- Snap 的普及可能導致傳統軟體安裝路徑的碎片化。
- FHS 標準:
- 桌面環境的擴展:
- FHS 標準:FHS 未詳細規範桌面環境的資料,但
/usr/share
用於與架構無關的資料。 - Ubuntu 的差異:
- Ubuntu 的桌面環境(預設 GNOME)在
/usr/share
中添加了大量資料,如:/usr/share/applications/
:桌面啟動器(.desktop
檔案)。/usr/share/icons/
:圖示主題。/usr/share/gnome/
:GNOME 特定的配置。
- Snap 軟體的桌面整合(如
.desktop
檔案)可能出現在/var/lib/snapd/desktop/
。
- Ubuntu 的桌面環境(預設 GNOME)在
- 原因:
- Ubuntu 針對桌面用戶優化,GNOME 和 Snap 需要額外的資料結構。
- 影響:
- 符合 FHS 的
/usr/share
原則,但 Snap 的非標準路徑增加複雜性。 - 與純伺服器或非 GNOME 發行版的結構不同。
- 符合 FHS 的
- FHS 標準:FHS 未詳細規範桌面環境的資料,但
影響與意義
- 相容性:
- Ubuntu 的 FHS 實現(尤其是 usrmerge)與現代 Linux 發行版(如 Fedora、Arch)趨勢一致,確保軟體移植性。
- Snap 和 APT 的非標準目錄(如
/snap
、/etc/apt
)可能影響與非 Ubuntu 系統的相容性。
- 用戶體驗:
- usrmerge 簡化管理,對大多數用戶透明。
- Snap 的
/snap
目錄提供現代化軟體分發,但可能讓進階用戶感到檔案系統「不純粹」。
- 管理效率:
- APT 的配置和快取結構適合 Ubuntu 的軟體生態,便於更新和維護。
- Snap 的隔離性減少依賴衝突,但增加儲存需求。
- 社群爭議:
- usrmerge 和 Snap 在 Linux 社群中引發討論,部分用戶認為偏離 FHS 的模組化精神。
- Snap 的普及可能降低對 FHS 傳統目錄(如
/opt
)的依賴。
總結
Ubuntu 的檔案系統結構高度遵循 FHS 3.0,核心目錄(如 /bin
、/etc
、/var
)與標準一致,確保與其他 Linux 發行版的相容性。然而,Ubuntu 透過 usrmerge(合併 /bin
和 /usr/bin
等)、Snap(引入 /snap
目錄)、APT 特定的配置(/etc/apt
)和桌面環境擴展(如 /usr/share
的 GNOME 資料)引入了一些差異。這些調整反映了 Ubuntu 對現代化、易用性和桌面體驗的追求,但也帶來了與 FHS 標準的輕微偏差。對於管理員和開發者,理解這些差異有助於在 Ubuntu 系統上進行高效配置和移植。