软连接和硬连接【Linux操作系统】
文章目录
- 软硬链接
- 软链接
- 软连接的应用
- 硬链接
- 硬链接的作用
- 为什么软链接可以链接目录?
软硬链接
软硬链接的作用域一般是与原文件在同一个分区中
软链接
命令:ln -s 目标文件 自定义链接文件
特点:
-
软链接的文件类型是l(类似目录的文件类型是d)
-
软链接出来的文件是一个独立的文件,它有自己的inode
-
软连接是一个独立文件,所以它=内容+属性
属性上就是和一般的文件一样
内容则存储的是目标文件的路径
所以软链接就相当于是C++中的引用
它里面存储的路径就类似于引用中存储的地址
目标文件就是本源,而且当本源消失,软连接和引用都会失效 -
对软连接进行操作,就相当于对目标文件进行操作
因为
对软链接进行任何操作时,操作系统识别到文件类型是l,就会先通过软连接中存储的路径,找到目标文件,再对目标文件进行操作
所以软链接就类似于是目标文件的快捷方式
软连接的应用
①最本质的作用就是文件目标文件的作为快捷方式
②软链接也可以链接目录
,这样cd软链接,就能cd进链接到的目录里
③软连接最常用的地方是对库进行软链接
硬链接
命令:ln 目标文件 链接文件
硬链接实际上是在文件系统中为同一个文件创建多个文件名,这些文件名都指向文件的inode节点。
因此,当我们对硬链接文件进行操作时,本质上是对目标文件进行操作。
硬连接就是目标文件,所有硬连接都和目标文件同级别
硬链接的本质就是给一个实际存在的文件取别名,只不过硬链接之后,所有硬链接都是本源
所以即使目标文件消失,也没关系
文件只有一个,但是文件的名字有多个
所以使用硬链接就是使用目标文件,并且对每个硬链接的修改,都是对目标文件的修改
特点:
①硬链接出来的文件不是一个独立的文件,它没有
自己的inode,与目标文件共用一个inode
②一次硬链接就是新增一组文件名与inode的映射关系
③硬链接会让目标文件的inode中的引用计数++,所以只有所有的硬链接都没有了,引用计数为0了
,硬链接的目标文件才会被真正删除
④Linux中不允许
对目录进行硬链接,但是Linux自己做了特例,也就是每个目录都有的.和…
为什么呢?
1,如果让用户自己可以任意对目录进行硬链接,就很容易出现环状路径
比如
/a/b/c/d/test.c
如果目录d是目录a的硬链接
因为硬链接就是本源,那使用硬链接就是使用原始目录(文件)
所以如果cd这条路径进入d目录时,也就相当于进入了a目录
那么test.c到底在那里呢?
这不就全乱套了吗?
这样子搞Linux的文件路径就不是树,而是图了,根本没必要把路径搞这么复杂
所以Linux就直接禁止用户对目录进行硬链接了
2,而.和…是Linux为了方便管理目录创建的特例,Linux知道要对名字叫做.和…的目录进行特殊处理
用户创建的目录的名字五花八门,Linux也不可能针对性的进行处理
⑤硬链接不能跨文件系统创建
,它只能在同一个文件系统内部使用。
硬链接的作用
-
数据备份:创建硬链接,确保即使文件名被删除,文件内容仍然可以通过其他硬链接访问。
-
数据同步:在不同目录下创建硬链接,方便同步和更新文件。
-
方便Linux对文件路径树进行管理,方便用户使用相对路径,而出现的.和…就是通过硬链接来实现的
也就是.是自己这个目录的硬链接
…是上级目录的硬链接
这也是为什么一个空目录的硬连接数是2的原因,因为.是自己的硬链接
注意
根目录的.和…虽然都指向自己,但是规定…不会让根目录的inode的引用计数++
点却可以让引用计数++
为什么软链接可以链接目录?
-
路径指向:软链接实际上是一个
文本文件
,包含指向目标文件的路径。因此,即使软链接指向的是一个目录,它也不会像硬链接那样直接影响到文件系统的结构,只是指向目录的路径 -
非循环链接:
由于软链接是指向路径的引用,文件系统可以很容易地检测并防止循环链接的情况
。如果软链接指向的路径是一个循环,文件系统在解析链接时能够发现并报错,而不是陷入无限循环。 -
软连接文件有自己的特殊文件类型,可以帮助操作系统识别出软连接和目录
-
灵活性:软链接提供了跨文件系统和目录链接的灵活性,这对于管理和访问文件系统非常有用。即使目录被移动或重命名,只要路径正确,软链接仍然可以指向正确的目标。
因此,硬链接不适用于目录主要是为了避免文件系统的结构问题和权限管理问题
而软链接则由于其路径指向的特性,可以安全地用于目录。
说到底就是:
①Linux操作软链接的时候,知道自己要通过内容中的路径找到本源
通过这一点就说明Linux知道谁是软链接,路径循环的时候就可以报错(硬连接没有特殊的文件类型,文件类型就和普通文件一样,因为使用起来没区别
)
②Linux操作硬链接时,因为硬链接就是本源
,所以Linux根本分辨不出来它是目录还是硬链接,特例.和…也是通过它们特殊的文件名分辨出来的