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


71

确实有两个问题:

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

    对于系统或准系统程序,它们似乎通常位于中/etc。对于普通的应用程序或特权不足的程序,似乎不太清楚/etc

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

Answers:


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

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


1
+1非常简单准确的解释。尽管某些安装程序没有将其配置文件放置在/ etc中,但它们仅放置在主目录中。高度依赖于特定的应用程序类型。
Elitecoder

16
GUI应用程序似乎开始使用$ HOME / .config作为存储按应用程序,按用户配置文件的目录。使主目录更加整洁并且更容易备份您的配置。
卡姆,2009年

176

您应将您的应用程序遵循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)。保存时,仅保存到用户特定的目录(因为用户可能没有对系统目录的写权限)。

有关其他面向用户的目录,请参考XDG用户目录规范。它定义了桌面,下载,文档,视频等的目录。


3
我看到该规范是由freedesktop.org提供的,该规范适用于“ X Window System桌面的互操作性和共享技术”。我不确定“ X Window系统桌面”到底是什么,但是X11.app中的xterm甚至都没有那些环境变量。因此,此答案并不适用于所有Unix。
罗里·奥肯

10
谨记那些并非总是定义这些变量的人,如果这些变量不存在,则应使用指定的默认值。例如,在shell脚本中,您可以添加到脚本的顶部,: ${XDG_CONFIG_HOME:=$HOME/.config然后$XDG_CONFIG_HOME将其设置为用户环境中的值,或者$HOME/.config如果未设置任何值。
布莱恩·坎贝尔

1
如果你正在编写跨平台,适用于Windows,你应该回退$HOME$USERPROFILE$APPDATA$XDG_DATA_DIRS指向:$APPDATA:$PROGRAMDATA
Tracker1 2015年

1
@ RoryO'Kane,我相信Brian Campbell会回答您的问题。您应检查是否已定义$ XDG_CONFIG_HOME等,如果已使用,请使用缺省值进行定义。
Jorge Bucaran 2015年

1
正如一个提示,我想指出的是,$XDG_DATA_DIRS$XDG_CONFIG_DIRS指定的其他目录,搜索文件,并$XDG_DATA_HOME$XDG_CONFIG_HOME固有搜索。我认为,这一点可能有点令人困惑。
史蒂夫·本纳

30

较新的应用

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

较旧的应用

每用户配置,通常在您的主目录中...

  • ~/.yourapp 一个文件
  • ~/.yourapp/用于多个文件+数据,通常在〜/ .yourapp / config中

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

全局应用数据: /var/lib/yourapp/

缓存数据: /var/cache/

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


来自tutorialhelpdesk.com的一些其他信息

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

在Windows中,几乎所有程序都将其文件(所有文件)安装在名为“ Program Files”的目录中。在Linux中并非如此。目录系统将所有安装的文件分类。所有配置文件位于/etc,所有二进制文件位于/bin/usr/bin/usr/local/bin。这是整个目录结构及其包含的内容:

/-构成文件系统基础的根目录。无论文件和目录的物理位置如何,它们都逻辑上包含在根目录中。

/bin-包含Linux操作系统中的可执行程序。许多Linux命令(例如cat,cp,ls,more和tar)位于/bin

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

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

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

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

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

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

/media -在可移动介质(例如CD-ROM驱动器,软盘和Zip驱动器)上挂载文件系统的目录。

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

/opt -可选软件包可在此处复制/安装文件。

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

/root -根用户的主目录。

/sbin-包含管理二进制文件。安装,关闭,umount等命令位于此处。

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

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

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

/usr -包含许多程序(例如X Window System)的子目录。

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

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

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

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

/usr/sbin -包含管理命令。

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

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

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

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

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

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

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

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

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

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

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

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



3
  1. 通常在用户主目录中的点文件(如.myprogramrc)中。
  2. 当然,这取决于程序员,但通常命令行参数会覆盖其他所有参数。如果使用环境变量,那么它通常是命令行参数的替代方法或用于指定配置的位置。

2

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


4
您看到的是XDG基本目录规范,standards.freedesktop.org
basedir

1

(1)不(不幸)。编辑:其他答案是正确的,每个用户的配置通常存储在用户主目录中的点文件或点目录中。用户级别以上的任何事情通常都是很多猜测。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.