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


8

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

但是所有这些重要目录都在其他地方进行了记录,因此man /sys/class/input无法解释在特定时间会发生什么。

为什么不将README文件放入层次结构中,以使人们更容易了解特定级别的活动并处理内容?如果设备甚至可以安装自己的READMEs,那真是太棒了。


2
也许是因为大多数人不想了解这些不同级别的情况?他们只是希望他们能够工作,因此他们可以完成他们需要/想要完成的任何任务。有人将不得不编写所有这些README文件,并且它们会给已经超载了大多数人永远不会使用的内容(例如/ usr / share的大部分内容)的文件系统增加更多的膨胀。
jamesqf

14
@jamesqf,因为大多数人不想了解这些不同级别的情况?他们只是希望他们能够工作,因此他们可以完成他们需要/想要完成的任何任务。如果我的任务与文件系统有关,比如OP看起来像什么,该怎么办?另外,您遇到过Linux用户吗?我们确实想学习。这是一个可怕的争论。
kaqqao

1
如果您没有注意到,Linux和Windows / Mac之间的根本区别是Linux知道您离开子宫已经了解了一切。因此,自述文件将是多余的。
user541686

1
@kaqqao:嗯,我是Linux用户,自从有Linux以来就已经很多了。在此之前,Unix的用户可以在我学校的PDP-11上运行。我并不特别在乎文件系统之类的东西,我只是(此刻)想让我的地震层析成像代码正常工作。只要我的键盘和轨迹球都能正常工作,我也不关心/ sys / class / input。对于对这些事情感兴趣的少数人,有一个方便的工具叫做Google,可以从大多数网络浏览器访问:-)
jamesqf

2
man hier
el.pescado

Answers:


30

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

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


10
sysfs和procfs是完全没有备份存储的虚拟文件系统。内核中的所有内容都是动态合成的。如果自述文件未存储在内存中,它们还将来自何处?
约尔格W¯¯米塔格

13
@JörgWMittag:显然,内核可以综合到的符号链接/use/share/doc
MSalters

11
内核已经是一个庞大而复杂的软件,“使人们更容易学习”并不是开发人员的主要目标。这不是很难去/usr/share/doc代替。
Federico Poloni

9
@MSalters:这意味着内核必须要么a)扫描整个文件系统以找到那些文件并创建指向它们的符号链接,b)必须具有大量的配置选项来告诉内核这些文件在哪里,以便它可以创建指向它们的符号链接,或c)必须将这些文件的位置规定给分发维护者(这将违反Linus的#1原则,即策略属于用户空间,只有机制属于内核)。另外,如何确定文件与当前运行的内核版本匹配?关于这有什么分布的...
约尔格W¯¯米塔格

7
@FedericoPoloni:FHS仅对于符合LSB的Linux发行版是强制性的。大多数不。特别是,有许多专门建立的发行版本是为了清理(他们认为是)历史遗留物,在许多情况下明确包括FHS。
约尔格W¯¯米塔格

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文件放入层次结构以使人们更容易了解正在发生的事情

如果确实需要这样README的代码,请编写自己的可加载内核模块来提供它们,或者设置一些unionfs来提供它们。我认为这样做是不值得的(并且执行unionfs /sys可能会减慢整个系统的速度)。

请记住,即使不使用内核代码,它也会消耗RAM(永远不会调出内存并且位于物理内存而不是虚拟内存中)。因此,避免膨胀会很有意义。


因此,我可以编写一个能够记录所有这些路径的软件包,而不会影响内核或使其膨胀吗?
anatoly techtonik

1
你可以,但使用的unionfs/sys会降低系统性能。我认为这样浪费时间不值得。人生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.