(23)Linux的软硬连接

前言:上一章我们讲解了 inode,为文件系统收了尾,这几章我们充分地讲解完了文件系统的知识点,现在我们开始开始学习软硬链接了。

软硬链接

1、Linux 下的快捷方式:软链接 

上一章我们介绍完了 inode ,我们再回顾一下 元数据: 

 

总共有七列,分别是模式、软硬连接数、文件所有者、组、大小、最后修改时间和文件名。 

 (23)Linux的软硬连接_第1张图片

上图中,红色圈出的就是 软硬连接数 了,目录dir为2,文件mytest.c为1.

我们刚才说了,可以使用 stat 文件名查看更多: 

(23)Linux的软硬连接_第2张图片

软硬链接的区别:

软链接:是一个独立文件,有自己独立的 inode 和 inode 编号。

特性:可以理解为:软连接的文件内容,是指向文件所对应的路径

应用:相当于windows对应的快捷方式。

硬链接:不是一个独立的文件,它和目标文件使用的是同一个 inode。硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增 文件名 和 inode 编号的映射关系!

 创建硬链接(有inode):不是真正的创建文件。

 我们可以通过如下命令,创建一个文件的软硬链接:

$ ln -s 文件名 链接文件名    # 创建软连接
$ ln 文件名 链接文件名       # 创建硬链接

2、创建软链接

我们创建一个软连接,可以使用下面的指令:

$ ln -s 文件名 链接文件名    # 创建软连接

 比如我们创建一个 my.txt 文件,我们像创建一个 my.txt 文件的软链接,我们可以:

(23)Linux的软硬连接_第3张图片 

这就是软连接,my.txt 和 my.txt.soft 的 inode 是不同的:        

                                        

 下面我们来举一个实际的例子来体验软链接有什么实际的用途:

(23)Linux的软硬连接_第4张图片

我们创建三个文件夹,在最深的文件里进行

代码演示:vim mytest.c

运行结果如下:

(23)Linux的软硬连接_第5张图片

程序正常运行,这里我们在 d1/d2/d3 下直接 ./mytest.exe 就可以运行。

但是,如果我们如果想在外面运行这个程序就会很累,因为它的路径有点深:

(23)Linux的软硬连接_第6张图片

 太麻烦了,所以这里我们就可以给它建立一个软连接,解脱双手:

$ ln -s ./d1/d2/d3/mytest.exe my.exe

(23)Linux的软硬连接_第7张图片

 我们来运行一下 :

(23)Linux的软硬连接_第8张图片

是不是很舒服??

(23)Linux的软硬连接_第9张图片

现在是不是能理解一些了

3、创建硬链接

对我们来说,硬链接是什么呢?硬链接其实非常简单!我们创建一个硬链接:

$ ln 文件名 链接文件名       # 创建硬链接

 (23)Linux的软硬连接_第10张图片

my.txt 和 my.txt.hard 映射的是同一个 inode:

 

硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增文件名和 inode 编号的映射关系!

4、软硬链接的删除 

删除的话可以直接 rm,但是我们还是建议使用专门的 取消链接 的指令:unlink 

$ unlink 链接文件名   # 取消链接

(23)Linux的软硬连接_第11张图片

 这个 unlink 就是用来取消链接的,但它也可以用来删文件。

5、硬连接数 

我们先重新创建一个硬链接,然后我们重点观察一下下面的 "数字": 

(23)Linux的软硬连接_第12张图片 

我们可以再多建立几个硬链接,你可以看到这个数字的变化:

(23)Linux的软硬连接_第13张图片 

什么是硬链接数?

你看这个 inode 编号,是不是有点像指针的概念?

硬链接本质就是该文件 inode 属性中的一个计数器 count。用来标识就几个文件名和我的 inode 建立了映射关系。简而言之,就是有自己文件名指向我的 inode (文件本身) 。

既然是一个独立的文件,inode 是独立的,软连接的文件内容保存的是指向文件的所在路径。

思考一些问题 

 思考:为什么创建普通文件,硬链接数默认是 1 ?

因为 普通文件的文件名本身就和自己的 inode 具有映射关系,而且只有一个!

所以默认的硬链接数为 1。那为什么目录是 2 呢 ?

我们知道,任意一个目录一定存在一个点或两个点: .   ..

那么 ./ 为什么表示的是当前路径呢?因为 . 表示的就是 mydir,当前所处的路径!   

默认一个空目录创建一个 自己的名字 和 一个点,所以两个文件名指向它,所以是 2。

那么 .. 又是什么呢?.. 指向的是上级路径!

这就是为什么我们 cd .. 可以回到上级目录的原因,因为它可以指向上级目录。
(23)Linux的软硬连接_第14张图片

感谢阅读!!!!!!!!!!!

你可能感兴趣的:(Linux学习之路,linux,运维,服务器)