XDG Base Directory 规范:用户级可执行文件可存放于 $HOME/.local/bin
来源标题:XDG Base Directory Specification
XDG Base Directory 规范指出,用户专属的可执行文件可存放在 $HOME/.local/bin,各发行版应确保该目录出现在 UNIX 的 $PATH 环境变量中。若 $XDG_DATA_DIRS 未设置或为空,应使用 /usr/local/share/:/usr/share/ 作为默认值。规范还提醒,由于 $HOME 可能在不同架构的系统间共享,将编译后的二进制文件放入其中会使该目录部分地依赖特定架构。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
用户专属的可执行文件可以存放在 $HOME/.local/bin 下。发行版应确保该目录出现在 UNIX $PATH 环境变量的合适位置。由于 $HOME 可能在不同架构的系统之间共享,将编译好的二进制文件安装到 $HOME/.local/bin,在架构不同的系统上使用时可能会引发问题。这通常不是什么大问题,但应当记住:一旦把编译好的二进制文件放进 $HOME,该目录就会变得部分与架构相关。
$XDG_DATA_DIRS 定义了一组按优先级排序的基础目录,用于在 $XDG_DATA_HOME 基础目录之外搜索数据文件。$XDG_DATA_DIRS 中的目录应使用该平台上 $PATH 所用的分隔符分隔(通常是冒号 :)。如果 $XDG_DATA_DIRS 未设置或为空,应使用等同于 /usr/local/share/:/usr/share/ 的值。
$XDG_CONFIG_DIRS 定义了一组按优先级排序的基础目录,用于在 $XDG_CONFIG_HOME 基础目录之外搜索配置文件。$XDG_CONFIG_DIRS 中的目录应使用该平台上 $PATH 所用的分隔符分隔(通常是冒号 :)。如果 $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 定义了用于存放用户专属非必要运行时文件及其他文件对象(如 socket、命名管道等)的基础目录。该目录必须归该用户所有,且必须只有该用户拥有读写权限。其 Unix 访问模式必须为 0700。
该目录的生命周期必须与用户登录状态绑定。它必须在用户首次登录时创建,如果用户完全注销,该目录必须被删除。如果用户多次登录,应指向同一个目录,并且该目录必须从用户首次登录到最后一次注销期间持续存在,中途不得删除。目录中的文件不得在重启或完整的注销/登录周期后仍然存在。
该目录必须位于本地文件系统上,不得与任何其他系统共享。该目录必须完全符合操作系统的标准。更具体地说,在类 Unix 操作系统上,必须支持 AF_UNIX socket、符号链接、硬链接、正确的权限、文件锁定、稀疏文件、内存映射、文件变更通知、可靠的硬链接计数,并且不应对文件名字符集施加任何限制。该目录中的文件可能会被定期清理。为确保你的文件不被删除,应至少每 6 小时单调时间修改一次其访问时间戳,或在文件上设置 'sticky' 位。
如果 $XDG_RUNTIME_DIR 未设置,应用程序应回退到具有类似能力的替代目录,并打印一条警告消息。应用程序应将该目录用于通信和同步目的,不应在其中放置较大的文件,因为它可能位于运行时内存中,未必能换出到磁盘。
其他规范可以通过将数据文件的位置指定为 $XDG_DATA_DIRS/subdir/filename 来引用本规范。这意味着:
此类文件应安装到 $datadir/subdir/filename,其中 $datadir 默认为 /usr/share。
可以在 $XDG_DATA_HOME/subdir/filename 中创建该数据文件的用户专属版本,若 $XDG_DATA_HOME 未设置,则需考虑 $XDG_DATA_HOME 的默认值。
查找数据文件时,应相对于 $XDG_DATA_HOME 和 $XDG_DATA_DIRS 指定的所有基础目录搜索 ./subdir/filename。如果某个环境变量未设置或为空,则应改用本规范定义的默认值。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。