标准配置文件命名模式和位置​​?

标准配置文件命名模式和位置​​?

我正在使用前端 foo-gtk 编写我的应用程序 foo。

我想安装一个默认/系统范围的配置文件,我推断该文件将位于 下 /etc/foo.conf,并且可能/etc/foo-gtk.conf用于默认的 gui 设置。

我对用户特定的配置文件更加困惑。

以下是我看到其他应用程序的配置文件的地方:

  • ~/.foo.conf
  • ~/.foo/config
  • ~/.config/foo/config

第一个的优点是,如果用户需要对其进行大量编辑,可以快速找到它,但接下来的两个似乎大致相同。

我还没有找到任何正式的规范,所以我很好奇,存储/位置应用程序默认、系统范围和每用户配置文件的最佳实践是什么?

答案1

最新的最佳实践是不要将用户配置文件嵌入隐藏的用户目录下,除非应用程序有多个用户特定文件。因此,您应该仅使用~/.fooconfig(或~/.foorc) 作为 foo 的用户资源文件。

如果 foo 有多个用户文件,那么它是~/.foo/config配置文件以及任何其他文件,全部位于 ~/.foo/ 下

答案2

大约 10 多年前定义并最近采用的标准是使用~/.config/~/.cache/~/.local/share/其他一些位置以标准方式存储用户的配置、缓存和数据。

这是由以下定义的环境变量,例如$XDG_CONFIG_HOME$XDG_CACHE_HOME$XDG_DATA_HOME等。在大多数环境中它们仍然很少被预先定义,但是测试它们的存在可能仍然是一个好主意,如果尚未预先设置,则自行设置官方默认值,然后在您自己的变量中使用这些特定变量作为配置位置;通过这种方式,您可以向任何潜在用户、开发人员或源代码研究人员发出信号,表明您正在使用这些标准位置进行配置、缓存和数据(因为否则,搜索~/.config/$HOME/.config/可能会或可能不会工作,具体取决于编程语言和搜索机制)。

if [ "x$XDG_CONFIG_HOME" = "x" ] ; then
    XDG_CONFIG_HOME="$HOME/.config"
fi
CONFIG_FILE="$XDG_CONFIG_HOME/myprog/myprog.conf"
if [ "x$XDG_CACHE_HOME" = "x" ] ; then
    XDG_CACHE_HOME="$HOME/.cache"
fi
CACHE_DIR="$XDG_CACHE_HOME/myprog/my-prog-cache-v1"

参考:

相关内容