为什么 Linux 文件系统层次结构中没有自述文件?

ana*_*nik 8 fhs documentation

Linux 文件系统层次结构 ( FHS ) 包含许多重要目录。例如,我刚刚/sys/class/input在玩我的 PS/2 键盘设置时发现。

但是所有这些重要目录都记录在别处,因此man /sys/class/input无法解释在某个时刻发生的情况。

为什么不将README文件放入层次结构中,以便人们更轻松地了解特定级别上发生的事情并玩弄内容?如果设备甚至可以挂载自己的READMEs ,那就太棒了。

dir*_*rkt 30

使用您的示例:/sys/不包含“真实”文件,但完全由内核提供。您是否希望所有 README 都成为内核的一部分?你可能没有。

文档在/usr/share/doc. 其中包含硬盘上的普通文件。一些关于/sys和 的文档/proc位于内核源代码中,即/usr/src/linux/Documentation(如果您已经安装了内核源代码,并为当前内核创建了符号链接)。

  • @JörgWMittag:显然内核可以将符号链接合成到`/use/share/doc`。 (13认同)
  • 内核已经是一个庞大而复杂的软件,“让人们更容易学习”并不是他们开发人员的主要目标之一。转到`/usr/share/doc` 并不*难*。 (11认同)
  • sysfs 和 procfs 是完全虚拟的文件系统,没有后备存储。里面的所有东西都是由内核动态合成的。如果自述文件没有存储在内存中,它们还会来自哪里? (10认同)
  • @MSalters:这意味着内核必须要么 a) 扫描整个文件系统以找到这些文件并创建指向它们的符号链接,b) 必须有大量配置选项来告诉内核这些文件的位置,以便它可以为它们创建符号链接,或者 c) 必须向分发维护者规定这些文件的位置(这将违反 Linus 的 #1 准则,即策略属于用户空间,只有机制属于内核)。另外,您如何确保文件与当前运行的内核版本匹配?那些有它们的分布呢? (9认同)
  • @FedericoPoloni:FHS 仅对符合 LSB 的 Linux 发行版是强制性的。大多数没有。特别是,有许多发行版*专门*建立*清理*(他们认为的)历史遗留物,在许多情况下*明确*包括FHS。 (7认同)
  • ... `/Documentation` 中的文档而不是 `/usr/share/doc`?你们如何提供翻译? (3认同)
  • 我不明白为什么 README 会损害内核分发。或者您是否暗示作为内核一部分的所有内容都已加载到内存中? (2认同)
  • @FedericoPoloni `grep -R "/sys/class/input" /usr/share/doc` - 什么都没有。 (2认同)

Bas*_*tch 14

因为 Unix 和 Linux 有几十年的用man页面记录文档的传统(在 GNU 系统上,还有info文件......)。参见man(1)man(7)man-pages(7)。顺便说一句,man命令和页面是可选的(并且您不会在每个 Unix 系统上安装它们)。

文件系统层次结构在hier(7) 中描述。

它由https://wiki.linuxfoundation.org/lsb/fhs上的Filesystem Hierachy Standard定义

几个文件系统,特别是/proc/(参见proc(5))和/sys/(参见sysfs(5))是内核代码提供的伪文件系统。你不想用额外的代码来膨胀内核,产生这样的README-s(这对绝大多数用户来说是无用的)。甚至内核的配置文件也只是可选的,因为/proc/config.gz它在大多数内核配置中经常被禁用。并且许多 Linux 系统是嵌入式系统(例如您的智能手机、您的智能设备或 IoT 设备、您的 RaspberryPI),其中的资源非常稀少,可以避免浪费。

值得注意的/sys/是对于系统管理员和编写低级实用程序的开发人员非常有用,并且两者都应该能够适当地找到文档。

为什么不将README文件放入层次结构中,以便人们更容易了解正在发生的事情

如果您真的想要这样的READMEs,请编写自己的可加载内核模块来提供它们,或者设置一些unionfs来提供它们。我认为这不值得付出努力(并且 unionfs/sys可能会减慢整个系统的速度)。

请记住,内核代码消耗 RAM(它永远不会被调出并位于物理内存中,而不是虚拟内存中),即使不使用也是如此。所以避免膨胀是有道理的。