Linux/unix 中 ini/config 文件的位置?

其实有两个问题:

  1. 是否有关于配置文件的位置的标准/约定?

    对于系统或准系统程序,它们似乎通常位于 /etc的某个位置。对于普通的应用程序程序或者对于 /etc没有足够特权的程序来说,似乎不太清楚。

  2. 在处理程序选项时,是否有一个优先级的标准层次结构?例如,命令行选项是否覆盖初始化文件和/或环境变量?反之亦然?或者这完全取决于开发商?

132566 次浏览
  1. 通常,system/global config 存储在/etc 下面的某个地方。
  2. 特定于用户的配置存储在用户的主目录中,通常作为隐藏文件,有时作为包含非隐藏文件(可能还有更多子目录)的隐藏目录。

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

(1)没有(很不幸)。编辑:其他答案是正确的,每个用户的配置通常存储在用户主目录的点文件或点目录中。任何高于用户级别的东西通常都是需要大量猜测的。

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

  1. 通常在用户主目录中的 dotfile (如. myProgramrc)中。
  2. 当然,这取决于程序员,但通常命令行参数会覆盖其他所有内容。如果使用环境变量,它通常可以替代命令行参数或指定配置的位置。

新申请

遵循 基本目录规范通常 ~/.config/yourapp/*可以是 INF、 JSON、 YML 或者任何格式的浮动文件,以及任何文件... ... yourapp应该与您的可执行文件名相匹配,或者与您的组织/公司/用户名/句柄的名称空间相匹配

旧申请

按用户配置,通常就在您的主目录中..。

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

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

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

缓存数据: /var/cache/

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


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

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

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

/-形成文件系统基础的根目录。所有文件和目录都逻辑上包含在根目录中,而不管它们的物理位置如何。

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

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

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

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

主目录是用户的主目录的父目录。

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

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

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

/mnt-用于临时挂载文件系统的目录。

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

/proc-虚拟档案系统中的一个特殊目录,它包含 Linux 系统各个方面的信息。

/root-根用户的主目录。

包含管理二进制文件。命令,如挂载,关闭,ummount,驻留在这里。

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

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

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

包含许多程序的子目录,如 X 窗口系统。

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

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

/usr/lib-包含用于 C 和 C + + 编程语言的库。

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

包含管理命令。

/usr/share-包含共享的文件,如默认配置文件、图像、文档等。

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

/var-包含各种系统文件,如日志、邮件目录、打印线轴等,这些文件的数量和大小随着时间的推移而变化。

/var/cache-应用程序缓存数据的存储区域。

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

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

包含不同应用程序的日志文件。

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

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

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

包含等待某种处理的数据。

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

对于用户配置,我注意到一种趋势,即从单独的 ~/.myprogramrc转移到低于 ~/.config的结构。例如,Qt 4使用 ~/.config/<vendor>/<programname>,默认设置为 QSettings。主要的桌面环境 KDE 和 Gnome 也使用特定文件夹下的文件结构(不确定 KDE 4是否使用 ~/.config,XFCE 确实使用 ~/.config)。

你应该坚持你的应用程序的 XDG 基本目录规范 。大多数答案在这里要么是过时的或错误的。

您的应用程序应该将数据和配置文件存储并加载到/来自下列环境变量所指向的目录:

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

您应该首先确定所涉及的文件是否为:

  1. 配置文件($XDG_CONFIG_HOME:$XDG_CONFIG_DIRS) ;
  2. 数据文件($XDG_DATA_HOME:$XDG_DATA_DIRS) ; 或
  3. 非必要(缓存)文件($XDG_CACHE_HOME)。

建议您的应用程序将其文件放在上述目录的子目录中。通常是像 $XDG_DATA_DIRS/<application>/filename或者 $XDG_DATA_DIRS/<vendor>/<application>/filename这样的。

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

对于其他更面向用户的目录,请参考 < a href = “ http://www.freedesktop.org/wiki/Software/XDG-User-dirs”rel = “ noReferrer”> XDG 用户目录规范 。它定义了桌面目录、下载目录、文档目录、视频目录等。