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

Max*_*xpm -1 filesystems fhs directory-structure

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

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

Cal*_*leb 9

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

回答新问题:

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

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

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

要回答原始问题:

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

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

...但它可能是其他几种变体,具体取决于供应商的习惯。假设在 Linux 中,您通过包存储库安装了包 B,并通过下载源包并手动安装来安装 C。可以预见,二进制文件最终会出现在:

/usr/A
/usr/bin/B
/usr/local/bin/C
Run Code Online (Sandbox Code Playgroud)

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

* 双关语意。