硬链接为什么不能链接目录?

1980阅读 0评论2015-05-04 hitwh_Gypsy
分类:服务器与存储

最近在学习鸟哥的那本书,看到硬链接那块,关于硬链接存储问题在上一篇已经说过了。
今天来讨论下为什么硬链接不能链接目录?

假设存在这样一个目录:    /home/test1/test2/test3/test4   
想要把他连接到  /home/dir1 目录下的  /home/dir1/dir2  
注意:这块无论 存不存在dir2 这个目录都会报上图中的错误
但是软连接则不同,新建软连接的前提是新建的那个软连接是之前不存在的,不然会出错,见图:

好,言归正传。

想要进行  ln /home/test1/test2/test3/test4 /home/dir1/dir2 这个操作;
假设硬链接可以链接目录的话,用反推的方式看看能不能退出矛盾!

/home/test1/test2/test3/test4
/home/test1/test2/test3/test4/.
/home/test1/test2/test3/test4/..

/home/dir1/dir2
/home/dir1/dir2/.
/home/dir1/dir2/..

当操作成功后:
/home/test1/test2/test3/test4    ==    /home/dir1/dir2         (1)
同时
/home/test1/test2/test3/test4/.   ==   /home/dir1/dir2/.       (2)

/home/test1/test2/test3/test4/..   ==  /home/dir1/dir2/..      (3)

然而 /home/test1/test2/test3/test4/..    <==>   /home/test1/test2/test3
      /home/dir1/dir2/..    <==>   /home/dir1                     (4)
所以就推出:
/
home/test1/test2/test3   ==   /home/dir1                            (5)

同样的道理
重复上述过程,会得出这样一个结论:
/home/test1  ==  /

这显然是不成立的,所以
硬链接不可以链接目录


关于这个问题,鸟哥是这么解释的:
“举例来说,如果你要将 /etc 使用硬链接创建一个 /etc_hd 的目录时,那么在 /etc_hd 下的所有文件名同时都与 /etc 下面的文件名要创建硬链接的,
而不是仅仅连接到 /etc 和 /etc_hd 而已。并且,将来如果需要在 /etc_hd 目录下创建新文件时,连带的, /etc 下面的数据又得要创建一次硬链接
因此造成环境相当大的复杂度,所以是不支持链接目录的。”

上一篇:深入解析ext2文件系统之解析dir文件的具体内容
下一篇:关于Block Size的一点总结