在Linux操作系统中,链接被分为两种:软链接(Soft Link,符号链接)和硬链接(Hard Link)。
硬链接(Hard Link)
A是B的硬链接,则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除其中一个,对另外一个没有任何影响。每增加一个文件名,inode节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。
注:文件和文件名是不同的东西,rm A删除的只是A这个文件名,而A对应的数据块只有在inode节点链接数减少为0的时候才会被系统回收。
软链接(Soft Link)
A是B的软链接,A的目录项中的inode节点号与B的目录项中的节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名。A和B之间是主从关系,如果B被删除了,A依然存在,但指向的是一个无效的链接。 A是一个普通文件(文件类型是软连接),独立于B文件存在。
特点:
硬链接(Hard Link)
- 文件有相同的 inode 及 data block,其实是一个文件,有多个名字而已;
- 只能对已存在的文件进行创建;
- 不能交叉不同文件系统进行硬链接的创建;(如一个ext2 ,一个ext3)
- 不能对目录进行创建,只可对文件创建;目录会导致目录环问题
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件
软连接(Soft Link)
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
- 软连接最好使用绝对路径,否则文件移动目录后可能会出现找不到真实文件的问题