在网上查了很多资料之后,我仍然不太清楚一个文件和一个文件夹占用多少个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 加上子目录的数量(据我所知,“正常”引用(来自父级)、.
目录本身中的引用以及..
每个子目录中的引用)。
否则,文件(或目录)可以使用多个分配块,具体取决于内容,并且可以在文件的生命周期内发生变化。