最近在学习鸟哥的那本书,看到硬链接那块,关于硬链接存储问题在上一篇已经说过了。
今天来讨论下为什么硬链接不能链接目录?
假设存在这样一个目录: /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 下面的数据又得要创建一次硬链接
因此造成环境相当大的复杂度,所以是不支持链接目录的。”