每一个文件都有两个计数器:i_count和i_nlink,这两个计数器是用来干嘛的呢?当一个进程调用一个文件时这个文件的i_count就会加1,每当一个文件多一个硬链接时这个文件的i_nlink就会加1,最新创建的文件通常都会有一个i_nlink,即文件名本身,文件名也是一个硬链接,目录会有两个i_nlink,目录的名字算是一个硬链接,而目录内部还有一个硬链接,所以目录加起来是两个硬链接 ,如下所示:
[root@client tmp]# mkdir test.dir [root@client tmp]# touch test.txt [root@client tmp]# ll -d test.dir/ drwxr-xr-x 2 root root 6 Mar 19 16:30 test.dir/ [root@client tmp]# ll test.txt -rw-r--r-- 1 root root 0 Mar 19 16:30 test.txt
[root@client tmp]# ln test.txt /etc/test.txt.link
[root@client tmp]# ll test.txt
-rw-r--r-- 2 root root 0 Mar 19 16:30 test.txt
而i_count并不会被直接显示出来
当我们rm -rf删除一个文件或目录时,其实就是减少一个硬链接而已,如果真实的文件依然还有硬链接,那文件就没有真正删除成功,只有文件的i_nlink硬链接数量等于0时和i_count数量等于0时,文件才被真正删除。
我之前就曾遇到一个类似的故障案例,就是由于i_count数量没有为0,而仅仅删除的硬链接,从而导致文件没有被删除成功,直到重启调用那个文件的进程之后,文件才得以被释放,I_count等于0,文件才真正被删除,空间才得以被释放。