ini / config文件在linux / unix中的位置?
两个问题,真的:
(1)关于configuration文件的位置是否有标准/惯例? 对于系统或准系统程序,他们似乎通常在/ etc中的某处。 对于普通应用程序或者pgms来说,对于/ etc没有足够的权限似乎就不那么清楚了。
(2)有多种方法为程序提供信息,例如环境variables,命令行选项,ini文件等。在处理程序选项时,有哪些优先级的标准层次结构? 例如,命令行选项覆盖初始化文件? 反之亦然? 或者这完全取决于开发者?
- 一般系统/全局configuration存储在/ etc下的某个地方。
- 用户特定的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"
):用户特定的非必要数据文件。
您应该首先确定相关文件是否是:
- configuration文件(
$XDG_CONFIG_HOME:$XDG_CONFIG_DIRS
); - 数据文件(
$XDG_DATA_HOME:$XDG_DATA_DIRS
); 要么 - 非必要(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 。
- 通常在用户主目录中的dotfile文件(如.myprogramrc)中。
- 这当然是程序员的职责,但通常命令行参数会覆盖其他所有内容。 如果使用环境variables,通常可以替代命令行参数或指定configuration的位置。
对于用户configuration,我已经注意到从个人~/.myprogramrc
到~/.config
下面的结构的趋势。 例如,Qt 4使用~/.config/<vendor>/<programname>
,并使用QSettings
的默认设置。 主要的桌面环境KDE和Gnome也使用特定文件夹下的文件结构(不知道KDE 4是否使用~/.config
,XFCE使用~/.config
)。
(1)不(不幸)。 编辑:其他答案是正确的,每个用户的configuration通常存储在用户主目录中的点文件或点目录。 任何高于用户级别的东西往往是很多猜测。
(2)全系统ini文件 – >用户ini文件 – >环境 – >命令行选项(从最低到最高优先级)