硬链接和软连接

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sixdaycoder/article/details/79348564

硬链接和软连接

Linux和Windows的文件系统的设计几乎是完全不同,但是为了更好的组织文件,方便文件的查询,都有硬链接和软连接(符号链接)的概念。

这两个概念一直不太清楚,这里整理一下。

文件数据分为两块:
(1)文件持有的数据:文件存储的数据
(2)文件的元数据:文件的属性数据,例如文件的名字,路径,操作权限…..

在文件的元数据中有一个非常重要的属性,在Linux系统中称为inode索引。

inode索引是一个文件在某个具体的文件系统中的唯一标识,OS可以通过inode找到文件存储在硬盘上的位置,这样用户就可以访问该文件。

无论你是修改文件的内容还是移动文件的位置,都不会改变inode的值。

为了方便文件的共享,人们发明了称为链接的概念,分为硬链接和软连接。

(1)硬链接(Hard Link):

硬链接和原文件相比,仅文件名不同,inode是一样的,所以他有以下特点:

  • 仅当某文件存在时,才可以创建该文件的硬链接
  • 硬链接只能对文件创建,不能对目录创建
  • 删除一个硬链接不影响原来文件

这样说可能不是很清楚,其实我们用指针来类比会比较不错。
文件系统维持对一个文件的引用计数,创建一个硬链接可以理解为新建
一个引用指向原来的文件。修改硬链接和修改原文件的作用是一样的。
(不过你移动硬链接不会改变原文件的位置,两者仅inode和持有的数据相同)。
当你删除两个的任意一个时,会减少一个引用计数,但是引用计数不为0那么文件的内容不会释放。

(2)软连接(soft link)
软连接又称符号链接(symbolic link),他就像是windows系统中的快捷方式。
软连接有自己的inode和数据块,它实际上就是一放的是另一个文件的路径指向。
所以它有以下特点:

  • 软连接有自己的inode和block,自己的权限等。
  • 软连接创建时不必存在原文件,只要给定一个合法的路径就可以
  • 软连接可以为目录创建
  • 删除软连接不影响原文件
  • 删除原文件会影响软连接,此时软连接称为一个“死链接”,但是如果原文件重建那么软链接又有效了

最后一个特效可能会有些难以理解,举个例子:

假设在D:\somefolder\A.txt A的txt的内容是“我是A”
此时创建一个A的软连接,它的内容可以理解为就是A的路径。
此时删除A.txt,那么软连接肯定失效了,此时重建A.txt,但是A的内容不再是“我是A”,此时软连接仍然有效,由此可见,软连接持有了A的一个路径罢了。

到此为止,好像还不清楚为什么软硬链接实现了文件的共享。想象一下,如果有个文件藏在目录结构很深的位置,如果每次想要运行它都要翻好几层目录,这是很麻烦的,如果我们在桌面上建立这个文件的链接(软硬皆可),那么我们就可以很方便的访问这个文件了。

猜你喜欢

转载自blog.csdn.net/sixdaycoder/article/details/79348564