符号链接的大小

Ste*_*nny 7 disk-usage symlink ln

当然,符号链接确实占用空间,但只是存储名称和目标所需的空间以及用于其他元数据的几个字节

符号链接实际上对磁盘使用有影响吗?

我的问题是,我们能确定一个符号链接占用了多少字节吗?

$ touch alfa.txt
$ ln -s alfa.txt bravo.txt
Run Code Online (Sandbox Code Playgroud)

du 和 ls 都报告 8,即“alfa.txt”:

$ du -b bravo.txt
8       bravo.txt

$ ls -l bravo.txt
lrwxrwxrwx 1 Steven None 8 Mar  8 18:17 bravo.txt -> alfa.txt
Run Code Online (Sandbox Code Playgroud)

是否有一些命令可以打印包含“其他元数据的几个字节”的符号链接的真实大小?

Gil*_*il' 8

有点,但请注意,文件的大小在该精度级别上没有明确定义。

一个符号链接包括四个部分:

  • 链接的名称,存储在它作为条目的目录中。
  • 每个目录条目存在的其他元数据,用于定位其余的元数据。这通常是 inode 的位置。此外,每个目录条目都会消耗更多字节,例如填充文件名和维护数据结构,例如平衡树或哈希。
  • 符号链接本身的其他元数据,例如时间戳。其他文件类型(例如空的常规文件)也存在此元数据。
  • 链接的目标。

如果文件系统允许符号链接有多个硬链接,前两部分是每个目录条目,后两部分每个符号链接只出现一次。

在 ext2/ext3/ext4 中,如果符号链接的目标最多 60 字节长,则它存储在 inode 中。您可以通过询问来确认这一点du:对于目标为 60 字节的符号链接,它报告 0,对于更大的目标报告一个块。

就像普通文件一样,由 报告的数字du不包括目录条目和 inode 的存储。如果您想确切地知道符号链接占用了多少空间,您还必须计算这些空间。大多数经典文件系统在文件系统创建时分配 inode,因此成本是分摊的:目录条目的大小根据数据块的数量计算,inode 根据 inode 池大小计算。

对于目录条目本身的大小,条目占用的确切字节数可能取决于目录中存在的其他条目。然而,一个目录通常占用整数个块,因此如果您创建越来越多的条目,目录的大小将保持不变,直到条目不再适合一个块并分配第二个块,依此类推。要准确查看目录条目是如何存储在块中的,您需要一个文件系统调试器和对文件系统格式的基本理解,或者对文件系统格式有很好的理解以及其他条目存在的知识在目录中,可能还有它们的创建顺序和其他条目被删除的顺序。

总之,“其他元数据的几个字节”是:

  • 目录项,大小可变。创建符号链接可能没有任何区别,也可能添加一个块。
  • 索引节点。

除此之外,目标可能占据从 0 到 1 个块的任何地方。