前言:上一章我们讲解了 inode,为文件系统收了尾,这几章我们充分地讲解完了文件系统的知识点,现在我们开始开始学习软硬链接了。
上一章我们介绍完了 inode ,我们再回顾一下?元数据:?
?
总共有七列,分别是模式、软硬连接数、文件所有者、组、大小、最后修改时间和文件名。?
?
上图中,红色圈出的就是 软硬连接数 了,目录dir为2,文件mytest.c为1.
我们刚才说了,可以使用 stat 文件名查看更多:?
软硬链接的区别:
软链接:是一个独立文件,有自己独立的 inode 和 inode 编号。
特性:可以理解为:软连接的文件内容,是指向文件所对应的路径
应用:相当于windows对应的快捷方式。
硬链接:不是一个独立的文件,它和目标文件使用的是同一个 inode。硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增 文件名 和 inode 编号的映射关系!
?创建硬链接(有inode):不是真正的创建文件。
?我们可以通过如下命令,创建一个文件的软硬链接:
$ ln -s 文件名 链接文件名 # 创建软连接
$ ln 文件名 链接文件名 # 创建硬链接
我们创建一个软连接,可以使用下面的指令:
$ ln -s 文件名 链接文件名 # 创建软连接
?比如我们创建一个 my.txt 文件,我们像创建一个 my.txt 文件的软链接,我们可以:
?
这就是软连接,my.txt 和 my.txt.soft 的 inode 是不同的:????????
????????????????????????????????????????
?下面我们来举一个实际的例子来体验软链接有什么实际的用途:
我们创建三个文件夹,在最深的文件里进行
代码演示:vim mytest.c
运行结果如下:
程序正常运行,这里我们在 d1/d2/d3 下直接 ./mytest.exe 就可以运行。
但是,如果我们如果想在外面运行这个程序就会很累,因为它的路径有点深:
?太麻烦了,所以这里我们就可以给它建立一个软连接,解脱双手:
$ ln -s ./d1/d2/d3/mytest.exe my.exe
?我们来运行一下 :
是不是很舒服??
现在是不是能理解一些了
对我们来说,硬链接是什么呢?硬链接其实非常简单!我们创建一个硬链接:
$ ln 文件名 链接文件名 # 创建硬链接
?
my.txt 和 my.txt.hard 映射的是同一个 inode:
?
硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增文件名和 inode 编号的映射关系!
删除的话可以直接 rm,但是我们还是建议使用专门的 取消链接 的指令:unlink?
$ unlink 链接文件名 # 取消链接
?这个 unlink 就是用来取消链接的,但它也可以用来删文件。
我们先重新创建一个硬链接,然后我们重点观察一下下面的 "数字":?
?
我们可以再多建立几个硬链接,你可以看到这个数字的变化:
?
什么是硬链接数?
你看这个 inode 编号,是不是有点像指针的概念?
硬链接本质就是该文件 inode 属性中的一个计数器 count。用来标识就几个文件名和我的 inode 建立了映射关系。简而言之,就是有自己文件名指向我的 inode (文件本身) 。
既然是一个独立的文件,inode 是独立的,软连接的文件内容保存的是指向文件的所在路径。
思考一些问题?
?思考:为什么创建普通文件,硬链接数默认是 1 ?
因为 普通文件的文件名本身就和自己的 inode 具有映射关系,而且只有一个!
所以默认的硬链接数为 1。那为什么目录是 2 呢 ?
我们知道,任意一个目录一定存在一个点或两个点: .?? ..
那么 ./ 为什么表示的是当前路径呢?因为 . 表示的就是 mydir,当前所处的路径!? ?
默认一个空目录创建一个 自己的名字 和 一个点,所以两个文件名指向它,所以是 2。
那么 .. 又是什么呢?.. 指向的是上级路径!
这就是为什么我们 cd .. 可以回到上级目录的原因,因为它可以指向上级目录。
感谢阅读!!!!!!!!!!!