为什么软件通常将本地数据保存在 $HOME/.?

为什么软件通常将本地数据保存在 $HOME/.?

我通常安装的大多数应用程序(opam、cargo、vscode、julia 等)都在我的主文件夹中保留本地存储。这种偏好有什么原因吗?或者更好的是,替代方案有缺点吗?

例如,有时建议将这些文件放在 /var 或 ~/.local/share 中,但在“跨发行版”应用程序中使用这些文件夹可能会出现问题或烦恼。

您知道任何此类可能出现的问题吗?

[我在这里提出的三个问题中的任何一个的答案都会令人满意]

答案1

在 Rob Pike 的 Google+ 帖子中, 捷径课程,给出了这样的解释:

很久以前,在设计 Unix 文件系统时,为了使导航更容易,出现了条目...。我不确定,但我相信是..在版本 2 重写期间加入的,当时文件系统变成了层次结构(早期的结构非常不同)。然而,当输入时ls,这些文件就会出现,所以 Ken 或 Dennis 为程序添加了一个简单的测试。当时它是​​汇编语言,但有问题的代码相当于这样的代码:

    if (name[0] == '.') continue;

这句话比它应该的要短一点,

    if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

但嘿,这很容易。

由此产生了两件事。

首先,这开创了一个不好的先例。许多其他懒惰的程序员通过进行同样的简化引入了错误。以句点开头的实际文件经常被跳过,而这些文件应该被计算在内。

其次,更糟糕的是,“隐藏”或“点”文件的概念被创造出来。结果,更多懒惰的程序员开始将文件放入每个人的主目录中。我用来输入这些内容的机器上并没有安装那么多东西,但我的主目录中有大约一百个点文件,我甚至不知道其中大多数是什么,也不知道它们是否仍然需要。通过我的主目录进行的每个文件名评估都会因这些累积的污泥而变慢。

我确信隐​​藏文件的概念是意料之外的结果。这肯定是一个错误。

(对于那些反对点文件有用途的人,我并不反对,但我反驳说,是文件本身有用途,而不是它们的名称约定。它们可以很容易地放在 $HOME/cfg 或 $HOME/lib 中,这就是我们在 Plan 9 中所做的,它没有点文件。我们可以吸取教训。)

所以我的理解是:

随着这些“点文件”变得不可见,其他程序员也加入进来,决定将宝贵的配置数据存储在点文件中,与...文件一起。由于一开始文件层次结构还不是很完善,它们都最终放在了 $HOME 目录中,很快这就成为了一个不成文的惯例,每个人都遵循了开国元勋的脚步。

这导致了如下荒唐行为的发生:

图像

参考 :

Linux 历史:点文件如何变成隐藏文件

相关内容