硬链接
硬链接指通过索引节点来进行链接。在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
错误,可能是以下原因造成的:
- 不能跨文件系统。
- 不能连接目录。只能在同一个分区建立数据关联
我创建的时候是因为使用wsl的时候,跨分区跨文件系统了。所以,只需要将需要链接的文件移动到wsl所在的文件系统即可。