Linux自学之旅-基础命令(硬链接和软链接)

Linux自学之旅-基础命令(硬链接和软链接)


前言

1.上节我并没有说命令,而是说了一些关于Ext4文件系统的简单知识,还简单讲述了Inode和Block的一些知识,还没看的请点击下方链接进入:Ext4文件系统

2.这一节不急着说命令,咋们继续来了解一些理论的知识,这一节我来说说硬链接和软链接的一些知识,之前我记得我也提过硬链接和软链接(硬软链接基本知识),不过之前只是简单的说说硬链接和软链接的一些基本概念,这一节我们来深入了解一下硬链接和软链接的特点和作用和区别


提示:以下是本篇文章正文内容

一、硬链接

首先大家还记得我们硬链接的一些基本概念嘛,是不是{
1.源文件和硬链接文件Inode和Block一致
2.源文件和硬链接文件同步更新且删除其中一个另外一个依旧可以用

}
1.那么我们来看看硬链接创建出来和源文件的区别:

[root@localhost ceshi]# 
[root@localhost ceshi]# ln /tmp/ceshi/y /tmp/ceshi/y.test
[root@localhost ceshi]# ls -lhi
总用量 0
148133 -rw-r--r--. 2 root root 0 1月  18 09:24 y
148133 -rw-r--r--. 2 root root 0 1月  18 09:24 y.test
[root@localhost ceshi]#

(我将硬链接创建在了本目录下,并用“ls -lhi”的形式查看当前目录下的所有非
隐藏文件的长格式信息还显示了他们的inode信息)
(这时候我们发现y.test这个硬链接文件和源文件长得一模一样,连Inode都一模一样,
那么这时候问题来了,如果他们的Inode都一模一样,那么我们找文件的时候,怎么
知道系统应该找哪个文件呢?)

*148133就是Inode

