ini / config文件在linux / unix中的位置?

两个问题,真的:

(1)关于configuration文件的位置是否有标准/惯例? 对于系统或准系统程序,他们似乎通常在/ etc中的某处。 对于普通应用程序或者pgms来说,对于/ etc没有足够的权限似乎就不那么清楚了。

(2)有多种方法为程序提供信息,例如环境variables,命令行选项,ini文件等。在处理程序选项时,有哪些优先级的标准层次结构? 例如,命令行选项覆盖初始化文件? 反之亦然? 或者这完全取决于开发者?

  1. 一般系统/全局configuration存储在/ etc下的某个地方。
  2. 用户特定的configuration存储在用户的主目录中,通常作为隐藏文件,有时作为包含非隐藏文件(可能还有更多子目录)的隐藏目录。

一般来说,命令行选项将覆盖环境variables,这将覆盖用户默认值,这将覆盖系统默认值。

您应该将您的应用程序粘贴到XDG基本目录规范 。 这里的大多数答案不是过时就是错误。

您的应用程序应该将数据和configuration文件存储到/从以下环境variables所指向的目录中:

  • $XDG_DATA_HOME (默认: "$HOME/.local/share" ):用户特定的数据文件。
  • $XDG_CONFIG_HOME (默认: "$HOME/.config" ):用户特定的configuration文件。
  • $XDG_DATA_DIRS (默认: "/usr/local/share/:/usr/share/" ):系统数据目录的优先顺序集合。
  • $XDG_CONFIG_DIRS (默认: "/etc/xdg" ):优先顺序的系统configuration目录。
  • $XDG_CACHE_HOME (默认: "$HOME/.cache" ):用户特定的非必要数据文件。

您应该首先确定相关文件是否是:

  1. configuration文件( $XDG_CONFIG_HOME:$XDG_CONFIG_DIRS );
  2. 数据文件( $XDG_DATA_HOME:$XDG_DATA_DIRS ); 要么
  3. 非必要(caching)文件( $XDG_CACHE_HOME )。

build议您的应用程序将其文件放在上述目录的子目录中。 通常,像$XDG_DATA_DIRS/<application>/filename$XDG_DATA_DIRS/<vendor>/<application>/filename

加载时,首先尝试从用户特定目录( $XDG_*_HOME )加载文件,如果失败,则从系统目录( $XDG_*_DIRS )加载文件。 保存时,仅保存到用户特定的目录(因为用户可能不具有对系统目录的写入权限)。

对于其他更多面向用户的目录,请参阅XDG用户目录规范 。 它为桌面,下载,文档,video等定义目录。

较新的应用程序

遵循XDG基本目录规范通常~/.config/yourapp/*可以是INF,JSON,YML或任何格式漂浮你的船,以及任何文件… yourapp应匹配您的可执行文件名称,或命名空间与您的组织/用户名/句柄~/.config/yourorg/yourapp/*

较旧的应用程序

每用户configuration,通常在您的主目录中…

  • ~/.yourapp文件为单个文件
  • ~/.yourapp/多个文件+数据通常在〜/ .yourapp / config中

全局configuration通常位于/etc/appname文件或/etc/appname/目录中。

全球应用程序数据: /var/lib/yourapp/

caching数据: /var/cache/

日志数据: /var/log/yourapp/


来自tutorialhelpdesk.com的一些额外信息

Linux /其他类Unix系统的目录结构和目录细节。

在Windows中,几乎所有的程序都将它们的文件(所有文件)安装在名为“Program Files”的目录中。Linux中并不是这种情况。 目录系统分类所有安装的文件。 所有configuration文件都在/etc ,所有二进制文件都在/bin/usr/bin/usr/local/bin 。 下面是整个目录结构以及它们包含的内容:

/ – 构成文件系统基础的根目录。 所有文件和目录都逻辑上包含在根目录内,而不pipe它们的物理位置。

/bin – 包含作为Linux操作系统一部分的可执行程序。 许多Linux命令(如cat,cp,ls,more和tar)都位于/bin

/boot – 包含LILO和GRUB引导pipe理器所需的Linux内核和其他文件。

/dev – 包含所有设备文件。 Linux将每个设备视为一个特殊的文件。 所有这些文件都位于/dev

/etc – 包含大多数系统configuration文件和/etc/rc.d子目录中的初始化脚本。

/home – 主目录是用户主目录的父目录。

/lib – 包含库文件,包括启动系统所需的可加载驱动程序模块。

/lost+found – 丢失文件的目录。 每个磁盘分区都有一个lost + found目录。

/media – 在CD-ROM驱动器,软盘和Zip驱动器等可移动媒体上安装文件系统的目录。

/mnt – 临时安装的文件系统的目录。

/opt – 可选软件包在这里复制/安装文件。

/proc – 虚拟文件系统中的特殊目录。 它包含有关Linux系统各个方面的信息。

/root – 根用户的主目录。

/sbin – 包含pipe理二进制文件。 诸如mount,shutdown,umount之类的命令驻留在这里。

/srv – 包含系统提供的服务(HTTP,FTP等)的数据。

/sys – 一个特殊的目录,包含有关设备的信息,如Linux内核所示。

/tmp – 可用作临时目录的临时目录(存储临时文件)。 每次系统引导时,该目录的内容都会被清除。

/usr – 包含许多程序(如X Window系统)的子目录。

/usr/bin – 包含许多Linux命令的可执行文件。 它不是核心Linux操作系统的一部分。

/usr/include – 包含C和C ++编程语言的头文件

/usr/lib – 包含C和C ++编程语言的库。

/usr/local – 包含本地文件。 它与/ usr包含的目录类似。

/usr/sbin – 包含pipe理命令。

/usr/share – 包含共享文件,例如默认configuration文件,图像,文档等

/usr/src – 包含Linux内核的源代码。

/var – 包含日志,邮件目录,打印假脱机等各种系统文件,随着时间的推移,这些文件会随着数量和大小而变化。

/var/cache – 应用程序caching数据的存储区域。

/var/lib – 包含有关当前应用程序状态的信息。 程序在运行时修改。

/var/lock – 包含应用程序检查的locking文件,以便资源只能被一个应用程序使用。

/var/log – 包含不同应用程序的日志文件。

/var/mail – 包含用户的电子邮件。

/var/opt – 包含存储在/ opt目录中的包的可变数据。

/var/run – 包含自引导以来描述系统的数据。

/var/spool – 包含正在等待某种处理的数据。

/var/tmp – 包含在系统重新启动之间保留的临时文件。

请参考Filesystem Hierarchy Standard 。

  1. 通常在用户主目录中的dotfile文件(如.myprogramrc)中。
  2. 这当然是程序员的职责,但通常命令行参数会覆盖其他所有内容。 如果使用环境variables,通常可以替代命令行参数或指定configuration的位置。

对于用户configuration,我已经注意到从个人~/.myprogramrc~/.config下面的结构的趋势。 例如,Qt 4使用~/.config/<vendor>/<programname> ,并使用QSettings的默认设置。 主要的桌面环境KDE和Gnome也使用特定文件夹下的文件结构(不知道KDE 4是否使用~/.config ,XFCE使用~/.config )。

(1)不(不幸)。 编辑:其他答案是正确的,每个用户的configuration通常存储在用户主目录中的点文件或点目录。 任何高于用户级别的东西往往是很多猜测。

(2)全系统ini文件 – >用户ini文件 – >环境 – >命令行选项(从最低到最高优先级)