硬链接

硬链接指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(inode Index),硬链接是不会建立inode的,他只是 在文件原来的inode link count域再增加1 而已,也因此硬链接是不可以跨越文件系统的。在Linux中,多个文件名指向同一索引节点是存在的。一般这种链接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的链接。只删除一个链接并不影响索引节点本身和其它的链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除。

硬链接有以下优点:

  • 防止源文件误删,只要 inode 大于 1,就不会从硬盘中删除。
  • 不占据多余磁盘空间,虽然查看文件夹大小属性的时候会看到体积增加了一倍,但实际并未多余占据空间。

对硬链接有如下限制:

  • 不能对目录文件做硬链接。
  • 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。

软链接

另外一种链接称之为符号链接(Symbolic Link),也叫软链接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

如果用 C 语言中指针的概念类比,软链接就是一个指向指针的指针。

符号链接保持了链接与源文件或目录之间的区别:

  • 删除源文件或目录,只删除了数据,不会删除链接。
  • 一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。
  • 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是 l。
  • 符号链接的大小是其链接文件的路径名中的字节数。

创建链接

  • ln -s file1 lnk1 创建一个指向文件或目录的软链接
  • ln file1 lnk1 创建一个指向文件或目录的物理链接(硬链接)

错误:Invalid cross-device link

如果在创建链接的时候报Invalid cross-device link错误,可能是以下原因造成的:

  1. 不能跨文件系统。
  2. 不能连接目录。只能在同一个分区建立数据关联

我创建的时候是因为使用wsl的时候,跨分区跨文件系统了。所以,只需要将需要链接的文件移动到wsl所在的文件系统即可。