在 Linux 和 UNIX 系统中有两种类型的链接,Symbolic Links 和 Hard Links, 它们都是用 ln
命令创建的,功能相似但有一些区别。
计算机的 filesystem 存储文件的元数据,如 permissions、modification times,以及文件数据在底层存储设备上的位置,这称为 inode
。目录是一种特殊的文件类型,它将文件名称与 inode
联系起来。当 ls -l
等命令显示诸如权限之类的东西时,它们首先读取目录文件以获得文件和 inode
号码的列表,然后在 inode
中查找相关数据。
Hard Links
硬链接是同一个文件的另一个名字,当你创建一个硬链接时,是将一个新名字与一个相关联的 inode
联系起来。也就是说,当你创建一个硬链接时,你只是给一个现有文件一个额外的名字,将源文件删除不会影响到新创建的硬链接文件。
Symbolic Links
软链接也称作符号链接,软链接是一个特殊的文件,有自己的 inode
,将另一个文件的路径作为其数据存储。它是一个单独的文件,以另一个文件的路径作为其数据。与硬链接不同,符号链接可以引用另一个文件系统上的文件。它相当于 windows 系统里面的快捷方式,删除源文件后,软链接文件会失效。
当使用符号链接时,一些程序在处理它们的方式上有所不同。大多数程序将链接视为链接所指向的文件。有些程序把链接看作是一个要操作的文件,而不是它所指向的文件。有些程序有允许用户指定如何处理它们的选项。例如 tar
程序,有一个选项可以取消对符号链接的定义。也就是说,默认情况下,tar
会把链接本身而不是它所指向的文件添加到存档中。