确实有两个问题:
是否有关于配置文件放置位置的标准/约定?
对于系统或准系统程序,它们似乎通常位于中
/etc
。对于普通的应用程序或特权不足的程序,似乎不太清楚/etc
。在处理程序选项时,是否存在优先的标准层次结构?例如,命令行选项是否覆盖初始化文件和/或环境变量?反之亦然?还是这完全取决于开发人员?
Answers:
一般来说,命令行选项将覆盖环境变量,而环境变量将覆盖用户默认值,而用户默认值将覆盖系统默认值。
您应将您的应用程序遵循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"
用户特定的非必需数据文件。您应该首先确定相关文件是否为:
$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用户目录规范。它定义了桌面,下载,文档,视频等的目录。
: ${XDG_CONFIG_HOME:=$HOME/.config
然后$XDG_CONFIG_HOME
将其设置为用户环境中的值,或者$HOME/.config
如果未设置任何值。
$HOME
到$USERPROFILE
或$APPDATA
与$XDG_DATA_DIRS
指向:$APPDATA:$PROGRAMDATA
。
$XDG_DATA_DIRS
与$XDG_CONFIG_DIRS
指定的其他目录,搜索文件,并$XDG_DATA_HOME
和$XDG_CONFIG_HOME
固有搜索。我认为,这一点可能有点令人困惑。
遵循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
-包含在系统重新引导之间保留的临时文件。
另请参阅文件系统层次结构标准。
对于用户配置,我注意到一种从个人~/.myprogramrc
转移到下面的结构的趋势~/.config
。例如,Qt 4使用~/.config/<vendor>/<programname>
默认设置QSettings
。主要的桌面环境KDE和Gnome也使用特定文件夹下的文件结构(不确定KDE 4是否使用~/.config
,XFCE是否使用~/.config
)。