背景
Unix 惯例和 Linux 文件系统层次结构标准定义了多条路径,进程可以在这些路径下查找特定信息,或使用这些路径写入特定信息。当需要设置用户特定的环境时,作为非 root 用户,大多数这些位置要么无法访问,要么可以读取,但无法写入文件或创建新文件。因此,必须使用替代方案。
原则上,我们可以将用户的主目录视为另一个目录/
;然而,这不是常见的做法。
还有创建目录的习惯$HOME/.my_app
。大多数创建目录的应用程序都将其用于配置,但有些应用程序也将其用于其他类型的数据(Eclipse、Firefox、Thunderbird 就隐藏了大量数据)。但这意味着我们的.something
主目录中可能有几十个甚至几百个目录,这是相当不合适的。
最后,一些应用程序将内容写入$HOME/.local
和也已成为一种常见现象$HOME/.config
,这样不会“弄乱”主目录本身:$HOME/.config
可以看作是/etc
和$HOME.local
的等价物/usr
;因此,非常有用,但是 - 它不包括/var
及其子目录。
实际问题
在用户的主目录下,我们或我们编写的程序应该将系统级程序存储在/var
或 子目录中的数据存储在 的哪里/var
?也就是说:“在系统正常运行期间,内容预计会不断变化,例如日志 [和] 假脱机... 文件”(引用 FHS),以及缓存、非静态数据库、锁定文件、运行文件和日志文件?
我认为最接近的等价词是
$XDG_STATE_HOME
:但是,您会发现有些数据
/var
并不适合上述格式,或者不太合适。例如,没有真正的$HOME
等价于/var/tmp
,但所有用户都应该被允许写入/var/tmp
。再举一个例子,由“系统”应用程序写入时会写入的数据,在由用户应用程序写入时/var/cache
实际上应该写入$XDG_CACHE_HOME
( )。$HOME/.cache