XDG基本目录规范

2020-06-24 10:25:06

各种规范规定了文件和文件格式。本规范定义了应该在哪里查找这些文件,方法是定义一个或多个相对于哪些文件应该定位的基本目录。

应该相对于单个基目录写入特定于用户的数据文件。此目录由环境变量$XDG_DATA_HOME定义。

应该相对于单个基目录写入特定于用户的配置文件。此目录由环境变量$XDG_CONFIG_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_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未设置或为空,则应使用等于$HOME/.cache的默认值。

$XDG_RUNTIME_DIR定义与用户特定的非必要运行时文件和其他文件对象(如套接字、命名管道等.)相关的基目录。应该储存起来。该目录必须归用户所有,并且他必须是唯一对其具有读写访问权限的用户。其Unix访问模式必须为0700。

目录的生存期必须与正在登录的用户绑定。它必须在用户首次登录时创建,如果用户完全注销,则必须删除该目录。如果用户多次登录,则应将其指向同一目录,并且强制要求该目录从他第一次登录到他在系统上的最后一次注销期间继续存在,并且在两者之间不能删除。目录中的文件不得在重新启动或整个注销/登录周期中幸存下来。

该目录必须位于本地文件系统上,并且不能与任何其他系统共享。该目录必须完全符合操作系统的标准。更具体地说,在类Unix操作系统AF_UNIX套接字上,必须支持符号链接、硬链接、正确的权限、文件锁定、稀疏文件、内存映射、文件更改通知、可靠的硬链接计数,并且不应对文件名字符集施加任何限制。此目录中的文件可能需要定期清理。为确保您的文件不会被删除,应至少每6小时修改一次其访问时间戳,否则应在文件上设置粘滞位(';Sticky';bit)。

如果没有设置$XDG_RUNTIME_DIR,应用程序应该回退到具有类似功能的替换目录,并打印一条警告消息。应用程序应将此目录用于通信和同步目的,并且不应在其中放置较大的文件,因为它可能驻留在运行时内存中,不一定可以换出到磁盘。

其他规范可以通过将数据文件的位置指定为$XDG_DATA_DIRS/subdir/filename来引用此规范。这意味著:

如果未设置$XDG_DATA_HOME/subdir/filename,则可以在$XDG_DATA_HOME/subdir/filename中创建数据文件的用户特定版本,并考虑$XDG_DATA_HOME的默认值。

数据文件的查找应相对于$XDG_DATA_HOME和$XDG_DATA_DIRS指定的所有基本目录搜索./subdir/filename。如果环境变量未设置或为空,则应使用本规范定义的默认值。

规范可以通过将配置文件的位置指定为$XDG_CONFIG_DIRS/subdir/filename来引用本规范。这意味著:

如果未设置$XDG_CONFIG_HOME/subdir/filename,则可以在$XDG_CONFIG_HOME/subdir/filename中创建配置文件的用户特定版本,并考虑$XDG_CONFIG_HOME的默认值。

配置文件的查找应相对于$XDG_CONFIG_HOME和$XDG_CONFIG_DIRS指示的所有基本目录搜索./subdir/filename。如果环境变量未设置或为空,则应使用本规范定义的默认值。

如果在尝试写入文件时,目标目录不存在,则应尝试创建权限为0700的目标目录。如果目标目录已经存在,则不应更改权限。应用程序应该准备好处理无法写入文件的情况,因为目录不存在且无法创建,或者由于任何其他原因。在这种情况下,它可以选择向用户呈现错误消息。

当尝试读取文件时,如果由于任何原因,某个目录中的文件不可访问,例如,因为该目录不存在、该文件不存在或用户未被授权打开该文件,则应该跳过对该目录中的文件的处理。如果由于此原因根本找不到所需的文件,应用程序可能会选择向用户显示错误消息。

引用$XDG_DATA_DIRS或$XDG_CONFIG_DIRS的规范应定义文件位于多个基目录下时的行为。例如,它可以定义只应该使用最重要的基本目录下的文件,或者作为另一个例子,它可以定义用于合并来自不同文件的信息的规则。