“干净”的文件系统层次结构

“干净”的文件系统层次结构

Linux 文件系统层次结构中充满了未使用的文件夹,这些文件夹仅因历史原因而存在。

是否有发行版仅安装实际使用的目录?

答案1

(在评论显示这个问题后重写,我的回答没有任何成效。它有一个新的基调,并且涵盖的内容有点不同)。

回答新问题:

每个发行版都会做他们认为最适合用户的事情。这通常包括 A) 某种程度的定制以适应其特定的理念和 B) 某种程度的标准化以与其他发行版进行比较。

最重要的标准化因素是FHS / 文件系统层次结构标准它试图为当今 UNIX 系统上的所有主要目录保持清晰和简洁的定义。该标准正在不断发展,以适应现代发行版的需求,但进展缓慢,以免破坏旧发行版。大多数发行版都不会偏离 FHS 太远。阅读。它将帮助您理解所有 Unices。

虽然并非每个目录都可以在默认安装中使用,但大多数目录都是如此。层次结构并不“充满未使用的”目录,甚至少数最初为空的目录也在那里,因为它们可能会被使用。例如,由于发行版软件包中的二进制文件全部安装在其中/usr/bin并且/usr/local/bin用于您自己的自定义添加,因此在任何全新安装中,后面的文件夹将开始为空。然而,它仍然是有目的的存在。

回答原来的问题:

最初的问题是从“有组织的”Windows 目录布局和“令人困惑的”Unix 布局的比较开始的。我认为这是一个不公平的比较,原因如下。

系统之间的任何比较都需要考虑所比较事物的范围。您可以将苹果与橙子进行比较,并生成*有用的差异列表。有些人会更喜欢其中一种。你不能轻易做的是比较苹果到一个炼油厂

这是故意的戏剧性陈述,但我希望它可以帮助您理解当前的情况。Unix 文件系统比 Windows 文件系统做得更多。因此它更加复杂。如果你想比较它们,你应该考虑到 Windows 中的所有系统都扮演着 Unix 中文件系统所涵盖的相同角色。例如,Windows 注册表所做的事情大部分都被整合到 Unix 文件系统中。在 Unix 中,硬盘驱动器和鼠标等设备也是文件节点,并且可以这样进行操作。甚至有关正在运行的进程和内核级选项(例如网络参数)的元数据也可以通过文件系统读取和写入。在 Windows 上,这些需要特殊的 API 和复杂的程序。在 Unix 中,这就像读取或写入文本文件一样简单。这解释了/proc/sys/dev/run目录结构等在 Windows 中似乎没有对应的结构。

此外,尽管有额外的功能,它可能并不像您首先想象的那么“脏”。有些决定有历史原因,但它们仍然存在,因为它们继续被使用。我不知道文件夹通常是空的。

Linux 中面向用户的 GUI 几乎完全在$HOME目录范围内运行。一切都在/home/username或您的发行版的等效版本中。在该空间内,有一种趋势是使用大写的冗长名称,例如“下载”和“图片”,而不是“传入”和“图片”。任何通过现代 GUI 简单使用 Linux 计算机的人都不太可能需要了解其主目录中这些熟悉的命名文件夹之外的任何信息。

主目录之外的任何内容都是系统管理员的范围。只有当你想要修改或扩展Linux系统时,你才需要了解目录结构的其余部分。如果您打算编写软件或修补现有的部分,那么有必要学习当前的约定,如 中详细介绍的FHS规格大多数发行版通常都遵守这些规定。

另外值得注意的是,当来自 Windows 背景时,通常是发行版而不是单个软件包决定事情的走向。它们通常非常相似,但每个发行版对于事物的保存位置都有一个整体统一的理念。在 Windows 软件中,软件作者将他们的内容放置在他们想要的任何地方,并通过将其放置在那里的安装程序进行分发。通常,所有内容最终都会出现在他们自己设计的树中,位于带有程序名称的几个文件夹下。在 Linux 世界中,软件通常以发行版制造商维护的软件包形式分发。上游软件被分割、打包并通常符合发行版的偏好。这通常会产生一个更有组织性的整体系统。您不需要为安装的每个新软件包重新学习任何内容,重要的是您已经了解发行版的诀窍,并且所有内容都会在相同的位置一致地找到。

在查找包 A、B 和 C 的可执行文件时,其中 A 来自 Windows 核心的一部分,但 B 和 C 来自不同的供应商。在 Windows 中可能是:

c:\Windows\System32\programA.exe
c:\Program Files\Vendor A - Program A\packageA\program\A.exe
c:\Program Files\programB\bin\program.exe

...但根据供应商的习惯,可能还有其他几种变体。假设在 Linux 中,您通过软件包存储库安装了软件包 B,通过下载源软件包并手动安装来安装软件包 C。预计二进制文件最终将出现在:

/usr/A
/usr/bin/B
/usr/local/bin/C

如果您仍然觉得系统需要“修复”,那么可能值得考虑以下评论这个问题。 “重新组织”当前的布局是可能的,但任何这样做的尝试都会很快与许多人认为非常精细的机器发生冲突。

*双关语。

相关内容