硬链接和软链接(符号链接)的区别

  对*nix系统下硬链接和软链接文件总有些疑问,于是查了些资料,稍微总结了下。

1. *nix下的文件和目录

  在*nix下目录也是文件的一种,每个文件都有两个部分组成:文件名、数据,它们之间由inode(索引节点)产生关联,文件名只是表象,索引节点指向的部分才是文件的实质内容。

  如有如下文件

name     inode
f1.txt    100
f2.txt    200
f3.txt    100

  那么f1.txt与f3.txt的文件内容实际上是一样的。

2. 硬链接和软链接

  软链接即符号链接(symbolic link),软链接有点像Windows上的快捷方式,它实际上是一个新的文件,与源文件有不同的inode,只是包含了源文件的路径信息。

  硬链接与源文件有相同的inode,只是文件名不同,但不应该算做是一个新的文件。

  用下面的命令可以验证:

JMBP:~ JinnLynn$ touch source-file
JMBP:~ JinnLynn$ ln source-file hard-link
JMBP:~ JinnLynn$ ln -s source-file soft-link
JMBP:~ JinnLynn$ ls -i
89773125 hard-link   89773158 soft-link   89773125 source-file

  可以看到 hard-link与source-file有相同的inode数值89773125。

3. 产生链接文件的限制

  软链接的源文件可以是任意的目录或文件,基本没有限制,甚至可以是某个不存在的文件或自身。

  相较而言硬链接对源文件就有较多限制,必须是存在的文件,不能是目录,也不能跨文件系统(原因很好理解,不同的文件系统有可能出现相同的inode,而硬链接是通过inode找到文件内容的)。

4. 读写或删除链接文件对源文件的影响

  对链接文件操作时都等同于对源文件的操作,但是删除链接文件则不会同时删除源文件

5. 删除源文件对链接文件的影响

  删除软链接的源文件后,访问软链接文件将无法获得源文件内容,因为软链接文件其实只是保存了源文件的路径,并没有文件的实质内容。

  删除硬链接的源文件后,硬链接文件依然可以被访问,内容即删除前的源文件内容,原因在于源文件和硬链接文件指向的相同的inode,只有当所有指向该inode的硬链接文件都删除了,文件内容才真正的被删除。

6. 其它

  软链接和硬链接基本都不占用硬盘空间(或者说占用很少)。

  硬链接可以有效的保护文件防止意外被删除。

REF :