原文链接basedir-spec
各种规范指定文件和文件格式。该规范通过定义一个或多个相对于哪些文件应位于的基本目录来定义应在何处查找这些文件。
XDG 基本目录规范基于以下概念:
$XDG_DATA_HOME
。$XDG_CONFIG_HOME
。$XDG_STATE_HOME
。$XDG_DATA_DIRS
。$XDG_CONFIG_DIRS
。$XDG_CACHE_HOME
。$XDG_RUNTIME_DIR
。在这些环境变量中设置的所有路径都必须是绝对的。如果实现在任何这些变量中遇到相对路径,它应该认为路径无效并忽略它。
$XDG_DATA_HOME
定义了相对于用户特定数据文件的基本目录。如果$XDG_DATA_HOME
没有设置或为空,则应使用默认的$HOME/.local/share
。$XDG_CONFIG_HOME
定义了相对于用户特定的配置文件应该被存储的基本目录。如$XDG_CONFIG_HOME
没有设置或为空,则应使用默认值$HOME/.config
。$XDG_STATE_HOME
定义了存储用户特定状态文件的基本目录。如果$XDG_STATE_HOME
没有设置或为空,则应使用默认的$HOME/.local/state
。$XDG_STATE_HOME
包含的状态数据应该在(应用程序)重启之间持续存在,但对用户来说并不重要或可移植到应该存储在$XDG_DATA_HOME中
。它可能包含:
用户特定的可执行文件可能存储在 $HOME/.local/bin
中。发行版应确保此目录显示在 UNIX$PATH
环境变量中的适当位置。
由于$HOME
可能在不同架构的系统之间共享,将编译后的二进制文件安装到 $HOME/.local/bin
可能会在不同架构的系统上使用时导致问题。这通常不是问题,但 $HOME
如果将已编译的二进制文件放入其中,则其只能适用于部分架构。
$XDG_DATA_DIRS
定义一定优先顺序搜索除 $XDG_DATA_HOME
基本目录之外的数据文件。中的目录$XDG_DATA_DIRS
应该用冒号“:”分隔。
如果$XDG_DATA_DIRS
未设置或为空,则应使用等于 /usr/local/share/:/usr/share/ 的值。
$XDG_CONFIG_DIRS
定义优先顺序的基本目录集以搜索除 $XDG_CONFIG_HOME
基本目录之外的配置文件。中的目录$XDG_CONFIG_DIRS
应该用冒号“:”分隔。
如果$XDG_CONFIG_DIRS
未设置或为空,则应使用等于 /etc/xdg 的值。
基本目录的顺序表示它们的重要性;列出的第一个目录是最重要的。当在多个位置定义相同的信息时,相对于更重要的基本目录定义的信息优先。由 定义的基本目录$XDG_DATA_HOME
被认为比由 定义的任何基本目录更重要$XDG_DATA_DIRS
。由 定义的基本目录$XDG_CONFIG_HOME
被认为比由 定义的任何基本目录更重要$XDG_CONFIG_DIRS
。
$XDG_CACHE_HOME
定义相对于应该存储用户特定的非必要数据文件的基本目录。如果 未设置或为空,则应使用 $XDG_CACHE_HOME
等于 /.cache 的默认值 。$HOME
$XDG_RUNTIME_DIR
定义相对于用户特定的非必要运行时文件和其他文件对象(如套接字、命名管道等)应该存储的基本目录。该目录必须由用户拥有,并且他必须是唯一拥有对该目录的读写权限的人。它的 Unix 访问模式必须是 0700。
目录的生命周期必须与正在登录的用户绑定。它必须在用户首次登录时创建,如果用户完全注销,则必须删除目录。如果用户多次登录,他应该被指向同一个目录,并且从他第一次登录到他最后一次注销系统,该目录必须继续存在,并且在这期间不能被删除。目录中的文件必须不能在重新启动或完整的注销/登录周期后继续存在。
该目录必须位于本地文件系统上,并且不与任何其他系统共享。该目录必须完全符合操作系统的标准。更具体地说,在类 Unix 操作系统上 AF_UNIX 套接字、符号链接、硬链接、适当的权限、文件锁定、稀疏文件、内存映射、文件更改通知,必须支持可靠的硬链接计数,并且对文件名没有限制字符集应该被强加。此目录中的文件可能会受到定期清理。为确保您的文件不会被删除,它们的访问时间时间戳应至少每 6 小时单调时间修改一次,或者应在文件上设置“粘性”位。
稀疏文件(英语:sparse file)是一种计算机文件,它能尝试在文件内容大多为空时更有效率地使用文件系统的空间。它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空间来存储空数据块。只有真实(非空)的数据块会按原样写入磁盘(来源:wikipedia.org)
如果$XDG_RUNTIME_DIR
未设置,应用程序应退回到具有类似功能的替换目录并打印警告消息。应用程序应将此目录用于通信和同步目的,并且不应在其中放置较大的文件,因为它可能驻留在运行时内存中并且不一定会换出到磁盘。
其他规范可以通过将数据文件的位置指定为 $XDG_DATA_DIRS/subdir/filename
来引用此规范。这意味着:
$datadir/subdir/filename
,$datadir
默认为 /usr/share
。$XDG_DATA_HOME/subdir/filename
中创建用户特定版本的数据文件,同时考虑$XDG_DATA_HOME
if $XDG_DATA_HOME
未设置的默认值。$XDG_DATA_HOME
和 指定的所有基本目录$XDG_DATA_DIRS
。如果环境变量未设置或为空,则应使用本规范定义的默认值。规范可以通过将配置文件的位置指定为 $XDG_CONFIG_DIRS/subdir/filename
来引用此规范。这意味着:
$sysconfdir/xdg/subdir/filename
,$sysconfdir
默认为/etc
。$XDG_CONFIG_HOME/subdir/filename
创建一个用户特定版本的配置文件,如果没有设置 $XDG_CONFIG_HOME
,应考虑到 $XDG_CONFIG_HOME
的默认值。$XDG_CONFIG_HOME
和 $XDG_CONFIG_DIRS
所指示的所有基础目录的./subdir/filename
。如果环境变量没有设置或为空,则应使用本规范所定义的默认值来代替。如果在尝试写入文件时,目标目录不存在,则应尝试使用权限创建它0700
。如果目标目录已经存在,则不应更改权限。应用程序应准备好处理无法写入文件的情况,因为目录不存在且无法创建,或者出于任何其他原因。在这种情况下,它可以选择向用户显示错误消息。
尝试读取文件时,如果由于某种原因无法访问某个目录中的文件,例如因为目录不存在、文件不存在或用户无权打开文件,则处理应该跳过该目录中的文件。如果因此根本找不到所需的文件,则应用程序可能会选择向用户显示错误消息。
当文件位于多个基本目录下时 ,引用$XDG_DATA_DIRS
或 应该定义行为必须是什么的规范。$XDG_CONFIG_DIRS
例如,它可以定义只应使用最重要的基本目录下的文件,或者作为另一个示例,它可以定义用于合并来自不同文件的信息的规则。
用echo命令来读取对应环境变量,发现在其中使用的基本都是默认路径:
xzl@xzl-PC-work:~$ echo $XDG_DATA_HOME
/home/xzl/.local/share
xzl@xzl-PC-work:~$ echo $XDG_CONFIG_HOME
/home/xzl/.config
xzl@xzl-PC-work:~$ echo $XDG_CACHE_HOME
/home/xzl/.cache
xzl@xzl-PC-work:~$ echo $XDG_RUNTIME_DIR
/run/user/1000
$XDG_STATE_HOME
未实现
$XDG_DATA_DIRS
未实现
$XDG_CONFIG_DIRS
未实现