实际上是两个问题:
有没有关于配置文件放置位置的标准或惯例?对于系统或类似系统的程序,它们通常位于
/etc
中的某个位置。但对于普通应用程序或权限不足的程序,似乎不太清楚该放在哪里。在处理程序选项时,是否存在优先级层次结构的标准?例如,命令行选项是否会覆盖初始化文件和/或环境变量?反之亦然?还是完全由开发人员决定?
实际上是两个问题:
有没有关于配置文件放置位置的标准或惯例?对于系统或类似系统的程序,它们通常位于 /etc
中的某个位置。但对于普通应用程序或权限不足的程序,似乎不太清楚该放在哪里。
在处理程序选项时,是否存在优先级层次结构的标准?例如,命令行选项是否会覆盖初始化文件和/或环境变量?反之亦然?还是完全由开发人员决定?
$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"
):用户特定的非必需数据文件。$XDG_CONFIG_HOME:$XDG_CONFIG_DIRS
);$XDG_DATA_HOME:$XDG_DATA_DIRS
);或$XDG_CACHE_HOME
)。$XDG_DATA_DIRS/<application>/filename
或者$XDG_DATA_DIRS/<vendor>/<application>/filename
这样的形式。加载文件时,首先尝试从用户特定目录($XDG_*_HOME
)加载文件,如果失败,则从系统目录($XDG_*_DIRS
)加载。保存时仅保存到用户特定目录(因为用户可能没有写入系统目录的权限)。
对于其他更加用户导向的目录,请参考XDG User Directories Specification。它定义了桌面、下载、文档、视频等目录。
一般来说,命令行选项会覆盖环境变量,后者又会覆盖用户默认值,最后覆盖系统默认值。
遵循XDG基本目录规范,通常将~/.config/yourapp/*
用作INF、JSON、YML或任何您喜欢的格式,以及任何文件... yourapp
应与您的可执行文件名称匹配,或命名空间化为您的组织/公司/用户名/句柄到~/.config/yourorg/yourapp/*
每个用户的配置通常位于您的主目录中...
~/.yourapp
~/.yourapp/
全局配置通常位于/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
- 包含 Linux 内核和 LILO 和 GRUB 引导管理器所需的其他文件。
/dev
- 包含所有设备文件。Linux 将每个设备视为特殊文件。所有这些文件都位于 /dev
目录中。
/etc
- 包含大部分系统配置文件和 /etc/rc.d
子目录中的初始化脚本。
/home
- 家目录是各用户家目录的父目录。
/lib
- 包含库文件,包括启动系统所需的可加载驱动模块。
/lost+found
- 丢失文件的目录。每个磁盘分区都有一个 lost+found 目录。
/media
- 用于挂载可移动介质上的文件系统,如 CD-ROM 驱动器、软盘和 Zip 驱动器。
/mnt
- 临时挂载文件系统的目录。
/opt
- 可选软件包将文件复制/安装到此处。
/proc
- 虚拟文件系统中的特殊目录。它包含有关 Linux 系统各方面的信息。
/root
- root 用户的家目录。
/sbin
- 包含管理二进制文件。例如挂载、关机和卸载命令位于此处。
/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
- 包含管理命令。
/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
- 包含在系统重新启动之间保留的临时文件。
针对用户配置,我注意到趋势是从个人的~/.myprogramrc
向下一级结构~/.config
转移。例如,Qt 4使用~/.config/<vendor>/<programname>
作为QSettings
的默认设置。主要的桌面环境KDE和Gnome也使用特定文件夹下的文件结构(不确定KDE 4是否使用~/.config
,XFCE确实使用~/.config
)。
(1) 不行(很遗憾)编辑:其他答案是正确的,每个用户的配置通常存储在用户主目录中的点文件或点目录中。任何高于用户级别的设置通常都需要猜测。
(2) 系统范围的ini文件 -> 用户ini文件 -> 环境变量 -> 命令行选项(从最低到最高优先级)
: ${XDG_CONFIG_HOME:=$HOME/.config}
,然后$XDG_CONFIG_HOME
将被设置为用户环境中的值,如果没有设置任何值,则为$HOME/.config
。 - Brian Campbell$HOME
回退到$USERPROFILE
或$APPDATA
,并且$XDG_DATA_DIRS
指向:$APPDATA:$PROGRAMDATA
。 - Tracker1$XDG_DATA_DIRS
和$XDG_CONFIG_DIRS
指定了要搜索文件的附加目录,而$XDG_DATA_HOME
和$XDG_CONFIG_HOME
则是默认被搜索的。我认为这一点可能会有些令人困惑。 - Steve Benner