00:00
了文件管理的呃,基本操作啊,那我们提到了常见的一些这个简单的对文件的各种,然后增创建啊,这个删除移动复制等等啊,那今天呢,我们继续来学习文件管理的其他操作。咱们上次讲了一个非常危险的命令,RM命令,对吧?啊,它可以删除这个。啊,我们系统中的所有文件啊,包括。更加的。磁盘上的所有文件都可以干掉,那么上次呢,正好刚删完系统就崩溃了是吧,所以这个可见这个命令的危险性,所以在生产中呢,这个RM命令。建议大家还是把它。改成比方说MV命名要用别名的方式,把RM定义成MV的别名。那这样的话呢,我们如果不小心删错了啊,至少我们可以用MV再把它移回来。再找回来,所以可以考虑呢,接下来大家想一想一个问题,就是如何来定一个别名。
01:06
啊,定一个RM的别名,我们都知道别名的优先级比内部命令外部命令就要高,所以你一旦定义别名,它就会用别名,而不用它的原始的命令。所以你可以考虑定一个别名,也叫RM。他的工作并不是真的删除。啊,用新别名来代替旧的RM命令,它起到的作用呢,就是移动到一个比方说临时目录下。这样的话呢,万一你删错了,大不了从这个目录找回来就行了。大家记得前两天我在那个群里头发了一个咱们已经毕业的39级的同学。它那个实际上就是执行了一个MV命令。把根下的数据都给移走了。啊,幸亏是移走,后来他移回来就好了啊。所以这个命令的危险性呢啊,我不用再强调,希望大家能重视。
02:03
当然,我知道再重视也没有用,总有毕业的同学还会重复,复到这个重,重蹈覆辙啊。希望有一天重蹈覆辙的时候,可以给我发个消息是吧,分享一下我的快乐,你的快乐,你的悲剧,好了,那咱们上次呢,讲了RM命令啊,这个命令的作用呢,可以删除文件。那事实上即使确实破坏性很强,但实际上在真正的生产中。如果想真的把文件删了,用RM命令并不能彻底删除。那这个背后的逻辑,我们稍后会给大家说一下啊,那有些生产环境中为了删除文件。彻底的清理文件,RM并不是真正的一个很安全的清理文件的命令。事实上,即使我们用R命令删除文件,仍然可以通过一些手段。
03:04
来恢复被删除的文件。啊,有人说那这样我就放心了,我以后就可以随便用RM命令删数据了,对吧。当然也并不是这样,恢复数据是有需要时间的。恢复数据是需要成本的。所以如果你删了文件。你可以恢复,但是怎么恢复呢?你可能会找一些专业的数据恢复这样的公司来做。啊,但是人家把数据恢复过来需要不需要掏钱呀,有没有费用啊,中间是不是要停服务啊。那这些都是巨大的成本。那当然说到这儿,在有些企业里面,为了彻底的安全的清理数据。我们也可以考虑用一些更加安全的方法,比方说这个命令。这个命令呢,它可以来比较安全的彻底的把文件清理掉。
04:03
它的逻辑呢,就是它删除文件并不是直接删,而是采用覆盖的方式,比方说把原有的文件用零来清空。用零来覆盖,或者用一些随机字符把原有的数据覆盖掉。覆盖之后再把文件清理掉。这样的话,这个恢复的难度基本就很难很难了。啊,那大家可以看一下这个命令做一个了解啊,作为一个了解就行了,这个命令呢,只有在特定的场合下啊,你真的是想山库跑路的时候,想彻彻底底的清空,你就可以用这个命令了,那这个命令呢,我们可以看到这里面有一个选项Z呢,表示最后一次用零来覆盖。那么V是能够显示过程,U呢,覆盖之后最后还要把文件删掉,N呢是多少次?啊,默认是三次,所以呢,我们可以看到这个地方是五,那么用这个命令,它就会不断的覆盖覆盖覆盖,然后五次,最后呢把它删掉,所以大家可以看到这边显示的时候,第一次用随机字符,第二用零,第三应用随机字符。
05:16
第四次用FF覆盖,看到没有,不断的反复几次之后,那这个数据恢复的可能性就非常低了啊,当然最后呢,他又把这个文件给删了,所这个文件就没了啊,所以如果说比方说你呃身边有一些敏感数据,比方说你的珍贵的隐印资料什么的照片啊,是吧,不想留下来,想彻底的删掉,你要是用R命令删很有可能。会被别人恢复出来,大家知道陈老师的照片就这么恢复的是吧?嗯,所以呢,如果你要彻底的清空清理,哎,你可以考虑用这个,这个我就不试了啊,这个东西大家做一个了解就行了啊。啊,具体的执行过程这边我有截截啊截屏大家可以了解好,那么接下来呢,我们来看一下这个目录的操作,那目录的操作呢,有一个脆命令,这个脆命令呢,它也是非常常用的一个工具,可以显示目录结构。
06:14
那我们可以知道通过去来了解这个目录到底有几层啊,我们可以看一看效果。那比方说我这儿有一个。ETC目录,这个ETC目录里面的内容非常多,如果我们直接用,你就可以看到它的整个目录所有结构。啊。当然这个树呢,树根是在左侧,树根在左侧啊,因为它竖着树根在上面画的话,它会画不出来画的。因为这个数会比较大,因此呢,它是横着的一棵树,倒着的一棵树啊这样来显示,当然这个tree呢,我们也可以加一些选项,比方说我们只显示目录。你加上D,这样的话,它就不显示文件了,那默认情况下呢,它会把文件什么的也会显示出来,所以如果我只显示目录,只加目录这样的话就可以了,看到吗。
07:09
当然我们看到还有一些蓝色的这个浅蓝色的这个就是所谓的链接文件啊,这个我们今天马上就会给大家讲了,那这就是他的这样的一个基本功能,此外呢,我们还可以指定层,指定第几层,这也可以啊,比方说我们用。杠L,然后我就写一那第一层,发现第一层好像什么也没有,第一层呢,看来就是自己呗,哎啊,当然我这忘了写了这个ETC了啊,再加上啊,那第1C第一第一层,第一层就是它的直接的目录啊,直接的目录,然后呢,我们可以看到ETC下有这么多的目录,只看第一层,当然你也可以接下来再往下往里走一走是吧,哎,第二层第三层这都可以的。那这还可以支持pattern,这个pattern呢,指的是通配符啊,通配符不是正则表达式通配符,你可以写一些通配符来进行一些过滤。
08:05
好,那么这个脆呢,我们平常有的时候去看一个目录结构,可以用它来实现。那还有就是创建文件夹,这个创建文件夹呢,这也是我们用的非常多的一个命令叫make,这个make呢,它可以根据你自己的需要来指定在某个目录里创建,比方说我创建一个第一目录,那这样的话呢,我们这个目录就创建出来了。啊,当然我能不能一下子把它整串都创建出来呢?当然我要这么创建的话呢,有一个问题,就是我想创建第四,但实际上呢,我这上面的第三第二是不是还没有的。那这样的话呢,你直接创建它就会报错。不能创建,那如果你想连副目录,如果不存在,顺便把它创建出来啊,那么只需要加个P选项就可以了。P选项就是自动的把副目录创建出来,副目录不存在,那它就创建,哎,所以这样的话呢,我们就省去了一个一个创建的过程,加上P,那另外呢,我们还可以观察到创建目录的过程,可以加一个V。
09:15
显示详细过程看到吧,哎,我们可以加个V。诶,咱们来看这里面就显示出了它的目录结构啊,所以这个。MKDA,事实上它还支持MM呢,表示权限,不过因为权限我们还没讲,所以这块呢,我们大概先知道就行了,有这样的一个选项,那我后面讲到权限的时候,我们就可以用这个make后面加上权限了。好了,那接下来呢,我们创建目录之后,那我们要删除目录,删除目录实际上大家马上想到了RM命令是吧?RM命令呢,删什么都可以删,删根是不是?哎,大家最熟悉了,那RM戴尔这个命令就是删目录的,专用于删目录,不过呢,这个删目录它只能删空目录。
10:06
也就意味着,如果里面有内容,哪怕有一个文件或者是一个文件夹啊,总之是不能删的啊。那所以我们这个地方这个第四是空的啊,当然那第四真的是空的吗?那事实上呢,第四。嗯。如果说你这样看的话,原则来讲它算是有东西吗?那这个点实际上他自己嘛,那两个点是谁呢?是它的父母,那实际上也就是第四是不是里面确实是没有其他资源的,对吧?所以我们现在来删除第四,用RM de尔后面跟上这个第四的完整路径。当然这个路径呢,你也可以写相对路径啊,那具体在这呢,我用绝对路径比较方便啊,那么这样的话呢,第四就删掉了。啊,这就是删除空录。当然我们说删除空目录,那万一要不空,比方说我如果用RM戴尔,我去删第一,我们都知道第一呢是不是空路,因为里面有个第二。
11:11
对吧,它有内容,有内容你看。他说directly not empty啊,不是空的不能删,所以呢,我们现在要删的话呢,你至少得保证它是空的,所以这个命令可以说是个基类命令啊,大家都知道RI命令多痛快。是不是管你空不空呢?直接干掉了,所以RM戴尔这个命令相信大家以后工作中很少出现,因为有了RM。是吧,有有了RMRM管他空不空都能删啊。啊,大家知道就行了,当然这个命令也有一个杠P选项,然这个杠P选项。我们刚才用make de有一个杠P,那么RM de尔的杠P这个大家知道是什么意思吗?你能猜到它的作用吗?
12:00
发挥一下大家的想象,想象力啊。那这个学习呢,需要有一定的扩展思维能力,因为你这样的思考的越多,那么你对于很多技术就融会贯通了。那我们用make d的杠P呢,是发现副目录不存在,顺便把副目录建起来是吧?那我们RM代尔它是删目录,但是删只能删空目录。那但是我要删了副目录,那这个就完事了吗?那杠P呢,它也是关心附目录。副目录就是我删了第三以后,如果发现第二页空了,那我就往上接着删,把第二页删了,如果第二页空了,呃,第二删了以后,第一页空了,那接着往上删。它就是从下往上升,听了吧,啊跟这个make de呢,正好下反过来,那个de是从上往上啊一级级的建建父目录,建完父目录建子目录,这个呢,删的时候呢,他先从子目录删,删完了以后逆着往上删,删父目录是这个意思。
13:03
当然他这个不可能一直一接扇上去,那扇到头扇到头它总不可能是空的吧,那比方说data。啊根不可能是空对吧,但是贝塔可能是空,但是贝塔能删的了吗。大家看他确实已经删到了贝塔啊,第二第三第一这些应该都没了,但是为什么data塔没删了,为什么?大家知道为什么吗?它显示的是忙,那为什么忙啊啊,就他很忙吗。这是为什么呢?Data特殊在哪啊?Data里面有东西吗?刚刚我们说了这个,你看确实也没什么东西,为什么他就删不了,那我们拿出我们强大的。RM,来来,干一干好像也不行啊。我发现这个东西真的删不了,是不是删不了,所以大家聪明的发现哦,为什么删不了呢?因为贝塔是一个挂载点。
14:03
挂载点是不能删除的。啊,就是留了个留了个文件夹名而已,当然你把里面数据删了,光留个孤零孤零零的文件夹,一个挂载点,是不是也没什么实际意义了。对吧,啊,当然你要想删了,我就想把data删了,那怎么办呢?那除非你把贝塔设为不是挂在点。啊,把它的挂载关系呢取消啊,这个我们相信大家这个命令是可以看得到的,那在这儿可以看到SD3是不是关联到data目录了,那如果我们把SD3和data塔的关联关系取消了,是不是data塔就可以删了。对吧?呃,当然这个我们就不取消了啊,我们后面会讲这个磁盘的管理,到时候会给大家讲怎么去把一个设备挂载到关联到一个目录里啊,那到时候你会挂载也会删除,也会取消。好,那这就是他的一个理念啊。啊,这个机器果然很慢啊。我这个感觉开了很长时间了,这个才打开似的是吧,是不是得记起我这个新买的笔记本了,我这本背来背去的太麻烦了,用咱们张老师的这个笔记本就可以啊,他这个背的也不错。
15:17
嗯,好,那这是刚才咱们给大家讲的这个r de啊,知道就行了啊,但是这个命令说实在的用的不多,诶大家看我已经提前的把刚才我们提出的要求已经在这写好了,就是用自己定义的RM别名。来代替原始的R命令,大家看看这个命令能看懂吗?实际上每个命令都应该能看懂了。啊,大家虽然学了第三天是吧,但实际上你们已经具有了呃,一定的技术能力了,所以大家看能不能看懂啊。那当然这个地方呢,有些技术我们可能还没有完全的给大家做完介绍,不过呢。
16:03
大家前面应该学过一些东西啊,所以对这个东西应该稍微猜也能猜到,至少我们以前学过什么数学上什么等于什么什么之类的数学上这个叫什么呀,变量赋值吧,比方说X等于十,Y等于100,这个大家学过的初中是不是就学过,所以呢,这个戴尔呢,实际上就是一个变量。这个变量等于什么呢?等于的不是一个数字,而是一个字符串。那这个字符串的内容就是data塔下的backup,当然这个东西我们有解释吗?是不是就是时间当前今天的年月日加十分秒对吧?哎,凑成了一个完整的文件夹,然后付给了de尔,付给了de尔以后分号是不是接着执行的意思,然后创建这个戴尔?啊,Dollar呢,De就表示的是这个de的变量的名称对应的值,这个Dollar呢,虽然大家我们还没有讲过,但是至少我们前面见过一些Dollar开头的。
17:06
比方说test呀,对不对,比方说share呀,是不是这我们都见过啊,所以实际上这些都是变量啊,当然变量我们在share脚本那章会具体详细给大家讲,然后make,这不就把它建起来就行了。建起来以后呢,这是什么东西?MV这个T是什么东西啊。T是什么东西?哎,T呢,我们好像平时不太用,但是在这还用用上了,那这个T就是MV命令它的一个选项而已,其中用到的就是第三种。风格的MV,那么这个第三种MV呢,说的就是把你要移动的若干文件,因为文件可以很多,后面一个一个跟上,那么移动到哪去呢?移动到目标文件夹,这个目标文件夹就是跟在杠T的后面。所以那这样带来的好处就是我们定义了这个别名之后,我们将来RM我去执行的时候,我是不是就是执行的这个,比方说RM后面我跟上一个文件,当我执行这个的时候,这个RM是不是就是我们定义的别名?
18:16
就这这一大串,然后呢,你把你要删的文件跟在后面,那是不是就类似于相当于我们把要删除的文件,哎,就是移动的文件放在了后面。所以利用这个特点就可以起到移动的效果,当然咱们也可以来试一试,把这个命令直接复制粘贴一下,当然你们就不要复制粘贴了啊。你们也复制不了是不是?好定义好了,定义好以后啊,我这看一下,我这建一些文件,比方说A文件啊,B文件我建两个。啊,然后呢,我一下子可以删两个,可以删两个,删的时候实际上最终移到哪去了,移到这儿来了,所以我们待会儿呢,进到这个目录里看看是否。
19:03
能够出现贝塔下的,你看是不是自动生成了年月日十分秒进来有了吧,这就是一个很简单的删除。相当于垃圾箱这样的一个效果,知道吧,啊,当然这个命令里面,呃,这带有了一些这个斜线,因为这个冒号呢,它这个在系统中啊,认为它是一个特殊符号,所以呢,你可以考虑在这呢啊把这个T呢给它改一下,比方说改成横线连接。改成横线连接,这也可以啊。这样的话,省得这些文件夹再有一些特殊符号的转移。好,这是我们刚才给大家介绍的一个RM命令啊,这个命令呢,虽然说做的还不是特别完善,但是也能够满足一般的这个删除需要了,所以工作中的话,你们上了班以后,我觉得有些需要重视的地方,比方说赶紧上来把RM是吧改一改,定义成别名。
20:02
啊,咱们最早给大家说过。41期的同学知道,至少就是咱们有很多同学。犯了这样的删除命令的错误,而且有的同学犯的还特别快,今天上班明天就删库的那种啊,特别快啊,这个还有同学,你像39期还有个同学连没上班的就已经开始删别人的东西了啊,他就是直接他有一个歌,他这个歌是做运维的。然后想带带他到单位里面,让他熟悉一下生产环境,他不是没见过吗?他去了以后就给人删东西,还没上班呢就开始删除了啊,这个同学,不过现在上班了已经。呃,因为删过了,所以他就理解了,理解了所以他就不新鲜了,所以以后他就不删了。是吧,呃,也许你们将来总是要经历一下的,是吧,不经历的话总觉得人生不完美似的,好,那这是其他命令啊,这个练习,这个练习你们下来自己看看就行了啊好了,那么接下来呢,我们来介绍一下文件的。
21:07
它底层的工作逻辑,那么在刚才呢,我们已经给大家讲了一些基本命令,那这些命令呢,到底底层我们在复制移动,包括删除,那么它到底发生了什么,这个呢,我们希望做一下了解,因为你只有了解了这样的底层工作逻辑之后,我们才能更好的管理。啊,原理和动手的实验实践,这是二者不能偏废的啊,我们既要学会动手练习,也要背后懂它的逻辑。那接下来我们来看一下文件的原数据。和节点的结构啊,那么我们在上次课实际上已经曾经给大家说过。在一个硬盘上面存放的数据呢,可以简单的分成两个内容,一个呢是文件的原数据,一个就是文件的数据本身。
22:05
那所谓的原数据Meta data就存放了文件的各种属性,比方说文件的三个时间。文件的类型、权限、所有者大小等等,这都算它的属性信息,那事实上我们有一个命令可以非常详细的展示文件的原数据,大家是否还记得这个命令啊?哪个命令啊。呀,这个呃,聊聊天圈里面看不见人说话了啊,见着人了就不再聊天了啊啊你们在这个腾讯课堂里,可以在咱们想象一下还在直播嘛,是吧?啊你还可以在里面聊天啊。习惯这个界面了,感觉没人说话,觉得怪怪的,尤其后面的同学,后面同学离得太远了,看不见你们,你们就可以在那个是腾讯课堂的聊天,聊天窗口里面可以发个表情包之类的。
23:05
好,那刚才我说的这个命令哪个打一下,诶,我看有人打出来了。哎,非常好啊,你看还是这个,呃,这个陶气同学啊,虽然我看不见你是吧,离得比较远。好,你看这个命令,相信大家记得state命令,这个命令呢,可以显示文件的很多元数据属性。那包括咱们强调过的三个时间,这三个时间大家还能敲出来吗?我看看你们打一下字啊,这个因为你们说话的话,说实在的我也听不清到底来自于谁说的话,所以你还不如打个字,打个字的话顺便动一动,省得困。哎,非常好啊,非常好。啊,同学们这个还都印象,嗯。三个时间,那这些呢,都算咱们文件的原数据啊,那么这个原数据它是存放在一个专门的。
24:01
啊,空间中这个空间它是逻辑上有一个叫节点表,叫ino的表,Ino的这样的一个表,这个ino的表它存放的内容。存放了文件的各种原数据信息,那么它的结构是什么样子呢?就是这个样子,大家看。这个元数据我们竖着化啊,竖着化。好,这111竖一竖一竖列就代表着一个文件的元数据。那包括文件的权限,文件的所有者,就是张三的文件,李四的文件,然后文件的大小,文件的三个时间戳。那当然光源数据还不够。因为用户访问的不仅仅是希望得到文件的属性,更多的是希望得到文件的数据内容。所以我怎么去找到文件在磁盘上存放在哪啊?那我们在最早给大家说过,一个硬盘空间可以粗略的分成原数据的存放空间和存放数据的真正空间。
25:13
那么原数据里面存放了元数据。哎,那么但是我们真正要存放找数据的话,我要通过某个地方找到磁盘上存放这个数据的位置,靠什么呢?就是指针。这个指针就相当于描述了我们数据存放的一个具体物理位置。啊,写了一个地址,然后你通过这个地址就可以找到真正存放数据的位置了。而这个存放数据的指针,它有多种指针,我们看到有直接指针、间接指针。啊,间接指针的间接指针,咱们叫双重间接指针,甚至还有三重间接指针。那这个指针就是一个地理位置,它描述了我们磁盘上存放数据的。
26:03
位置。那么这个直接指针就是直接告诉我们数据在哪放。啊,比方说我这儿有一个数据。里面放了这个一定的数据,比方说放了1K的数据。那这个1K的数据,我通过这个直接指针来直接指向它。假设这个是在磁盘上的某某某地方,那我就写了它的位置,所以通过这个直接指针,哎,按照这个路径直接就找到它了。找到它,我就可以得到这个数据了。当然,这个直接指针,它并不是可以描述所有的数据的。因为直接指针只有12个。也就是说,我们这儿有12个直接指针。也就是意味着每个指针指向一个数据的空间,而每个数据的空间它的大小是通常是固定的啊,是4K,也就是这个地方,它是4K的一个块。这个一个一个空间,咱们叫一个块,哎,那这个块呢是4K,那4K的话最大是4K啊,也就是说我的数据呢,最多也就放4K,再多了我放不下了,这一个数据块。
27:12
我们就放4K。4K当然,那如果不到4K,那好说不到4K那就往里放着,就那就放着呗,浪费嘛啊,比方说我这只有1K,那我这个块有4K,那1K我只有1K,那我就浪费3K,浪费3K浪费浪费吧,是吧,哎,这个。为什么我们要买别墅啊,对吧?那我住个别墅就我几个人住啊,那并不浪费是吧?啊,多多宽敞啊。啊,那这个里面只放了1K的数据。啊,那就这样了,那那如果大了的话呢,比方说我这个数据是6K了,那6K的4K放不下了,那怎么办?那再来一个呗,再来一个4K。再来个4K,那这两个8K了,是不是存放6K的数据已经放下了,这放4K,这放2K是不是就放下了。
28:00
当然这个是两个数据块,两个数据块,这个数据块咱们有一个指针已经告诉他位置了。那这个四块4K是另外一个数据块,是不是还又得消耗一个指针来表示它的路径啊?对不对,哎,那所以我们需要好几个指针,那至少我们6K需要有两个指针,那当然大家想过了没有,那我如果我这个数据是个40K的。40K的,那我需要几个块啊,那显而易见是十个块,我就要十个块,那十个块是不是就十个指针,对不对,十个指针,哎,那我们在这儿呢,只有几个指针呢?只有12个指针,也就是最多只能表达多大的空间?那一个是4K,一个指针指向4K,那么12个最多也就是48K。对吧,也就是说低于48K的情况下,我们用这种直接指针是可以直接找到的。但是如果你太大了,超过48了,那直接指针就不够了,没那么多,因为我们这个空间只有12个。
29:05
这二个是直接指针。那再大了我们就没法表示了,那怎么办呢?那我们就来个间接指针。那间接指针什么意思呢?这个数据块不是让你的直接指针直接指向,而是它生成了一个间接指针的块,这个块呢也是4K,不过呢,它不放数据。它存放的是指针。这个它指向一个指针块,注意这个4K是个指针块,它里面它是一个指针,消耗四个字节。所以大家想我总共是4K一个指针块。一个指针需要消耗4K,那就意味着它有多少个指针?分成了几个指针的小区块呢?是不是1024也是1K的嘛,1000个,那比方说我们就这么画一下,哎,我就这么画一下。
30:01
啊,切成了好多好多,1000多个吧,1000个1024个。小块是吧,这一个小块,假设我调调这个小块,这个小块是个指针,它占了4T,然后让它指向什么呢?指向数据块。这个是财神存放数据的地方。然后这个四题。啊,那当然,那我这儿还有一个。指针我再指向一个数据块,这是64K。所以大家想这里面有几个块啊。1K各块,那么1K个块一个一个指针指向4K,所以它最多能存放多大数据啊?是不是就是4K乘1K。是不是啊?一个数据块是4K,它一个小指针指向4K,有几个指针呀。1K1K个嘛,也就1024个嘛,对不对,就是1K嘛,11K不就是1024嘛,所以1024个小块,1024个小块,而1024个指针指向分别指向各自的4K,是不是就是4K乘1K。
31:13
对不对,算下来多少KK1乘就是兆了嘛,是不是就是四兆。这个数学很困难吗?不困难吗?啊,这个图画的虽然不美吧,但是应该能看懂吧啊。好相信大家,那也就是说我们这边有,当然我这没画那么多啊,就是假设就是这里面有4000,呃,就是有1000个块,1000个块一每个小块它里面有一个指针指向一个自己的数据块。所以呢,就是4K乘以K4兆。所以用间接指针可以表达四兆。的数据,当然在前面还有48K,也就是说如果我的数据是介于48K到四兆之间,我们就需要用什么呢?用间接指针。
32:04
理解了吧,哎,光这些指针已经表达不出来了。啊,相信大家能看听懂啊,当然如果一时听不懂,那你先放一放,估计这个脑袋有点晕是吧?啊,那么当然我想大家接下来我再往下说,你应该就可以扩展一下思想了,那如果四兆的数据也放不下,比方说我来了个十兆的数据呢,对不对?那我想大家应该马上就想到了,是不是间接指针不行了,那我们就来个间接指针的间接指针对不对啊,所以就出现了双重间接指针,那双重间接指针那就是说它这个指向的是指针块,它指向的还是指针块,听懂了吗?呃,两个都是间接指针,然后最后才指向的是数据块,但是我们这个4K。这个4K一个指针块占四四个字节,所以它是不是就可以指向指向1000个。
33:03
指针块。是不是它可以指射,而这个每一个指针块又是。又再掷1000个。所以大家想过没有,那这个最终表达的数据是多大?这个是4K一个块,那么这个有多少个1K个,这有多少个1K过,所以那最多就是1K。乘41K再乘什么?4K多大?G,四个G是不是理解了吗?当你的数据超过四兆以上,在4G以内,那它就要用到双重间接指针。哎,当然,那我想再往下,那不就一样了吗?那我想我不用算,那就是三重间接指针可以表达多大的数据啊。四季再乘以。1T多少?4T是不是?
34:05
是吧?啊,我不用画了啊,这个相信大家。灵光一闪,能想通的,想不通就先这么着吧啊。啊,大概就这个例子,当然我这举的例子呢,只能说它是一个ext,这种文件系统的工作逻辑,并不是所有的文件系统都是一模一样的。我们大概描述一下这个原理就行了,因为我们都知道世界上的文件系统太多了,我们现在看到的是E4,事实上还有XFS,对吧?我们Windows里面还有fat文件系统。还有NTFS文件系统,每一个文件系统的工作逻辑都不太完全一样,但是它背后的原理都是相通的。我们这儿给大家讲的是ET的文件系统的工作逻辑啊,当然这个东西呢,大家理解就行了啊,啊这就是我们给大家说的啊,文件的原数据和数据存放的关系。
35:05
所以既然明白了这个道理以后呢,我们发现如果文件比较大的话,它是通过间接指针,甚至是间接指针的间接指针才能找到,所以大家可以想象是不是找起来有点慢呀。因为他是通过曲线救国的方式。辗转反侧了好几次以后才能找到的,是不是?所以睡不着觉的时候,你就可以看看这个图。啊,睡着效果特别好啊好,那这个是我们给大家讲的指针的逻辑啊,希望大家能听明白啊,当然这个东西。行业化只是一个大概的工作逻辑啊,因为不同的文件系统,它的工作特性并不既然一样。好,那么接下来呢,咱们来看一下在目录里面,这个目录呢,它是一个特殊文件,说到这儿我们回忆一下咱们现在学过几种文件类型,分别是什么?那么大家在聊天框里打一下,我看你们还记不记得。
36:05
快速的打一下,你们都都打一下这个顺便。动手试试,当然你要是完全记得,那可以不答啊,七种是吧,七种这个是面试题里面经常问到的啊,面试题里面诶,你看。这个魏瑞同学都打完了啊,这个是这个同学都复制粘贴出来了是吧?哎,你这个是怎么复制粘贴的呀?啊,我那个文档不是不允许复制粘贴吗?啊截图啊截图,然后那个用那个文字文字啊可以可以这个可以识别是吧?啊好聪明啊啊太聪明了你。啊,那这个就是我们文件的类型,那么目录呢,它也是一种特殊文件。那当然这个目录里面的存放的内容是什么?它和我们一般的文件都不一样,那么目录它存放的是文件列表。
37:01
我们都知道一个目录存放的不就是里面的好多文件吗?那并且还存放了这个目录里面文件列表,以及每个文件对应的节点的编号。说到这个节点编号,那前面呢,我们曾经看到过原数据里面它包括文件的。一个属性信息,这个文件的属性信息里面,它并没有体现出文件名称,大家注意到了吗?这里面没有文件的名称。那么这个文件的名称是没有的,那事实上呢,这里面它有一个文件的节点编号,这个节点编号就像我们每个人的身份证号一样。每个磁盘上的文件都有一个与众不同的节点编号啊,就像每个人都有一个与众不同的身份证号。那么在Linux文件系统中,就是根据这个文件的节点标号来加以区分,到底咱俩是不是同一个文件,就看这个节点编号,节点标号不一样,那就不是同一个文件。
38:05
当然身份证号,那如果是同一个,理论上就同一个人,当然我们只能说理论是吧,早期的时候这个身份证有的时候经常重啊,造成很多人的困扰,现在应该不会有这个问题了,是吧,现在二代身份证呢,应该啊消除这个现象。那么I诺的这个编号呢,在哪呢?我们可以通过命令可以看啊,我们用state命令就可以看到。好,大家看在这儿有一个所谓的节点编号,那看哪呢,这。叫inold啊ID这个inold呢,就是index node,就是索引编号。那所以编号是每创一个文件就会有的,比方说我们在这个下面,我把这个目录删了啊,哎呀,这个还是别名了。那这个咋办呀?我就想删了,咋办呀?
39:04
是吧,把他的。取消吧,因为我上课还是经常要删铺的啊,所以这个还是可能取消吧啊好,那现在我们创建一个文件,比方说叫F1。那这个文件呢,我们可以看一下它的。节点标号,大家看131。啊,当然你也可以用LL看LL看的话呢,有一个选项就可以看到了,叫I。加上A,就能看到它的节点标号。那每创建一个文件,系统是自动的分配一个新的节点编号。啊,我们看一下当前这里面是不是有132。啊,它是这样来分配的。那这个节点编号也是一个比较重要的资源。并不是无穷无尽的。那就像咱们中国人的身份证号码,身份证号码实际上它有一定的位数。
40:01
理论上他也是有限制的,对吧,不过呢,对于咱们14亿的人口也够用了。那。目前来讲呢,这个节点编号的资源,我们对于一个分区来讲,它是有限制的。那这里面隐藏了一句话,就是我们每个文件的节点编号分配是由各自的分区。独立管理的。那我们在当前硬盘上有几个分区,那就意味着每个分区各自分配自己分区里的节点编号。我们把节点编号想象成身份证号的话,那么分区就可以想象成国家。我们都知道每个国家是不是自己有自己的身份证编码方式啊,对吧,中国的身份证编号和美国肯定不一样。对吧,而且美国是自己分配自己的身份证啊,或者是类似的这个编码,那咱们中国是自己分配自己的。那么即使说两个国家假设都有一个身份证号码,比方说中国和印度,这个人口差不多,它的编码机制也许和咱们中国类似。
41:10
那么也许两个国家恰恰有两个人,他的身份证完全一样了,身份证号码一样,当然就代表着代表着什么呀?代表着这是同一个人吗?当然不是了,但是你都在中国的话,如果你都在中国的地面上,如果身份证号一样,那是不是就应该是同一个人了?对吧?哎,所以这就是他的背后逻辑啊,那么每个分区就相当于一个国家各分各的几点编号,所以呢,换句话说,我们这儿有一个131,那事实上你去到别处去,比方说布的下,这里面可能也有一个131。大家看有没有131啊,但是这里面我们看已经分配到这。这还得去。找一下啊找一下,当然这个东西节点标号它自动分配的啊,自动分配的这个只要是不同分区,即是节点标号相同,它也不代表这是同一个文件,肯定是不同文件,那刚才我们也提到了分区。
42:11
它这个节点编号是有一定的限制的,有多少呢?我们可以用地来看。If,如果你不挑这个I的话呢,它是以空间为单位啊,我们加上H。那么它显示的就是每个分区的大小,然后这个分区的名称。分区的大小还有多少剩余空间?用了多少空间?当然我们可以加上A,这时候这个单位就不是以空间为单位,而是以。I的编号为单位。看到吗?那就是说,比方说boot boot这个分区,它允许的节点编号最多是。65536个。那么目前已经用了多少308个?
43:03
看到没有,还有六万多个空闲。啊,六万多个空手。那么这个节点编号的资源也是一个。不能再生的资源,一旦你占用了,那么就少一个。那么如果用光了,就会出现磁盘空间不足的提示,它的提示呢,会很会让我们很多人误解为硬盘空间版了啊,比方说我把这个用DD命令来创建一个文件。我放到这个布子下。啊,生成一个test文件啊,这时候呢,我们直接这么执行,那么这时候它就会不断的往里写数据。最终把boot里面的数据空间来用光,那那我们来看,最后它就提示我们no space。就是没有空间,满了当然满了,是不是真的满了呢?我们用地看一眼就知道了,大家看是不是100%用光了。
44:03
对吧,零嘛,看到没有,没有剩余空间了,这是真的,磁砖满了,我们建立了一个比较大的文件,这一个文件把所有的空间都用光了。那我们来看一下这个文件。那我调一下这个选项啊。啊。复制啊。先这么写吧。啊,大家看这个文件,这个一个文件呢,就这么大。800多兆,一下就把硬盘给撑满了。那现在我把这个文件呢,给它删了。当然,在删除之前。我先做一件事。
45:00
我做一件事。我把这个文件呢,用一个工具给它。打开了。打开以后,现在我们看到空间已经满了。100%了,按照我们以前的逻辑呢,就把它删了,它就可以腾出空间来,对吧,腾出空间。好,删了以后我们来看空间腾出来没有呢。竟然没有。是吧?那这个咋回事啊?那实际上是这样的,那么在Linux里面,他如果发现一个文件正在被使用的话,它不会立即的把这个文件即使删了的时候,他也不会立即腾空这个空间。所以以前工程师有时候遇到过这个情况,就是他发现硬盘。分区快满了,所以他就。为了避免硬盘空间版系统崩溃。
46:03
因为有好多服务呢,他要往硬盘里写数据,没有空间了,这个程序就会出故障。所以他就很着急。啊,赶紧的找一些觉得没有用的文件就清一下,删一下。以腾出空间。结果发现删了竟然不起作用。删了以后空间仍然是这么多。那就是因为他删的那个文件是被某些程序所占用。所以造成他无法释放。那么这时候对这种情况。怎么办呀?啊,文件已经删了,但是注意文件已经删了啊,这个文件已经看不到了,在不下确实看不见了,但是它占的空间。却仍然霸占。阴魂不散是吧,陪伴你身边。啊,所以像这样的文件就比较麻烦。那事实上我们可以通过这个命令来搜索一下,当然这些命令呢,有些用法我们还没有讲,你先知道就行。
47:14
那这个命令是可以看到被删除文件的信息的,看见了没?这是不是有一个被删除文件的信息?这当然这些文件也被删了啊,这个和我们这个实验没关系,看到没有这个文件,而且这显示了它的。大小看到没有,是不是比较大呀,800多兆,谁目前正在使用这个资源呢?他。它的进程有一个进程编号啊,1541,但是这个进程编号呢,我们在这个地方可以看一下。1544吧,啊,我我刚才。啊1544,你这个是不是大脑有点这个和和嘴对不上号了是吧?哎,我明明看的是。
48:00
11544,怎么读的是1541呢?你看来了河南以后,这个有点水土不服了是吧。谁都不服,休息的不好哎。好1544啊,所以我们看到了啊,闹了半天这个VM在用,那么VM在用,导致这个。文件即使删了,空间也释放不了,那怎么办呢?如果这个程序是可以关闭的。你最好把它关了,关了以后它就会立即释放了,那怎么关呢?我们用Q,当然这个东西都是后面要讲的啊啊直接来个all吧,哎,那现在再来看一下空间是不是能释放。吃饭了吗?吃饭了吧?这个就是一个比较经典的面试题啊。面试题曾经说过这个。啊,也是,工作中曾经同学们也遇到过这个现象。
49:01
就是一个文件,明明删了,怎么空间释放不了啊,人家面试会问你。那你现在是不是就知道答案了?你们那个你们那个面试宝典怎么不拿出来呀?啊,这是面试题啊,同学们啊,你们面试宝典不都有吗?是吧?赶紧拿小本抄一下啊,这个视频听一天肯定会有一些是面试经常遇到的。如果你不及时记,你下了课你早就忘了。是吧,哪怕现在在本上快速的记上两笔下来再总结呢?是啊,发现大家都是在那听。你真听呢还是假听呢?我也不知道,我也看不见你们的表情。所以大家还是要赶紧动一下手啊。记下。一句话总结总结一下,有没有同学把刚才我说的这个总结一下,打个字。有有同学在那个腾讯课堂上打个字,让大家其他人去参考你写的这个东西啊,看看总结没有总结到位。
50:07
有没有同学总结一下打出来。用你自己的话啊,这个有一个非常好的学习方法,号称是世界上效率最高的学习方法,就是你把想学的东西用自己的话描述出来。说给别人听,如果别人听懂了,你肯定就明白了。啊,所以大家一定要尽可能和身边的人多交流,如果别人不会的时候,你一定要抓住这个机会是吧?哎,赶紧给他表示一下。把你。心力掌握的东西跟大家描述一下,这样的话对你自己有一个极大的提升。好,那么希望大家把刚才这个小的结论记住,那么接下来我们来说第二个问题。那这个问题既然会导致这个结果,那要将来我们正确的方法应该怎么去处理呢?哎,我看这个同学已经说到了啊,这个不是同学啊,张老师这眼神不好啊,张老师这个着急了,看你们不行啊,那直接动手了。
51:12
啊,看看其他同学,我看肖豪郝总啊郝总,哎,挺好。当然有些命令我们后面会讲啊,这个有些命令有点超纲,就是提前讲了啊,有些命令提前讲了,这命令有的是提前讲了,你看这命令都没讲呢,这是管道,这都没讲呢,这命令没讲啊。哎,你先记住结论就可以,记住结论就行。好,这是刚才我们提到的啊。那当然,那那我们既然知道了这个结论,那我们是不是应该工作中要想删文件,是不要不要去不要去直接删这个文件。我们是不是至少得先观察一下这个文件是否在被别人使用?因为如果使用你删了他,他也不会立即释放空间。那现在问题来了。
52:01
我怎么知道一个文件被在使用呢?啊,现在这样,我再把刚才那个文件给他建起来。啊,这个是五幺,我把这文件再建起来。哎,又建起来了,又满了,然后呢,我再用这个文件命令再把它打开。啊,再打开,那现在这个文件正在用,那我怎么知道备用呢,用这个l of后面跟上这个文件。就看见了。如果没有任何信息,比方说我打开别的一个文件。它就不会有任何信息,就是这个文件没有人用,没有人用就不会显示,而这个文件呢,你看是不是被一个程序在使用,它的进程编号什么能看得见呀。看见了吗?这就是一个很重要的。注意啊,这个也是一个面试题啊,面试题有时候会问你说我怎么知道一个文件被谁在用啊。
53:04
相信大家在Windows里常常见到一种现象,就是一个文件删的时候,发现Windows提醒你说这个文件正在被使用。Linux里有命令可以看,Windows里没有Windows,不过你可以找一些工具,这个工具,不过你去找第三方的就是不方便,所以咱们Linux你多学一些啊,你会发现Linux提供了丰富的工具。不知道大家有没有感觉学习LIS更有意思,是不是?不说话的同学看来是不同意我的意见了。啊好,那那现在我们就知道了,知道了,那我们是不是就可以考虑把这个程序暂时停用。但是这时候有个问题,我要想把这个文件删了,但是呢,这个程序还没法停。例如,我们工作中经常要删的文件往往是一些日志文件,而这些日志文件呢,都可能会被一些生产的业务服务所占用。
54:08
而这些业务服务呢,是不能停的,你要停了的话,就影响用户的访问了啊,那有些业务它是在互联网上对外提供,比方说外部服务。那对外提供外部服务,你如果你把这个服务对应的程序给它关了,那这个网页人家就打不开了。是吧,所以呢,我们不能关,那不能关,那这时候就产生一个新问题,在不关闭程序的情况下,我就想把这个文件给它清了怎么办。那我们可以用我们。稍后要讲的技术,我们提前先给大家说一下这个背后的逻辑,我们后面讲用这个方法。这个方法大家再来看。大小怎么样了?为零了,然后再看空间释放了没有。它文件都零了,他说他不释放也没办法了,当然这时候你再把这个文件删了,那当然也就无所谓了。
55:06
当然这时候这个程序我们并没有去关闭它,明白吧,这个程序我们没有没有去关闭它啊,这个程序还在啊,这个地方我们可以看一下啊,这个VM看还在。看到了吗?这样的话就不影响这个程序的情况下,可以把你要想删除的文件给它删掉,这就是我刚才执行的方法。啊,用的什么方法呀。大于号后面跟上你要删除的清空的文件,实际上这个大于号就是清空,它起到了清空效果,不过呢,这个大于号这个清空效果呃,有一些小毛病,什么小毛病呢,就是它的线类型。并不是所有的都支持的,这是share里的特点,那share的特点我们都知道,系统中是不是有很多种不同的share。
56:01
对吧,那我们系统中除了咱们现在用到的这个BA share,那有些题有些里面它可能用的不是BA啊,我看看我这个啊。这六上面。上面还有一些什么C之类的。是不是有很多种其他的事。好,我把这个起来。呃,因为我这个S8的上面应该是没有装别的share的啊。你看这边有一些别的share,但是不是C啊,当然我这也可以装一下啊,如果说想用的话,可以装一下,比方说C。
57:07
看它上面有没有对应这个包。要。啊,我这个光盘还路径变了。这个是我家里的那个路径,家里路径指定的光盘,和我这个教室里面不一样。所以这个路径光盘找不着路径了。啊,在这。这个是C盘,我家里用的是C盘。啊,那我这改一下吧,这个应该是D盘。不行了,我把这个目录整个迁过去得了。抽空把这个C盘。
58:00
C盘空间够不够?300G是吧。可以。他这个路径好像还不行,里边。嗯。这C盘这个路径还不是完全一样的,待会我再改改吧啊。先给他,让他慢慢考。嗯。啊,那当然我这个也可以走网络,我不走这个本地路径也是可以的,这个我去走阿里云的路径。这个。走的是本地路径。走,让他走阿里云的路径也是可以的,然后下面这个也不要了。
59:05
走阿里好,这样的话呢,我们再装一下。好可以了,然后这个地方叫TSH,然后装完以后呢,这时候我们用大于号。大家看,这就出现了问题了。不同的share呢?对于大于号这种方式,它并不是完全都兼容的。所以万一你要用别的share,这种方法就不支持了。那当然我们有一个通用的方法可以来实现啊,大家看这个文件的大小。要这个文件大小是7099个字节,我们既然大于号不支持,我们可以换一种方法来实现,就是用咱们曾经在DV下看到的一个。设备叫闹设备,这个闹设备呢,我们叫空设备。
60:01
空设备,你可以直接用它来实现文件的清空,大家再来看一下这个文件是不是已经被清空了,而现在我仍用的是chell。就不受影响,当然用bad share完全也没有问题啊,用bad share它也支持这个呢,具有通用性,明白吧,哎,这个具有通用性啊,比方说我这儿再复制一下。啊,把它覆盖了,然后我们用cat e no啊,你看这个文件是不是也被清空了。没有问题啊。所以这种方法应该说更有。更适合于各种实验环境,所以建议大家,如果你想清空文件,用这个方法。用cat第一呢?Cat,清空文件之后呢,你再把它删了,这不就安全了吗?哎,不至于造成说文件删了,然后呢,又无法释放空间。
61:05
好,这是咱们。清空文件的。方法,删除空间,腾出空间的方法啊。那刚才我们说到了这个节点编号,这个节点编号每个文件是系统自动分配的。当然我们刚才也看到了,每个分区它的节点编号的资源的使用是有一定的极限的,在布上最多也就6万个,那么如果6万个用光了,会导致什么现象呢?那么如果6万个,我们建一个文件夹,我在这里面建立大量的文件,比方说我建一个文件,建一个A文件,那这时候你再来看一下它的节点编号,是不是就少了一个。大家看到已经用了310个,剩下65526啊,然后你再建一个,你再建一个再看。大家看它是不是又少了一个。
62:01
一建一个文件它就少一个,建一个文件就少一个,那么意味着如果我把剩下的65225个都用光,那么它会导致什么现象?那我们可以来做一个简单的实验,这个实验呢,我们后面会讲是一个循环。那么我们这儿给他建立这么多。六五。225好,我就这么多,然后touch啊,我去建个文件Dora,我用的是一个循环写法啊,咱们后面会给大家讲。
63:00
哎,我这样的话呢,就建立了六百五千两百二十五个文件,当然每建一个文件呢,我提醒一下,打印一下说贝。I is pretty。好,这样的话就行了,那我们来看建立这么多文件。正在看着他减,知道吧,当然这个六万多个键也得等一会儿。也得等一会儿。好像还没那么快。当然这种建立方法是比较慢的啊,这个方法是比较慢的,不过效果就是比较明显。那还有更快的方法来建立啊,这种方法不是很快。好,我们还可以换一种方法来实现,什么方法直接touch,后面跟上文件,直接这么来写。
64:00
直接这么写,刚才多少来着是吧,就这么减,这样直接减,看写完了。你看不同的命令。是不是效果差别非常大,当然咱们现在看一下,看一个都没有了。是不是用光了,紧接着咱们就验证结果的时候到了,我再创建一个新文件,随便写个名字,只要不和原来的名重名,重名的话,他认为是同一个文件,它不会再用新的起点编号了,对吧?所以我们建个那王文件,这个是不是文件名里面肯定没有这个啊,这时候。提示。大家看提示,它的提示显示的并不是说节点编号用光了,它提示你说no space。所以好多。这个这个面试题里面经常就说说空间不够了,但是明明空间还是很大,这问你为什么,现在你就知道了啊,不就是节点标号用光了吗。
65:03
是吧?这是面试题里面经常问到,因为它和空间用光了的提示是一模一样的。啊,所以大家现在就知道节点编号也是一个重要资源,当然节点编号真用光了,那咋办呀?那那你没办法呀,因为没法加,现在是没法加的,因为我们当前这个硬盘是一个普通的硬盘分区。分区变不变不了,这个东西没法弄。啊,如果想变的话呢,我们后面会讲一种技术叫逻辑卷技术,逻辑卷技术可以增加空间。增加空间节点转化,它就会以变多,进而就可以让我们存放更多的文件,而且呢,它这个增加还是比较方便的,不影响业务的情况下可以在线的增加。啊,这个是非常好的,我们目前用的这个分区是做不到的啊,这就是我们刚才看到的,当然这里面文件众多啊,啊这里面文件你看一大堆。
66:09
看到没有一大堆的题啊,全是我们刚才建好的,好,那现在我们就知道了这个结果了啊,那我们把它。算了。当然我这一删,因为我删的是整个目录,所以他就把所有的空间都。还回来了,看到吧,哎。对,这就是我们给大家做的这样的一个实际操作。那刚才我们提到了目录的结构,这个目录说了目录是一个特殊文件,那目录里面存的是什么呢?如果说我们文件的话呢,说文件,文件存的不就是它的内容吗。那么数据如果这个文件它是一个文件夹的话,是个文件夹,那么它存放的东西是什么?那我们刚才说了数据。
67:01
在磁盘上可以分成两块,一个是Meta data,一个是啊数据本身,那么数据本身对于一般的文件来讲,就是它的数据内容嘛,比方说我这有一个F1文件,这个F1文件呢,假设是这个跨到下面去了,估计大家眼神都。看不清了,放到下面来,然后上面呢,是一个F1文件,那这个F1文件呢,它有它的原数据,比方说文件的属性权限大小。当然是不是有个小指针指向F1存放数据的位置,比方说这个就是它存放数据的位置。这个指针指向。那这个数据呢,假设在磁盘上占了一兆的数据,那么它这个是一兆,当然这个一兆的话呢,已经是属于间接指针了吧。直接指针是不是已经不够了,哎,那当然我就这么简单化了啊,中间肯定有一个间接指针的指向,好,那么这个是一兆的数据,就是里面存放了它的数据。那这是普通文件,但如果我这不是普通文件,是个文件夹呢?那如果是文件夹要这怎么回事?
68:04
什么断了?又好了,这是腾讯课堂的问题吧?这不是我的问题是吧,嗯。好,那就行,这个你们学玉梅的一定要快速学会一个甩锅的技能啊,这个马上反映,这不是我的问题吧?啊,那这是我们因为什么呢?等你们上了班以后,如果说你出了问题以后,你踊跃的说,哎,这是我的问题,好了,你这个奖金没了。啊,今今年奖金没了啊,需要学会保护自己啊啊啊,那么这儿呢,我有一个文件夹,注意这个是个文件夹,我文件夹呢是D开头。假设我这个文件夹叫de这个文件夹,那从这个目录结构来讲呢,这个de这个文件夹里面。
69:04
在这个文件夹里面,假设里面有F1。F2有两个文件。那这时候这个de它的数据空间中,它存的是什么?它的数据空间中存的就是F1这个文件的名称和F1它对应的节点编号假设是1000,听懂了吧?F2对应的节点编号是1001,假设。1000,这是一千一千零一理解了吗?这就是文件夹里面。存放的数据内容,所以所谓的文件夹里面存数据。存的就是这个文件夹里面的文件列表,以及他们各自的几点编号。啊,当然呢,也就意味着我们在节电表里面有没有文件名啊。节点表就是我们上面的原数据,这个空间里面有没有文件名呢?
70:02
是没有的啊没有的,那这个节点表里面它不放文件名,文件名是放在文件夹的数据块中。希望大家明白啊,那当然我们接下来应该有一个节点表。这个节点表里面存放了F1这个文件的原数据。啊,比方说它的检点编号是1000是吧,这个F1这个文件的大小啊权限等等等,但是就不写F1。他不会写F1的,因为F1在哪放着,在这儿放着,在他的文件夹的数据块里放着,明了吧,F2也有一个自己的原数据。这是1001。是不是它的权限呀,大小啊,其他属性对不对,是不是有个指针指向它的数据块。所以这就是在Linux中文件存放的。底层逻辑。当然这个大家主要是了解他的工作逻辑就行了啊,那现在你明白了这一点,那接下来我们接下来你就明白了,那我们删文件。
71:03
删的是什么?删文件,难道真的就是把文件从磁盘上删了吗?啊,比方说你把这个刚才的戴尔中的这个F1给删了,戴尔不是有一个F1F2文件,你把这个F1删了,那所谓的把F1删了,实际上删的是什么?是不是就是这个戴尔这个目录数据块里面,它有个F1和它的节点编号对应关系啊,实际上就把这个删了。把这个节点编号,如果不用了就回收,比方说他用了1000,结果呢,1000这个文件都删了,这个1000是不是那个谁一看没人没人用这个1000了,文件都没了吧,1000是不是回收将来给别的文件使用。因为节点编号也要复用啊,不复用它也不够用啊。啊,同时从我们的文件的这个原数据区,把F1这个文件的原数据信息清理掉,那这个F1里面是不是有它的1000编号啊,它的大小啊,属性什么这些就给它删了。但是删是删了,但是这个F1在磁盘上不是有一块空间吗?这个F1是不是在磁盘上,假设这个F1是十兆的数据。
72:08
这不是有个指针指向F1的数据块位置吗?那这个。十兆的数据在磁盘上,他给你删吗?他不删,给你留着听了吧,虽然留着,他会在系系统中会加一个标记,说这块空间已经可以被别人使用了。他不会给你删了,因为计算机里面的存放数据无非就是0101。那么我存了零,把上面的数据就给你清了,所以将来我只需要把新数据给你直接写上去就行了,写上去就把原来的数据给覆盖了,我不需要去清理它。不像咱们家里头还得清理清理,用不着清,你直接复那方面写,复制就是覆盖就可以了,这样的话也提高效率,所以换句话说,当我们把文件删了以后,如果这个十兆的空间没有被。覆盖的话。
73:01
是不是有可能会恢复?是不是是有可以有机会恢复的。你只要在创建一个新的文件的原数据,把节点编号给它,分配它,指向它,是不是就可以找回来了?逻辑上就是这样。所以。有些公司就专门做这个数据恢复。这样业务的啊,所以你当你删除文件RM删了以后呢,实际上如果没有覆盖这个数据,是可以通过技术手段来还原的。但是这个还原的话,肯定需要有专业的这个工具,有专门的工程师来干这个活啊,你非专业的人,说实在的,你做这个活弄不好那雪上加霜,把原来的数据给干坏了。所以你可能会找专门的数据中心,恢复中心的机构来做,但是你是不是得掏钱啊。对吧,哎,你恢复一个G的多少钱。啊,这个搞数据恢复的人很挣钱。啊,所以如果你想试一试的话,就可以删一下是吧,把你们工作中的数据删了,你看删一个G的数据有多少钱,你的工资够不够是不是。
74:08
好了,这就是我们给大家介绍的背后的逻辑啊,好了,那明白了这个逻辑以后呢,那后续的这些内容那就比较容易理解了,那么CP命令做了什么,L命令做了什么?L命令做了什么?那现在你结合刚才我们讲的节点表,你就知道它底层逻辑了,比方说CP做了什么呢?CP是不是就是创建了一个新文件,无非就是它的内容是来自于旧内容。来自于一个旧文件,是不是?你CP不就创建了个新文件吗?所以必然会在系统中是不是找一个空的没人用的节点编号给他分配,生成一个节点,记录分配节点文件的属性大小、权限之类的,然后呢,在里面,在这个目录,在这个文件所在的目录里面增加一项,说这个目录里面加了个新文件。
75:01
并且写上这个文件的节点编号啊,然后把数据呢给它放进去。对吧,数据放进去,这样的话呢,咱们这个文件就复制出来了。当然删的话呢,删什么?当然这里面提到了一个链接,这个我们待会再说,如果说普通文件,那直接就把这个文件的原数据就删了。节点编号也回收了,但是数据所在的空间不会回收,还在那空着,只不过它上面贴个标签,此处无人使用,将来可以被别的文件占用了,就这个意思啊。啊,那么MV命令呢?实际上所谓的MV就是CP加M,所谓的MV不就是移动吗?移动怎么回事啊?移动就是先把文件复制过去,生成新的记录以后,再把旧的文件删除,实际上MV就是一复制加删除。理解了吧。复制加删除。当然,如果。
76:03
我们数据。移动的目标和我原始路径在同一个分区中。我们发现感觉不太一样。大家在Windows里可能也操作过,如果我的移动的目标文件夹和我原文件夹在同一分区和不同分区。你们感觉有啥区别?是不是同一分区移动特别快,不同分区移动明显是有一个等待的过程。那这就是因为它背后的逻辑是不同的。如果在同一分区,那实际上它并没有真的把文件复制过去,因为不需要复制,它就在这个分区里不动,数据的空间不动,只是把文件夹那个目录改一改,比方说原来在戴尔一目录里面,现在把它放在DE2这个目录里面,加一条新记录。甚至节点编号都不用分配新的了,因为什么?因为节点编号,反正你在这个分区里给你有一个就行了嘛,你要那么多干嘛,是不是,所以节点号都不变,所以只是改一改文件夹的目录结构而已,所以速度非常快。
77:10
但是如果我要真的把它从一个分区移动到另一个分区,那要跨分区了,大家想这个数据要移节点编号,要重新分配数据的原数据要重新创建,对吧?所以这个过程肯定会比较慢。所以这就是他背后的工作逻辑啊,这就是咱们给大家讲的,那当然这下面呢,还有一些这个删除文件,这是我刚才讲过了啊,这个是给大家讲过的。啊,这节点标号用光了,这是我们刚才看到的。好,这是咱们通过刚才的介绍呢,大家知道了啊,文件系统内部它是怎么来管理文件的,有一个节点表这样的一个结构啊。当然,那么节点表包括节点编号这两个概念,接下来就和我们学习的另一个内容密切相关,一个呢就硬链接,还有一个叫软链接,当然这部分内容很重要是吧,所以我们放那待会休息完了再讲,休息一会啊,我帮你那个。
我来说两句