如何证明目录不能创建硬链接
Reference: http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=5565
创建硬链接的命令是 ln file1 file2
在Linux下目录是不能创建硬链接的, 当我们创建时会提示:不允许创建之类的提示。那为什么不能创建呢?这和inode有关系,首先硬链接其实只是复制了一份文件的inode。
我们来举个例子:
目录结构是这样的:1目录下面有2和3目录,2目录下面有个4目录,并假设2目录的inode=1234 假设可以可以为2目录创建硬链接,并且2目录的硬链接创建在3目录下面,硬链接的名字为5,
如图:假设,1目录的inode=1235, 那么(3目录下 ..目录 inode)=(2目录下..目录inode)=(5目录下..目录inode)=(3目录下的.目录inode)=1235如图:
最终得出结论: 3目录下的..目录和.目录inode相等, 这在Linux的文件系统中是坚决不允许的。 所以,目录不能创建硬链接。
A)首先创建测试目录,目录结构为mkdir ./test1mkdir ./test2mkdir ./test1/123mkdir ./test2/456
B)先查看test1,test2目录,可以看到当前目录共用3个inode
C)下面是这3个目录的inode,可以看出,test1,test1/.,test1/123/..的inode都是一样的,现在假如在test2目录下创建了一个test1的硬链接,名为test11,
证明:
1、首先test1和test2为同级目录,那么test1/..和test2/..的inode一定是一样的。
2、test2/test11/..的inode理论上是和test1的inode一样的,从下图中可以看出,test1/..的inode为520194,而且test2/test11/..实质上是表示的test2本身,由此而证明了目录不能创建硬链接。3、如果是跨分区创建硬链接,那么则会有相同的inode的可能。如果直接用目录来创建硬链接的时候,命令根本就不会生效,直接就报错了。也可以参考下图