我们知道, 当用ls -l命令会看到这个文件的链接数,也就是硬链接,对于一个文件,链接数至少为一,对于一个目录,链接数至少为二(一人是自己本身,一个是自己目录一的点.)
对于根目录,情况似乎有些难理解:
当我用命令ls -l / | grep '^d' | wc -l 可以看到根目录下有22个目录 ,每个目录下都有个两点 .. 指向根目录 .
再加上根目录自身/ 和他下面的一点 .
再加上根目录下的两点 ..
总共的链接数应该是22+2+1=25
这25个文件名的inode号都是2,说明他们都是同一个文件.注意根目录下的两点也是代表根目录本身,它的inode号也是2
可是当用命令ls -ld / 时,显示的链接数却是24,很显然系统并没有把根目录下的两点算地去,可是根目录 下的"两点"明明就映射到了inode号2, 为什么系统不算进去呢? 有高手能解释下吗???
txgc_wm 于 2011-03-21 00:11:38发表:
学习了!
sleeyoyo 于 2011-03-05 10:02:51发表:
4# 奶茶dsk
似乎是这个原因吧{:2_92:}
奶茶dsk 于 2011-02-23 13:31:02发表:
[i=s] 本帖最后由 奶茶dsk 于 2011-2-23 13:32 编辑 [/i]
同意楼上所说,
普通目录的hard links之所以至少为2,是因为lz所说的“它本身”,也就是目录名是保存在它的父目录的目录项中,而/并没有父目录,所以/目录的hard links本来应该加1,但是正如lz所说,/..也是指向/,so,/目录的的hard links依然是加2,而不是加3,
可以参考下图
deepwhite 于 2011-02-23 09:08:06发表:
理解能力有限,没看懂。
但是, 根目录本身和根目录下的 "." 就是一个东西,不应该重复计算。
taoty 于 2011-02-22 21:10:23发表:
文件和目录的索引节点这个明白,关于根目录这个就不知道了。
菜鸟帮顶。