【问题标题】:Program configuration data in Unix/LinuxUnix/Linux 中的程序配置数据
【发布时间】:2010-03-05 06:21:08
【问题描述】:

在 Unix/Linux 中保存用户配置数据的推荐方法是什么? 我的编程语言是 C++。配置数据将以 XML/文本/二进制格式保存,我处理这些文件没有问题。我想知道我可以把它们放在哪里。例如,在 Windows 操作系统中,配置数据可能保存在注册表(旧方式)或用户应用程序数据目录中。 Linux 呢? 我需要对配置文件的读/写权限。

【问题讨论】:

    标签: c++ linux unix configuration-files


    【解决方案1】:

    注册表的概念是 Windows 特有的,Microsoft 曾承认它的构思不正确(参见 thisthisthisthis (see #2)this)。

    在 Unix 和 Linux 中,系统范围程序的配置位于 /etc 或特定于应用程序的子目录中。

    每个用户的配置数据都保存在用户主目录中的隐藏文件(文本格式)或用户主目录中特定于应用程序的隐藏目录中。引用主目录的正确方法是通过环境变量HOME。通过将. 作为名称的第一个字符来创建隐藏文件和目录。

    系统范围配置的示例是/etc/wgetrc/etc/ssh/。每个用户数据的示例是 $HOME/.bashrc$HOME/.mozilla/

    【讨论】:

    • 您不应依赖环境变量 HOME。因为我们说的是可以进行系统调用的 C++,所以你应该使用struct passwd *pw = getpwuid(getuid());(如果你需要线程安全,则应该使用getpwuid_r)然后使用pw->pw_dir的值
    • 好建议。我从来没有遇到过使用 $HOME 的问题。我注意到许多程序也必须以这种方式工作,因为有时我会用有用的预期结果覆盖 HOME。
    • 谢谢,我想我会关注这个的。顺便说一句,我可以在程序中使用“~”作为主目录吗?
    • 实际上,我会使用getenv("HOME") 并返回getpwuid(getuid())->pw_dir,以允许用户在需要时覆盖主目录。请参阅 ergosys 提到的基于 XDG 的规范:它允许用户覆盖几乎所有内容。
    【解决方案2】:

    XDG 基本目录规范指定配置和其他文件应存储在 Linux 和其他基于 X 的操作系统中的位置:

    http://freedesktop.org/wiki/Specifications/basedir-spec

    这是现代方式,最终可能会减少典型用户主目录中的点文件混乱。

    【讨论】:

      【解决方案3】:

      点文件是经典的 Unix 解决方案。如果您想自己处理阅读/编写所有内容,那就去做吧。

      但是,我使用的大多数现代程序都使用GConf 来存储首选项。作为开发人员和用户(显然是管理员,但我没有这方面的经验),这让很多事情变得更容易。

      【讨论】:

      • 关于 GConf 的好点,谢谢。就我而言,我有用于管理 XML 配置文件的跨平台代码,该代码已经在 Windows 中运行。完成此操作后,我需要添加特定于平台的代码来选择配置文件路径。
      • api.kde.org/4.0-api/kdelibs-apidocs/kdecore/html/… 用于其他流行桌面的配置方案。
      【解决方案4】:

      这在一定程度上取决于您的 Linux 风格,但作为一般规则,大多数程序在 /etc 中的某个位置都有系统默认配置,您的主目录中的 .config 文件可以覆盖 /etc 目录中的默认值。


      好点 .config 应该是 .[配置文件的名称]

      【讨论】:

      • 您可能想澄清一下,“.config”实际上是指名称以“.”开头的文件,不是扩展名为“.config”的文件。这 ”。”前缀是默认情况下保持文件“隐藏”。有一堆配置文件的程序有时会有一个“.config”目录,里面有文件。此外,old-skool Unix 应用程序倾向于使用名称“.[appname]rc”作为其配置文件/目录。
      猜你喜欢
      • 2016-01-06
      • 2011-09-08
      • 2010-11-30
      • 2011-12-12
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      相关资源
      最近更新 更多