我已经运行了ls -l
命令,但是我有一个很大的困惑:
主目录中 ls -l 的输出:
$ ls -l
total 16
drwxr-x--- 19 farah farah 4096 اگست 18 18:40 farah
drwxr-x--- 40 hussain hussain 4096 اگست 27 08:36 hussain
drwxr-x--- 19 remedy remedy 4096 اگست 16 21:22 remedy
drwxr-x--- 19 saweiz saweiz 4096 اگست 7 13:59 saweiz
total 16
为什么目录中只有 4 个目录却显示出来home
。
输出ls -la
$ ls -la
total 24
drwxr-xr-x 6 root root 4096 اگست 7 13:49 .
drwxr-xr-x 20 root root 4096 اگست 20 09:12 ..
drwxr-x--- 19 farah farah 4096 اگست 18 18:40 farah
drwxr-x--- 40 hussain hussain 4096 اگست 27 08:36 hussain
drwxr-x--- 19 remedy remedy 4096 اگست 16 21:22 remedy
drwxr-x--- 19 saweiz saweiz 4096 اگست 7 13:59 saweiz
我不知道这是否与操作系统有关,但我使用的是 Ubuntu 22.04
答案1
原标题是“如何理解目录的硬链接字段”,但您在正文中询问的total 16
内容(我们将会看到)不是“硬链接字段”。标题是一种误解。
这POSIX 规范ls
指出:
-l
如果指定了、-n
、 、 […] 选项中的任何一个-s
,则目录内的每个文件列表前面都应有一个状态行,以 512 字节为单位(如果-k
未指定该选项)或 1024 字节为单位(如果-k
指定了该选项),指示目录中文件占用的文件系统块数,必要时向上舍入到下一个整数单位数。在 POSIX 语言环境中,格式应为:"total %u\n", <number of units in the directory>
但在 Ubuntu 中你的ls
是ls
GNU与 POSIX 不同[强调我的]:
对于列出的每个目录,在文件前面加上一行
total blocks
,其中 blocks 是该目录中所有文件的文件系统分配。块大小当前默认为 1024 字节,但这可以被覆盖[…]。
在您的案例中,每个列出的文件都是一个报告其大小为 4096 的目录(请注意,它是相应目录的大小文件(而不是其中文件的总大小)。这意味着列出的每个目录恰好占用四个 1024 字节的块。在第一种情况下,列表中有四个,因此 4x4= total 16
;在第二种情况下,列表中有六个,因此 6x4= total 24
。
您可以ls
通过设置环境变量让 GNU 遵守 POSIX 规范POSIXLY_CORRECT
。据我所知,值无关紧要,它甚至可以为空,重要的是变量的存在。示例:
POSIXLY_CORRECT= ls -l
POSIXLY_CORRECT=whatever ls -la
在相关目录中,这些命令应该分别打印total 32
和total 48
。
如果有什么可以称为“硬链接字段”,那就是 POSIX 所称的“链接数”。在您的示例中,它是19
对于farah
,40
对于hussain
,6
对于.
等等。