如何理解目录的硬链接字段

如何理解目录的硬链接字段

我已经运行了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 中你的lslsGNU与 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 32total 48

如果有什么可以称为“硬链接字段”,那就是 POSIX 所称的“链接数”。在您的示例中,它是19对于farah40对于hussain6对于.等等。

相关内容