2.我们知道Inode是不保存我们一个文件名称的,我们的文件名称是保存在你的当前目录的Block中,通过你当前目录的Block我们可以找到你这个文件的名称然后通过名称找到对应的Inode,最后有了Inode
的指引,我们才找到你文件的原始数据Block。(也就是目录的Block保存目录下所有文件和目录的名称和Inode,而我们的文件的Block才保存着文件中的原始数据

3.当我们要查找“/tmp/ceshi/y“这个文件的时候,我们的步骤应该是这样的:
{

3.1.首先找到我们根目录的Inode(”/“目录的Inode号是系统已知的,默认为2),然后判断用户有没有权限访问根目录的Block,如果有权限则会通过根目录的Blcok找到我们的/tmp的目录名称和Inode号

3.2.通过/tmp的Inode号,我们可以找到/tmp的Inode信息,然后判断用户有没有权限访问/tmp的Block,如果有则可以通过/tmp的Block知晓我们/tmp/ceshi的目录名称和Inode号

3.3.通过/tmp/ceshi的Inode号,我们可以找到/tmp/ceshi的Inode信息,然后判断用户有没有权限访问/tmp/ceshi的Block,如果有则可以通过/tmp/ceshi的Block找到我们想要找的文件名称y和它的Inode号

3.4.通过/tmp/ceshi/y的Inode号,我们可以找到/tmp/ceshi/y的Inode信息,然后会判断用户有没有权限访问y这个文件的Block,有则会y的Block知道y这个文件的原始数据

}

4.那么说到这里大家应该都差不多懂了吧,我们的硬链接和软链接的Inode都一样的,假设你原文件的Inode为100,你创建出来的硬链接的Inode也应该是100,那么你访问哪个文件实际都是访问Inode=100这个文件。
所以这就是我们硬链接的原理:{

4.1:你修改源文件(y),硬链接文件(y.test)也会跟着一起改变

4.2:无论你删除哪个文件,另外一个Inode=100的文件还存在的话,相当于你这个文件还是存在的,除非你两个都删了,你这个文件才算真删了

4.3:硬链接不会独占一个新的Inode,它和你源文件的Inode一致,Block也一致

4.4:硬链接不能跨文件系统创建,因为另外一个文件系统中硬链接会有一个新的Inode

4.5:硬链接不能链接目录(也不说不能,你如果链接目录的话,那么你目录不仅要重新建立,你目录底下的所有文件也要创建硬链接,这样太麻烦)

}

**具体硬链接上面这些特点的实验的话大家自己去试试就好了,这里就不实验了(我懒,emm),硬链接的话一般不推荐使用,下面介绍一个经常用的软链接。


二、软链接

1.软链接的话更好理解了,不多废话,我们先来看看源文件创建软链接之后两个文件之间的差距:

[root@localhost ceshi]# ln -s /tmp/ceshi/r /tmp/ceshi/r.test
[root@localhost ceshi]# ls -li
总用量 0
148133 -rw-r--r--. 1 root root  0 1月  18 10:14 r
148134 lrwxrwxrwx. 1 root root 12 1月  18 10:14 r.test -> /tmp/ceshi/r
[root@localhost ceshi]# 

(相比硬链接,我们发现软链接的特征非常明显,首先Inode号不一致,
其次就是软链接后面会接”-> xx“来标识你的源文件在哪。)

--友情提醒一下:创建软链接的话源文件一定要写绝对路径哦亲,要不然会有问题的说

2.软链接大家就可以看成windows下的快捷方式,特征非常明显,还可以链接目录和跨分区链接,所以我们都是经常使用软链接的。


3.我们知道了软链接是独立拥有自己的Inode的,那么查找软链接的工作方式还是和硬链接一样的么?其实不是哦,软链接的Block中是不保存原始数据的(就是不保存你源文件里面的内容),那么软链接里的Block保存什么呢?其实软链接的Block是保存你源文件的文件名和Inode。


4.那么查找“/tmp/ceshi/r.test”这个软链接的工作流程是怎么样的呢
{

4.1.首先先找到根目录的Inode信息,然后判断用户有没有权限访问根目录的Block,有的话则可以在根目录的Block中知道/tmp的目录名称和Inode号

4.2.我们通过/tmp的Inode号,可以找到/tmp的Inode信息,然后判断用户有没有权限访问/tmp的Block,有的话则可以在/tmp的Block中得知/tmp/ceshi这个目录的名称和Inode号

4.3.我们通过/tmp/ceshi的Inode号,可以找到/tmp/ceshi的Inode信息,然后判断用户有没有权限访问/tmp/ceshi的Block,有的话则可以在ceshi这个目录的Block中得知/tmp/ceshi/r.test这个文件的名称和Inode号

4.4.通过/tmp/ceshi/r.test的Inode号,我们可以找到r.test这个文件的Inode信息,然后判断用户有没有权限访问r.test这个文件的Block,有的话可以查看r.test的Block,然后我们发现r.test这个文件中并不存在实际数据,只存在源文件r的文件名和Inode号

4.5.然后我们通过r.test提供的r的Inode号,我们可以找到r的Inode信息,然后判断用户有没有权限访问r的Block,有的话则可以真正查看到r这个源文件的数据。

}

5.所以说我们的软链接它的Block本来就不存我们原文件的实际数据,它只存着我们源文件的文件名称和源文件的Inode号,那么我们来说说软链接的特点
{

5.1:修改源文件(r),我们的软链接文件(r.test)也会跟着一起改变(因为软链接指向源文件嘛)

5.2:删除软链接的话源文件可以继续用,但是你删除源文件的话软链接就会一起失效(因为软链接指不到源文件数据了嘛)

5.3:软链接拥有自己的一个Inode和Block,都和源文件不一样(软链接Block存源文件的文件名称和Inode号嘛)

5.4:软链接可以链接目录

5.5:软链接可以跨文件系统进行链接
}

*具体软链接的特点的测试也请大家自己去测试啦(还是我懒,emm),我们大家的话用软链接会用的多一些,毕竟特征明显还可以链接目录和跨分区链接嘛。


总结

本节我们讲述了软链接和硬链接的一些详细内容,算是充足了一下课外知识吧,我之前和老师系统学习Linux的时候,我们老师好多都是不讲的,很多都靠我自己自学然后深入了解的。所以如果说大家跟着自己的老师一起系统学习Linux的话还推荐大家经常在网上看一下Linux的一些其他课外知识呢,这样你会对Linux的整体会更加了解的。那么本次我们学习了{
1.硬链接:创建出来和源文件的Inode、Block一致
2.软链接:创建出来和源文件的Inode、Block不一致
}

我是结花,我们下次见。

猜你喜欢

转载自blog.csdn.net/qq313088385/article/details/112761509