Ubuntu 的 FHS 實現,與 Filesystem Hierarchy Standard 的差異

最後更新日期: 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 的部分:

  1. /bin/sbin:
    • 符合 FHS:儲存基本命令(/bin)和系統管理工具(/sbin),如 lscpfsck
    • 實現細節:
      • Ubuntu 採用 usrmerge(自 16.04 LTS 起逐漸實現),將 /bin 符號連結到 /usr/bin/sbin 連結到 /usr/sbin。這意味著基本命令和用戶命令實際儲存在 /usr 下,但透過連結保持相容。
      • 內容與 FHS 一致,確保單用戶模式可用。
  2. /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)而有所不同。
  3. /home:
    • 符合 FHS:儲存用戶家目錄,如 /home/<username>,包含 .bashrc.config/ 等。
    • 實現細節:
      • Ubuntu 桌面版預設啟用自動掛載(如透過 udisks),用戶家目錄可能包含桌面環境的快取(如 ~/.cache/)。
      • 可選加密家目錄(透過 ecryptfs),增強安全性。
  4. /root:
    • 符合 FHS:root 用戶的家目錄,位於根檔案系統。
    • 實現細節:與 FHS 一致,無顯著差異。
  5. /lib/lib64:
    • 符合 FHS:儲存共享函式庫和核心模組,如 libc.so/lib/modules/<kernel-version>/
    • 實現細節:
      • 因 usrmerge,/lib 連結到 /usr/lib/lib64(若存在)連結到 /usr/lib64
      • Ubuntu 的核心模組結構與 FHS 一致。
  6. /usr:
    • 符合 FHS:儲存非啟動必需的軟體和資料,如 /usr/bin/usr/share
    • 實現細節:
      • usrmerge 使 /usr/bin 成為主要命令儲存地,/bin 僅為符號連結。
      • /usr/local 用於本地安裝軟體,遵循 FHS,但 Ubuntu 鼓勵使用 APT 或 Snap 管理軟體,減少手動安裝。
      • /usr/share 包含豐富的桌面環境資料(如 GNOME 的 /usr/share/applications)。
  7. /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。
  8. /tmp:
    • 符合 FHS:儲存臨時檔案,通常為 tmpfs。
    • 實現細節:Ubuntu 預設使用 tmpfs,內容重啟後清除。
  9. /boot:
    • 符合 FHS:儲存啟動檔案,如核心映像和 GRUB 配置。
    • 實現細節:Ubuntu 使用 GRUB2,/boot/grub/ 包含詳細配置。
  10. /dev, /proc, /sys:
    • 符合 FHS:分別為設備檔案、進程資訊和系統資訊的虛擬檔案系統。
    • 實現細節:Ubuntu 使用 udev 管理 /dev,systemd 管理 /proc/sys,與 FHS 一致。
  11. /mnt/media:
    • 符合 FHS/mnt 用於臨時掛載,/media 用於自動掛載可移動設備。
    • 實現細節:Ubuntu 桌面版透過 udisks 自動掛載 USB 至 /media/<username>/<label>
  12. /run:
    • 符合 FHS:儲存運行時資料,如 PID 檔案和套接字。
    • 實現細節:Ubuntu 使用 tmpfs,/var/run 連結到 /run
  13. /opt:
    • 符合 FHS:儲存第三方軟體。
    • 實現細節:Ubuntu 鼓勵使用 Snap,許多第三方軟體安裝在 /snap 而非 /opt
  14. /srv:
    • 符合 FHS:儲存服務資料。
    • 實現細節:Ubuntu 預設未廣泛使用 /srv,但支援(如 Apache 的 /srv/www)。

Ubuntu 與標準 FHS 的差異

