首页 > 代码库 > 菜鸟学Linux - Hard Link与Symbolic Link

菜鸟学Linux - Hard Link与Symbolic Link

 

在学习Hard LinkSymbolic Link之前,需要大概了解一下inodedata block。在Linux的文件系统中,一个文件对应一个inode与若干个data blockinodedata block都通过编号来标识,例如第30333inode,第20334data blockinode中记录着文件的属性,如文件的所有者、所属用户组、对文件的权限以及指向data block的指针。文件的真正内容是存放在data block中的。一个文件的内容,被分割成若干部分保存在不同的data block中,通过inode可以找到文件对应的所有data block。使用ls命令并打开-i选项就可以查看文件的inode编号:

 

在Linux中,有两种不同的Link:

Hard Link:这种Link不会占用磁盘空间。例如,现在有一个名为JonathanFileHL的Hard Link指向JonathanFile.txt,实际上,JonathanFileHL和JonathanFile.txt具有相同的inode。如下面的示意图:

Symbolic Link:这种Link会实际赞用磁盘空间。例如,现在有一个名为JonathanFileSL的Symbolic Link指向JonathanFile.txt,JonathanFileSL将会有独立的inode以及data block。源文件的文件名保存在Symbolic Link的。对源文件重命名或者删除,将会导致Symbolic Link失效。后面将会通过例子证明。Symbolic Link的示意图如下:

创建Link的命令为ln,如果指定了-s选项,那么将会创建Symbolic Link,否则就是Hard Link。为了验证是否占用磁盘空间,现在先查看一下JonathanTestFolder这个文件夹的使用磁盘情况:

现在来创建Hard Link:ln JonathanFile.txt JonathanFileHL

由结果可知,Hard Link确实不会占用磁盘空间,同时inode与源文件相同。Symbolic Link就得占用磁盘空间了,下面来创建一个Symbolic Link:ln -s JonathanFile.txt JonathanFileSL

可见,Symbolic Link确实会占用磁盘空间。此外,正如上文所说,如果修改了源文件的名称或者删除源文件,Symbolic Link将会失效,但是不会对Hard Link有影响:

原因上文也交代了:Symbolic Link会通过源文件名去定位,而Hard Link通过inode去定位。更多关于ln的用法,还是man一下吧。