两个问题,真的:
(1)是否有关于配置文件放置的标准/约定?对于系统或准系统程序,它们似乎通常位于/ etc中。对于没有足够的/ etc。
特权的普通应用程序或pgms,似乎不太清楚(2)有多种方法可以向程序提供信息,例如环境变量,命令行选项,ini文件等。在处理程序选项中,是否存在优先级的标准层次结构?例如。命令行选项是否覆盖初始化文件?反之亦然?或者这完全取决于开发人员?
答案 0 :(得分:145)
您应该将您的应用程序与 XDG Base Directory Specification 相符。这里的大多数答案都是过时的或错误的。
您的应用程序应该将数据和配置文件存储到以下环境变量指向的目录中并从中加载:
$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 。它定义了桌面,下载,文档,视频等目录。
答案 1 :(得分:59)
一般来说,命令行选项将覆盖环境变量,这些变量将覆盖将覆盖系统默认值的用户默认值。
答案 2 :(得分:24)
关注XDG Base Directory Specification通常~/.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
- 丢失文件的目录。每个磁盘分区都有一个lost + found目录。
/media
- 在可移动媒体上安装文件系统的目录,如CD-ROM驱动器,软盘和Zip驱动器。
/mnt
- 临时安装的文件系统的目录。
/opt
- 可选软件包在此处复制/安装文件。
/proc
- 虚拟文件系统中的特殊目录。它包含有关Linux系统各个方面的信息。
/root
- root用户的主目录。
/sbin
- 包含管理二进制文件。 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
- 包含管理命令。
/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 :(得分:7)
答案 4 :(得分:3)
答案 5 :(得分:2)
对于用户配置,我注意到了从个人~/.myprogramrc
转移到~/.config
以下的结构的趋势。例如,Qt 4使用~/.config/<vendor>/<programname>
,默认设置为QSettings
。主要桌面环境KDE和Gnome也使用特定文件夹下的文件结构(不确定KDE 4是否使用~/.config
,XFCE确实使用~/.config
)。
答案 6 :(得分:1)
(1)否(不幸的是)。 编辑:其他答案是正确的,每用户配置通常存储在用户主目录中的点文件或点目录中。高于用户级别的任何事情通常都是很多猜测。
(2)系统范围的ini文件 - &gt;用户ini文件 - &gt;环境 - &gt;命令行选项(从最低优先级到最高优先级)