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 |