【Linux】基础IO -- 软硬链接

前言

上篇Linux的文章,我们学习到了文件系统中,对磁盘文件的管理。
而本篇文章,我们要以文件系统的基础知识,了解软硬链接
话不多说,马上开始今天的学习。

在这里插入图片描述

一. 软链接

1. 软链接的语法

我们先创建一个myfile.txt的文件,并写入一些内容
在这里插入图片描述

软链接
ln -s 文件名 软链接名
在这里插入图片描述

2. 软链接的本质

在这里插入图片描述

我们通过cat软链接,也可以查看my_file.txt的内容
同时我们发现可以通过ll -i指令查看文件的inode编号

在这里插入图片描述
蓝色部分都是文件的inode编号

我们发现软链接my_soft的inode和myfile.txt不一样

my_soft软链接是一个独立的新的链接文件,有自己的inode编号,也一定有自己的属性和内容
软链接内部放的是自己所指向的文件的路径

3. 软链接的应用

有了对软链接的认识,我们接下来接触软链接的应用

比如我们创建一个路径
在这里插入图片描述
然后写一个打印hello world的小程序,放到这个深路径中
在这里插入图片描述
然后我们可以通过软链接链接这个小程序

在这里插入图片描述
然后我们可以通过这个软链接使用程序
在这里插入图片描述
这样看下来,我们可以通过软链接,将一个不存在本目录之下的程序,不用指明路径就可以直接使用

软链接其实就相当于Window下的快捷方式

二. 硬链接

1. 硬链接的语法

硬链接
ln 文件名 硬链接名
在这里插入图片描述

2. 硬链接的本质

在这里插入图片描述
我们通过cat指令,同样可以查看到myfile.txt的内容
那硬链接和软链接有什么不同呢?
我们再用ll -i指令查看一下文件的inode
在这里插入图片描述

我们发现硬链接和软链接形成的文件的inode编号不同,我们上面说了,软链接是新的独立的文件,会有自己的inode,但我们这里发现硬链接的文件的inode和链接文件的inode一样,所以可以肯定的是硬链接并没有产生新文件。

my_hard硬链接和目标文件共用一个inode编号,这代表硬链接和目标文件共用一个inode
硬链接本质其实是在目录里新建一个文件名和该文件inode的映射关系
硬链接个数是inode属性之一,记录该文件同时被几个文件名/硬链接指向。

当一个文件有多个硬链接时,rm删除并不会达成效果,因为硬链接个数属于属性之一,当文件的硬链接个数大于1时,rm指令本质只会将硬链接个数-1,并不会真正删除文件,只会删除指定的硬链接。当硬链接个数为1时,rm删除,才会真正的删除文件。

3. 软链接补充知识

这里想通过软硬链接,证明软链接文件存储的内容是文件的路径。

我们创建一个myfile.txt文件,并且该文件还有两个硬链接,和一个软链接
myfile.txt内容是5句"hello world"
在这里插入图片描述

接下来,我们尝试删除myfile.txt这个硬链接,此时,因为硬链接个数大于1,rm并不会删除源文件,只会将硬链接个数-1
在这里插入图片描述
myfile.txt删除后,my_hard和my_hard1这两个硬链接没有问题,硬链接个数确实-1,文件内容也还是5句"hello world",但是我们发现软链接失效了。

这是因为软链接内容存储的是绝对路径,类似~/lesson/mydemo/myfile.txt,当我们将myfile.txt这个文件名删除,软链接自然找不到,所以就失效了。

4. 硬链接的应用

我们知道目录也是文件,所以目录的inode结构体和普通文件的inode结构体是相同的,那么目录也会有其硬链接个数,我们创建一个目录,并查看其硬链接个数
在这里插入图片描述
我们发现目录一创建,其硬链接数就是2。那除了dir1这个硬链接,还有什么硬链接呢?
我们再通过ll -a -i指令同时显示隐藏文件和文件inode编号
在这里插入图片描述

这时我们想起来,.也指向当前目录,并且二者的inode编号相同,所以. 是当前目录的一个硬链接
既然 . 是目录的一个硬链接,那 . . 自然也是目录的硬链接,是上级目录的硬链接
在这里插入图片描述

我们知道,目录也是文件,这样文件就会像一棵多叉树,但是要想目录的上下级切换,就需要 .. 和当前目录的子目录名 . . 实现向上级目录的跳跃,子目录名实现向下级目录的跳跃
但是,除了. 和. .这两个硬链接,Linux不允许对目录做硬链接,因为可能出现环形目录的情况,可能会打破文件系统目录的有向无环图结构,可能创建目录循环。
在这里插入图片描述

结束语

软硬链接的学习大致如此,感谢阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_72563041/article/details/129950387