雖然 Ubuntu 大體遵循 FHS 3.0,但其在實現中引入了一些差異,以適應其軟體包管理、桌面環境和現代化需求。以下詳細分析這些差異:

  1. 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 下,簡化檔案系統結構。
    • 原因:
      • 現代 Linux 系統啟動時幾乎總能掛載 /usr,傳統分隔的必要性降低。
      • 簡化軟體包管理,減少重複檔案。
    • 影響:
      • 與 FHS 的模組化原則略有衝突,可能影響需要嚴格分隔的舊系統。
      • 提高相容性,與 Fedora、Debian 等其他採用 usrmerge 的發行版一致。
  2. Snap 軟體包與 /snap 目錄:
    • FHS 標準:FHS 未定義 /snap,第三方軟體通常安裝在 /opt/usr/local
    • Ubuntu 的差異:
      • Ubuntu 推廣 Snap(容器化軟體包格式),Snap 軟體安裝在 /snap 目錄。
      • 例如,安裝 Firefox 的 Snap 版本會出現在 /snap/firefox/,包含獨立的二進位檔案、函式庫和資料。
      • /var/snap 儲存 Snap 的動態資料(如快取、配置)。
    • 原因:
      • Snap 提供隔離性和跨發行版相容性,獨立於 FHS 的傳統結構。
      • 允許多版本共存(如 /snap/firefox/123/snap/firefox/124)。
    • 影響:
      • /snap 是 Ubuntu 的非標準擴展,可能導致與 FHS 相容性問題。
      • Snap 軟體繞過傳統的 /usr/bin,需透過 $PATH 或桌面啟動器訪問。
      • 增加磁碟使用量,因每個 Snap 包自帶依賴。
  3. 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)。
    • 原因:
      • 繼承 Debian 的軟體包管理系統,APT 需要專用目錄組織軟體源和快取。
    • 影響:
      • 符合 FHS 的 /etc/var 原則,但目錄名稱和結構為 Ubuntu/Debian 獨有。
      • 與非 APT 發行版的配置路徑不同,影響移植性。
  4. /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 採用 systemd 和 Snap,需擴展 /run 的功能。
    • 影響:與 FHS 一致,但 Snap 相關的運行時資料為 Ubuntu 特有。
  5. /opt 的使用減少:
    • FHS 標準/opt 用於第三方或非標準軟體。
    • Ubuntu 的差異:
      • Ubuntu 鼓勵使用 APT 或 Snap 管理軟體,減少對 /opt 的依賴。
      • 許多第三方軟體(如 Google Chrome)透過 Snap 安裝到 /snap,而非 /opt
    • 原因:
      • Snap 提供更現代的軟體分發方式,取代傳統的 /opt 安裝。
      • APT 儲存庫涵蓋大多數軟體,減少手動安裝需求。
    • 影響:
      • /opt 在 Ubuntu 中使用較少,與 FHS 的預期用途略有偏差。
      • Snap 的普及可能導致傳統軟體安裝路徑的碎片化。
  6. 桌面環境的擴展:
    • 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 和 Snap 需要額外的資料結構。
    • 影響:
      • 符合 FHS 的 /usr/share 原則,但 Snap 的非標準路徑增加複雜性。
      • 與純伺服器或非 GNOME 發行版的結構不同。

影響與意義

  1. 相容性:
    • Ubuntu 的 FHS 實現(尤其是 usrmerge)與現代 Linux 發行版(如 Fedora、Arch)趨勢一致,確保軟體移植性。
    • Snap 和 APT 的非標準目錄(如 /snap/etc/apt)可能影響與非 Ubuntu 系統的相容性。
  2. 用戶體驗:
    • usrmerge 簡化管理,對大多數用戶透明。
    • Snap 的 /snap 目錄提供現代化軟體分發,但可能讓進階用戶感到檔案系統「不純粹」。
  3. 管理效率:
    • APT 的配置和快取結構適合 Ubuntu 的軟體生態,便於更新和維護。
    • Snap 的隔離性減少依賴衝突,但增加儲存需求。
  4. 社群爭議:
    • 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 系統上進行高效配置和移植。