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 |