我正在使用前端 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"
参考: