FILE-HIERARCHY(7) | file-hierarchy | FILE-HIERARCHY(7) |
NAME¶
file-hierarchy - 文件系統層次結構概覽描述¶
對於使用 systemd(1) 的操作系統來說, 其文件系統層次結構遵守 File System Hierarchy[1] 與 hier(7) 規範。 本手冊僅描述一個符合上述規範的子集, 該子集較小也較現代, 並且更加嚴格的遵守上述規範。許多本文所描述的路徑都可以通過 systemd-path(1) 工具來查詢。
總體結構¶
//boot
/etc
/home
/root
/srv
/tmp
運行時數據¶
/run/run/log
/run/user
發行商提供的操作系統資源¶
/usr/usr/bin
/usr/include
/usr/lib
/usr/lib/arch-id
# systemd-path system-library-arch
/usr/share
/usr/share/doc
/usr/share/factory/etc
/usr/share/factory/var
應該持久保存的易變系統數據¶
/var/var/cache
/var/lib
/var/log
/var/spool
/var/tmp
虛擬文件系統¶
/dev/dev/shm
/proc
/proc/sys
/sys
兼容性軟連接¶
/bin, /sbin, /usr/sbin/lib
/lib64
/var/run
家目錄¶
用戶應用如果想要在用戶的家目錄中保存文件或目錄,那麼應該遵守下面的規範。 注意,下面的某些目錄雖然比較脆弱, 但是已經被 XDG Base Directory Specification[3] 標準化了。 其他爲高層次用戶資源定義的位置參見 xdg-user-dirs[5] 文檔。~/.cache
~/.config
~/.local/bin
~/.local/lib
~/.local/lib/arch-id
~/.local/share
非特權進程的寫權限¶
非特權進程通常對大多數目錄都沒有寫權限。但對於普通用戶的非特權進程來說,可以寫入 /tmp, /var/tmp, /dev/shm, $HOME (通常位於 /home 下), $XDG_RUNTIME_DIR (通常位於 /run/user 下) 目錄。
而對於系統的非特權進程來說,則僅可以寫入 /tmp, /var/tmp, /dev/shm 目錄。 如果系統的非特權進程需要在 /var 或 /run 目錄中創建一個專屬的、可寫入的目錄, 那麼可以在守護進程丟棄特權之前先創建該目錄,或者通過 tmpfiles.d(5) 在系統啓動時先創建該目錄, 或者通過服務單元文件中的 RuntimeDirectory= 指令(詳見 systemd.unit(5) 手冊)創建該目錄。
文件類型¶
Unix文件系統支持不同的文件節點類型: 普通文件、目錄、軟連接、字符設備、塊設備、 套接字(socket)、管道(FIFO)。強烈建議僅將設備文件放置在 /dev 目錄中、 僅將套接字(socket)與管道(FIFO)文件放置在 /run 目錄中。 而普通文件、目錄、軟連接則可以放置在所有目錄中。
系統軟件包¶
系統軟件包的開發者應該嚴格遵守下面的文件佈局規範。 下面列出了發行商提供的系統軟件包中各類文件的推薦位置:Table 1. 系統軟件包中靜態文件的推薦位置
目錄 | 用途 |
/usr/bin | 應該出現在 $PATH 搜索路徑中且與體系結構無關的可執行文件。不要將軟件包內部使用的可執行文件或非命令行工具(例如守護進程之類)放到此目錄中。因爲衆多的軟件包都使用此目錄,所以必須選擇獨一無二的可執行文件名稱,以避免衝突。 |
/usr/lib/arch-id | 全局通用的體系結構相關的共享庫。因爲衆多的軟件包都使用此目錄,所以必須選擇獨一無二的共享庫名稱,以避免衝突。 |
/usr/lib/package | 發行商提供的該軟件包專屬的體系結構無關的靜態資源(可執行文件、庫文件、只讀數據)。 |
/usr/lib/arch-id/package | 發行商提供的體系結構相關的該軟件包專屬的資源(通常不包括軟件包內部使用的可執行文件)。 |
/usr/include/package | 該軟件包提供的共享庫的 C/C++ 頭文件。 |
發行商提供的其他靜態資源應該存放在
/usr/share 目錄下,
具體的存放位置應該遵守其他的相關規範。
存放軟件包運行時數據以及配置文件的相關目錄如下:
Table 2. 系統軟件包的運行時數據以及配置文件的推薦位置
目錄 | 用途 |
/etc/package | 特定於該系統的配置文件。如果該目錄不存在,那麼軟件包應該儘可能回退到安全的默認設置,而不應該罷工。可選地,可以設置一個 tmpfiles.d(5) 配置文件,以實現在系統啓動過程中,從 /usr/share/factory 目錄中複製("C"指令)或軟連接("L"指令)所需的文件到該目錄中。 |
/run/package | 軟件包的運行時數據。因爲該目錄會在系統啓動過程中被清空,所以軟件包必須有權限在此目錄中創建子目錄及文件。可選的,可以設置一個 tmpfiles.d(5) 配置文件,以實現在系統啓動過程中自動在此目錄中創建所需的子目錄及文件。或者可選的,在服務單元文件中使用 RuntimeDirectory= 指令(詳見 systemd.unit(5) 手冊)以達到上述目的。 |
/run/log/package | 軟件包的運行時日誌。因爲該目錄會在系統啓動過程中被清空,所以軟件包必須有權限在此目錄中創建子目錄及文件。 |
/var/cache/package | 軟件包的持久緩存。清空該目錄必須不影響軟件包的正常工作(但軟件包可以花費額外的時間重建這些緩存)。軟件包必須有權限在此目錄中創建子目錄及文件。 |
/var/lib/package | 軟件包的持久專屬數據。存放無法明確分類的持久數據。軟件包必須有權限在此目錄中創建子目錄及文件,因爲在系統啓動時該目錄可能爲空。可選的,可以設置一個 tmpfiles.d(5) 配置文件,以實現在系統啓動過程中自動在此目錄中創建所需的子目錄及文件。 |
/var/log/package | 軟件包的持久日誌數據。軟件包必須有權限在此目錄中創建子目錄及文件,因爲在系統啓動時該目錄可能爲空。 |
/var/spool/package | 軟件包的持久隊列數據。軟件包必須有權限在此目錄中創建子目錄及文件,因爲在系統啓動時該目錄可能爲空。 |
用戶軟件包¶
對於專屬於特定用戶的軟件包, 其存貯在用戶家目錄中的文件必須嚴格遵守下面的文件佈局規範。 注意,當安裝屬於系統範圍的軟件包時, 應該遵守前面"系統軟件包"小節的佈局規範。 下面列出了當用戶在其家目錄中安裝專屬軟件包時, 由發行商提供的各種類型的文件在用戶家目錄中應該存放的位置:Table 3. 用戶軟件包中靜態文件的推薦位置
目錄 | 用途 |
~/.local/bin | 應該出現在 $PATH 搜索路徑中且與體系結構無關的可執行文件。不要將軟件包內部使用的可執行文件或非命令行工具(例如守護進程之類)放到此目錄中。因爲衆多的軟件包都使用此目錄,所以必須選擇獨一無二的可執行文件名稱,以避免衝突。 |
~/.local/lib/arch-id | 全局通用的體系結構相關的共享庫。因爲衆多的軟件包都使用此目錄,所以必須選擇獨一無二的共享庫名稱,以避免衝突。 |
~/.local/lib/package | 發行商提供的該軟件包專屬的體系結構無關的靜態資源(可執行文件、庫文件、只讀數據)。 |
~/.local/lib/arch-id/package | 發行商提供的體系結構相關的該軟件包專屬的資源(通常不包括軟件包內部使用的可執行文件)。 |
發行商提供的其他靜態資源應該存放在
~/.local/share 目錄下,
具體的存放位置應該遵守其他的相關規範。
存放軟件包運行時數據以及配置文件的相關目錄如下:
Table 4. 用戶軟件包的運行時數據以及配置文件的推薦位置
目錄 | 用途 |
~/.config/package | 特定於該用戶的配置文件。如果該目錄不存在,那麼軟件包必須能夠安全的回退到默認設置,而不能罷工。 |
$XDG_RUNTIME_DIR/package | 特定於該用戶的運行時數據。 |
~/.cache/package | 軟件包的持久緩存。清空該目錄必須不影響軟件包的正常工作(但軟件包可以花費額外的時間重建這些緩存)。軟件包必須有權限在此目錄中創建子目錄及文件。 |
參見¶
systemd(1),hier(7), systemd-path(1), systemd-gpt-auto-generator(8), sysctl.d(5), tmpfiles.d(5), pkg-config(1), systemd.unit(5)
NOTES¶
- 1.
- File System Hierarchy
- 2.
- IEEE Std 1003.1
- 3.
- XDG Base Directory Specification
- 4.
- Multiarch Architecture Specifiers (Tuples)
- 5.
- xdg-user-dirs
跋¶
本頁面中文版由中文 man 手冊頁計劃提供。翻譯人員:金步國
金步國作品集:http://www.jinbuguo.com
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
systemd 231 |