0
点赞
收藏
分享

微信扫一扫

Linux的硬链接和软链接


Soft(symbolic)Link 和 Hard Link。通常说的符号连接都是指soft Link。
我们可以通过这两种链接访问在某处的文件或目录。这很像windows的快捷方式。

我们先来谈谈硬链接。首先,它不是一个包含原文件路径的文件(有很多人都会错误地认为硬链接这个文件里有原文件的路径,当点击它时,就会用里的路径打开原文件)。其实,硬连接这个文件是它指向的原文件的一个副本。

一个文件和它的硬连接的关联不是通过路径或者文件名来实现的,而是通过一个inode(这是Linux文件系统里一个结点)来实现,这个结点存储了文件的位置、创建时间、权限等信息。在Linux系统里inode结点的编号都是唯一。如果出现了两个相同的inode,硬链接就会出问题。因此,硬链接不能在不同卷或系统之间使用,也就是不能在卷1创建一个硬链接指向卷2中的文件,硬链接也不能跨文件系统。因为它们可能会出现相同的inode。

还要注意,硬链接不能用来链接目录。因为它可能会形成环。比如说,创建一个硬链接文件folder指向一个目录folder,同时把这个硬链接放到folder目录中,此时你通过硬链接打开folder,再打开folder硬链接文件,如此一来就形成一个环了。

因为硬链接是原文件的一个副本,所以即使原文件被删除了,硬链接的原文件副本还在。

创建一个硬链接:

ln originalFile hardLink

例子:

shelltest % ls -i
17030945 originalFile.sh
shelltest % ln originalFile.sh hardLink
shelltest % ls -i
17030945 hardLink 17030945 originalFile.sh

​ls -i​​:可以查看文件的inode编号

硬链接不能用在目录、其他卷、其他文件系统,软链接则可以。

软链接不是原文件的副本,这一点与硬连接是不同的。**软链接包含了原文件的路径。**因此,当原文件被删除或被移动后,软连接就会失效。

软链接不像硬链接那样通过inode结点来与原文件建立关联,正因为这样,软链接可以跨、跨文件系统。它也可以用于链接到目录,它不会像硬链接那样有环的问题。
创建一个软链接:

ln -s originalFile softLink

例子:

shelltest % ln -s originalFile.sh SoftLink
shelltest % ls -i
17043792 SoftLink 17030945 originalFile.sh
17030945 hardLink

可以看出,软链接文件的inode结点与原文件的是不一样的,而硬链接的inode结点和原文件的是一样的。

我们使用​​ls -l​​还查看的它的指向:

shelltest % ls -l
total 16
lrwxr-xr-x 1 juklinglee staff 15 Dec 13 15:46 SoftLink -> originalFile.sh
-rw-r--r-- 2 juklinglee staff 581 Dec 13 13:00 hardLink
-rw-r--r-- 2 juklinglee staff 581 Dec 13 13:00 originalFile.sh

Soft(symbolic)Link 和 Hard Link 其实是很好懂的。感谢https://linuxhint.com/soft_link_vs_hard_link/的作者。


举报

相关推荐

0 条评论