一个文件、一个文件夹占用多少个 inode?

一个文件、一个文件夹占用多少个 inode?

在网上查了很多资料之后,我仍然不太清楚一个文件和一个文件夹占用多少个inode。

另外,我注意到 inode 以千字节显示,而不是基数。

那么如何计算一个文件或者文件夹所需的inode数量呢?

PS 我的错了,输出中的K“和”似乎意味着千和百万,而不是千字节和兆字节。M$ sudo df -ih/

答案1

文件只有一个索引节点因为 inode 是唯一标识文件的。你可以有多个名称/路径指向同一个 inode,这称为“硬链接”

当您使用 列出文件时ls -l,列是指向 inode 的引用数(即指向它的路径数)。对于文件,它通常是1,除非明确创建了硬链接:

drwxr-xr-x  2 root root  4096 Aug 20 12:11 ./
drwxrwxrwt 29 root root 86016 Aug 20 12:11 ../
-rw-r--r--  3 root root     0 Aug 20 12:10 linked1
-rw-r--r--  3 root root     0 Aug 20 12:10 linked2
-rw-r--r--  3 root root     0 Aug 20 12:10 linked3
-rw-r--r--  1 root root     0 Aug 20 12:10 single

上面single是文件的名称,只有一个路径,而linked*同一个 inode 有三个名称。如果您要ls -il显示 inode,请执行以下操作:

>>>ls -il *
24641901 -rw-r--r-- 3 root root 0 Aug 20 12:10 linked1
24641901 -rw-r--r-- 3 root root 0 Aug 20 12:10 linked2
24641901 -rw-r--r-- 3 root root 0 Aug 20 12:10 linked3
24641866 -rw-r--r-- 1 root root 0 Aug 20 12:10 single

这证实了这三个linked*文件实际上是同一个 inode。如果我们rm linked2,则其余名称中的引用计数会减少:

>>>ls -l
drwxr-xr-x  2 root root  4096 Aug 20 12:15 ./
drwxrwxrwt 29 root root 86016 Aug 20 12:15 ../
-rw-r--r--  2 root root     0 Aug 20 12:10 linked1
-rw-r--r--  2 root root     0 Aug 20 12:10 linked3
-rw-r--r--  1 root root     0 Aug 20 12:10 single

对于目录,引用计数通常为 2 加上子目录的数量(据我所知,“正常”引用(来自父级)、.目录本身中的引用以及..每个子目录中的引用)。

否则,文件(或目录)可以使用多个分配块,具体取决于内容,并且可以在文件的生命周期内发生变化。

相关内容