对此有多个问题,例如了解 ls 输出、ls -la 中的列是什么?, 'ls -la' 有什么作用?, ls -al 输出中的字段是什么意思?等等。
我还遇到过许多其他网站,其中有文章试图解释它。
他们每个人的共同点似乎是,尽管写下了各列的含义,但从来没有任何链接/引用指向他们最初获取该信息的位置。第三个问题的答案链接到coreutils 手册,但很像手册页,仍然没有提供任何说明。
上述资源不完整,因为我正在开发一个驱动程序,并发现ls -l
提供了块/字符设备的主要和次要编号(这与文件或目录的常规输出不同):
这里是设备的主要/次要编号分别为1和3。
我只是发现这一点,因为有人在答案中提到了它(不相关的问题)。如果我以前想知道这些数字意味着什么,我可能无法找到答案,除非我偶然发现了这个答案。或者去查看源代码。
对于几乎每个 Linux 用户都使用的工具来说,没有任何关于其输出的正确信息似乎很奇怪。那么我错过了什么吗?它记录在哪里?
编辑:Muru 在评论中提到了另一个问题How to find the fields in ls -lmean - 该问题中的建议答案主要提到了手册页(一个直接粘贴它),对于 GNU coreutils 来说,这并没有提供完整的答案(联机帮助页没有提及主要/次要设备编号)。BSD 手册页确实如此,但 Stephen 对 posix 标准的回答是(我认为)最正确的。
ls
由 POSIX 指定,这是通用引用。输出格式在“STDOUT”部分中描述。是的,事实上,大小字段被设备文件替换,
major, minor
至少自1974 年Research Unix v5以来一直如此,并在那里记录,因为至少Research Unix v6(无法找到 v5 手册页)没有记录在GNU 实现的文档ls
(现已修复此错误报告,谢谢您)。包括 GNU 在内的大多数实现都试图遵守的实用程序POSIX 规范
ls
确实提到,大小被与所讨论的设备关联的一些实现定义的信息所取代,尽管在 GNU 的情况下,如原始的 Unix 实现,始终是. 但与最初的 Unix 实现相反,GNU保证除了主设备号和次设备号之间的逗号之外,始终至少有一个空格。ls
ls
<device-info>
ls
major, minor
ls
1 至少在POSIX 环境中,例如
POSIXLY_CORRECT
设置了环境变量并且没有BLOCKSIZE
,BLOCK_SIZE
,的LS_BLOCK_SIZE
情况下,尽管这些在本例中都不相关。² 这也是其他几种实现的情况,
ls
例如在基于 Linux 的系统上也常见的 busybox 或 toybox 实现(它们本身不符合 POSIX 标准),但并非全部。例如,来自 ast-open 的数字从不包含空格,并且会将所有数字用 0 填充到长度 3(例如001,005
),而有些仍然将它们用空格填充到长度 3,从而导致可变数量的空白分隔字段(1, 5
与7,128
for实例)。ls -l
无法可靠或可移植地解析 的输出的众多原因之一。