00:00
在文件目录类命令这一部分内容的最后,我们再来介绍一个比较特殊的命令,那就是LN啊,其实LN呢,所谓LN就是link的一个简写了。很显然它就是要创建一个链接啊,就是链接到某个其他的文件或者目录上面去,所以我们一般用这个LN来创建的是一个软链接,那什么叫软链接呢?啊,简单来说就是跟Windows里边的快捷方式非常的类似,当前如果说我们要为一个文件或者说一个目录创建一个软链接的话,那就相当于另外一块。有一个单独的文件,它是链接到我们当前的这个原始文件上的,那当前的这个链接文件它保存什么东西呢?诶,它其实有自己的数据块,它保存的主要就是链接到其他文件的路径啊,就是相当于把它的路径存放到了我们当前新创建的这个链接文件,这样的话,通过当前的快捷方式,这个链接就可以跳转到我们真正要访问的那个文件上。
01:10
啊,如果大家对于编程语言非常的熟悉的话,那特别是像对于这个CC加加之类的语言比较熟悉的话,会发现这其实就有点儿像我们那个指针的概念啊,就是当前我们。创建的这个链接就相当于它是一个指针,它指向另外一个内存空间对应的变量,而自己呢,它相当于也可以看成一个单独的特殊的变量,里边存放的就是另外一块内存空间的地址。啊,这个就相当于一个扩展的类比啊,那如果说大家对指针的概念不是很熟悉的话,那就想象它是Windows里面的快捷方式就可以了。啊,其实之前我们都已经接触过这个内容啊,我们不是说在根目录下的这个并目录本身,它其实并不是真正意义上的一个目录吗?诶,我们看到它的那个图标上面也有一个小箭头,它其实是。
02:04
一个快捷方式,这就是我们所说的,它是一个软链接,那么它链接到的是user下边的并目录,哎,那同样目录也是一个软链接,它链接到的是user下边的目录,哎,这就是我们所说的这个软链接的具体的用法啊,那当然了,软链接也有另外一个名字,就叫做符号链接,因为它本质上来讲,我们是为原始的那个文件创建了一个链接到它的符号。那在使用的过程当中呢,一般就是要LN后边注意加一个固定的选项,那就是杠SS,我们知道soft嘛,Soft的第一个字母,那LN-S就是创建一个软链接的标准语法。后面呢,就是我们的原文件或者目录的名称,所以我们这里边要创建链接的时候,可以是链接到一个文件,也可以链接到一个目录啊,就是快捷方式,你指向谁都可以,那最后跟着的就是我们当前这个软链接的名称。
03:09
啊,这里需要注意的就是说,本身这个软链接创建之后,它是有自己的数据块的,要存放指向的那个路径的,所以它其实本身可以认为是一个单独的另外的特殊文件哦,跟原始的我们这个文件它是截然不同的,另外一个文件,只不过它俩之间有一条链,把它们连在一起而已。所以接下来我们就可以在命令行里边具体去操作一下,来测试一下,好,那接下来我们首先在当前root用户的主目录下边,我们先LS一下哦,看到下面有对应的这些文件以及目录哦,那我们知道这里的文件是比较多的,假如说我们在其他的目录下边,希望能够有一个快捷方式,快速的访问到我们当前root主目录下边的infer这个文件的话,哎,那应该怎么创建这样一个链接呢?诶,这就是一个软链接,我们创建一个这样的符号链接,比方说我们希望到。
04:09
Home at硅谷另外一个用户,它的主目录下边去创建一个infer,这个infer呢,我们只要有一个快捷方式啊,一个软链接指向root主目录下边的in就可以了,那这个创建方式那就是直接在这里LN-S,然后。我们只需要root下边的infer这个文件啊,然后后边要给当前的链接一个具体的名称啊,那比方说我们这个,呃,In infer就叫做my infer。哎,我们看接下来在当前at硅谷目录下边就多了一个叫做my infer的文件。那我们看到它的颜色跟前面普通文件以及目录的颜色都完全不一样,那它的类型应该是什么呢?诶,之前其实我们知道用LL或者是LS-L是可以看到当前对应的,呃,这个文件的类型和它的权限的,这里我们可以提前看一下,就是跟之前的所有文件不一样。
05:10
这里边我们一开始是一个L打头啊,那前面我们看到退回到这个root主目录,如果直接LL的话会发现,那如果是普通文件的话,前面就是一个杠,如果是目录的话,前面是一个D,所以这里看的很明显了,前面是L的就表示当前这是一个。链接文件哦,那当前我们创建的是一个符号链接,它指向的是哪个文件呢?是root下的info这个文件。啊,那现在我们可以来确认一下当前的这个链接文件指向的啊,是不是真的能够打开对应的这个iner文件,首先我们看一下这个infer文件,当前是在root目录的主目录下边,我们去直接cat一下当前的这个infer,哦,那当时我们是把这些对应的信息直接写到这个文件里了,接下来呢,我们再去回退到at硅谷的主目录下边,这里边有对应的my infer那个文件,我们来看它一下。
06:09
My info。诶,我们看到直接看它就跟访问这里我们看到的这个iner文件得到的内容是完全一样啊,或者如果说我们想要去对里边做一些对应的更改操作的话,诶,那比方说。到这儿啊,我们直接到最后一行,然后去增加一个666。然后直接WQ把它做一个保存,然后现在我们呢,回退到对应的root主目录下边去再看一下infer,注意前面我们打开的是my infer去做了更改,那现在呢,看一下当前的infer。哎,我们看666也添加到里面去了,所以当前我们就完全是一个快捷方式,打开my infer,其实就是打开了infer,它俩是一回事,链接到一起的,哎,这就是我们所说的软链接。
07:00
当然了,前面我们这个例子是链接到一个具体的文件,一个文本文件。同样,我们还可以创建一个软链接,链接到一个目录。那这个对应的目录呢,我们还是单独的来做一个创建吧,因为这里边其他的目录都是中文的名称,我们可能使用起来不太方便啊啊,所以这里边我们还是make DR创建一个新的目录,我们就把它叫做folder吧,文件夹啊,然后可以在里边呢,我们在创建一个文件。Folder下边我们去touch一个比方说叫file,哎,那现在我们看一下这个folder下边里边就有了一个file文件啊,然后接下来呢,我们还是希望。到艾特硅谷的主目录下边去。然后接下来在这里创建一个链接文件,一个软链接符号链接,链接到root主目录下的这个folder,我们看看它是不是还能够正常的链接过去进行跳转访问,哎,那这里面我们要创建的那就是LN-S还是软链接,接下来诶,要链接到的是root下的folder这样一个目录。
08:11
接下来后边给一个名字,哎,那前面我们直接就是在当前下面给了一个my infer这样一个名字啊呃,之前我们看到的这个创建软链接的过程,这里直接就给了一个my infer,那那就相当于是在我们当前目录下多了一个叫做my infer的东西,那这个对应的文件呢,也可以创建在我们指定的目录下,那当然就是你给相对路径,绝对路径都可以了啊,比方说这里我们就直接给一个绝对路径吧,啊,那其实这个也是一样的啊home at特硅谷我们直接放在at硅谷的主目下边,诶,那这里比方说。我把它叫做my folder。好把它串联出来,现在如果我们再来看一下的话,就多了一个叫做my folder的软链接啊,那当然了,我们也可以看一下。当前my infer指向的是一个文件,而my folder指向的是一个哎,具体的目录啊,他们俩本身本质上来讲都是一个链接文件而已,所以我们看到他们的类型前面都是一个L啊,关于这个文件类型,后面我们讲到文件权限那一部分的时候,还会去详细讲解啊,所以接下来我们就看一看了啊,既然现在我们是已经创建了这个链接文件啊,那现在我们看到如果说我们回退到root主目录下去CD。
09:31
Folder这个目录的话,诶,那我们看进来可以看到下面有一个file,这里我们可以PWPWD看到目前是在root下边的folder子目录,接下来呢,我们直接切换到home at硅谷,然后这里看到有一个my folder,那这个能不能CD进去呢?我们可以试一下。也是可以CD进来的,所以当前我们这里的这个链接,它链接到了一个目录,看起来呢,它自己就像一个目录一样,你也可以直接进入它啊,然后里边有什么东西呢,我们看到里边就是一个份。
10:06
这个file跟之前我们在root主目录下边进入到fold子目录下边看到的file是完全一样。哎,那所以呃,当前我们可能会有一个疑问,就是那当前PWD看到的工作目录是什么呢?啊,当然指向的就是home-at硅谷杠my phone,哦,就是当前我们还是按照链接的路径指定的,呃,当前进入到哪个路径里面去了?那有同学可能就想,哎,那这个不对呀,我们明明现在这个状态是什么呢?上面有一个主目录,哎,我这里有一个root。Root目录,然后这边又有一个home目录。Home下边还有一个at硅谷。At硅谷,哎,那现在我们相当于是root下边创建了一个文件夹,叫做folder。
11:02
At硅谷下边呢,创建了一个链接啊,这个我就简写了,叫做my folder。然后现在我们是让他做了一个链接操作,链接到这里。然后跳进来的这一个目录路径呢,诶,我们看到这里边直接给的就是home at硅谷my food里边看到的对应的一个文件,诶这个看起来有点,呃,就是跟我们实际的这个路径是有点不对的,因为我当前应该是在这里下边有一个file。有一个文件,那你应该输入,是不是也应该输入我们本身的这一条它实际的路径呢?啊,在Linux系统里边,你可以输当前链接符号,链接跳转的路径,也可以显示当前的实际路径,你如果希望要显示啊,就是当前这个file文件啊,它对应的实际路径是哪里的话,诶,那这个时候我们应该这样去做,那就是PWD直接杠一个。
12:01
大P,诶,那我们看到它指向的就是显示的就是我们当前真正意义上的实际物理路径啊,所以这个杠大P在很多对应的这个命令里边,其实都有这样一个具体的选项,它表示的就是抛开。所有的这些符号链接,软链接对我们路径的影响,直接去考察它真正的物理路径啊,啊,那所以其实就是在我们之前做的一些操作里边也可以啊,比方说我们直接回退到root的主目录下边去。回退到这里,假如说我们想进入my folder这个目录的话。那我们知道你可以直接去找后下边的at硅谷my folder去做一个CD,那CD进去之后,如果我们PPWD显示的当然就是这个软链接对应的路径了,那如果说我们现在想要进入这个实际路径root-folder这个实际物理路径呢,前面同样可以加上一个杠P。
13:06
注意是大写的P。这个时候我们看到直接进来的就不是my folder了。当前进来的就是真正意义上的链接到的那个root下边的folder。啊,所以这个操作其实也是一样的啊。那这就是关于软链接的创建和管理的过程啊,那当然了,有创建就有删除,如果说我们想要把刚才创建的软链接删掉,又应该怎么做呢?其实我们知道当前的这个软链接啊,不管是指向文件还是指向一个目录,它本质上不就是一个特殊的文件吗?里边写入的是对应的地址信息吗?诶,所以我们删它就跟删一个普通文件是完全一样的。使用的命令当然就是RM remove啊,这个非常简单,我们可以直接跳转到。Home下边的艾特硅谷目录下啊,然后看到当前有两个链接文件,那么我们直接用RM删掉就可以了。
14:05
这里边删这个链接到文件的软链接比较简单,我们直接RM后边跟上my info直接删,这里会有一个提示,因为我们知道RM本身是一个本身是一个别名啊,它本质上是后面加着那个杠I参数啊,是要我们提醒一下是否删除,我们真的想删的话给个Y,现在我们看直接就删掉了。那删掉之后原始的文件还存在吗?我们回退到root的主目录下看一下,诶这里的iner是还在的,因为我们删的只是一个快捷方式嘛,所以这个完全没有问题。那对应的我们回退到。这里。看一眼my folder这个链接。如果说。我们想要去啊,比方说现在啊,我当前要删它的话,还可以加一些选项,我们不想再做这一个交互式的这种输入Y去确认删除的话,那可以直接加一个杠F,那另外我们知道对于文件目录而言,还可以加上一个杠R。
15:07
当成,哎,相当于我们当前就是要把它下边的子文件子目录全部删掉这样一个操作,那我们现在看一下啊,如果要直接这样去删的话,My folder。首先我们先来试一下后边不加斜杠这样的一个方式。RM-RF,然后直接加上my fo的这个名称,我们直接删一下。现在当前就没有了啊,当前目录下边空空如也,已经没有对应的软链接了,回退到root主目录下,我们看一下,诶,同样这个folder。安然无恙,一点没受影响,因为我们删除的只是一个快捷方式嘛,这个是没有问题的,但是大家一定要小心,一定要注意的是。这里我们可以看一下这个文档里面的说法啊,如果说我们加上了后边的杠的话。那这就表示什么呢?注意我们如果不加杠,只有软链接名称的话,像刚才这个my folder的话,那相当于这只是删除当前的链接文件,如果你加上杠,那就是访问一个目录了。
16:10
前面如果还有杠RF的话,那相当于是把对应的目录完全删除,那其实会删除我们真实目录下的内容。所以这里一定要注意,我们这里可以做一个测试啊,那就是还把之前的这个链接先恢复出来,我们链接到的是root下边的folder。文件夹,然后我们创建的这个名字叫做my folder。还是把它先创建出来。假如说。就比之前我们的这个操作啊,多了一个斜杠RM-rf my folder1杠,现在我们看一下。哎,我们看LS一看当前的内容,发现my folder并没有删掉。删的不是他,那删的是谁呢?回去看一眼,我们发现folder目录还在。
17:00
但是我们发现folder目录下的file文件已经不见了。哎,所以我们一定要注意啊,当前的这种删除是比较危险的,我们平常一定要明确的牢记符号链接,它本身是一个链接文件,删的时候不要做对应的目录的操作,哎,直接删就删他自己就好了。当然了,现在因为这个folder本身还存在,那所以如果说我们还想要进入到对应的这个目录的话,也是可以的啊,我们home at,硅谷my folder。诶,这个也是还可以进来的啊,那如果说我们PPWD杠大P的话,发现它进入的还是root下边的folder目录。这里需要注意的就是说,假如说啊,那我们如果要是把当前的。我们回退到上一集root的主目录下边,如果把当前的原始的目录删掉。直接杠rf folder把这个删掉了,那接下来我们还想进入到home at硅谷下边的my folder,这个会发生什么事情呢?哎,因为当前的这个链接还存在啊。
18:07
啊,当然了,我们就知道了,原始的不存在的话,那对应的这个链接它就没有办法跳转过去了,啊,就是我们可能会发现一个很奇怪的现象,我明明可以看到艾特硅谷这个目录下边是有my folder这个东西的,哎,但我们发现当前这个bash给我们显示的它已经变黑了,就这个链接已经无效了,因为它指向的那个目录已经不再存在了,已经被删掉了。啊,所以这种情况下,当然我们就把对应的my folder删掉,这样就可以了。这是我们需要注意的一点,一些基本的操作啊,啊,那当然了,这里可以多给大家做一点扩展,就是既然我们当前讲的这种用法叫做软链接。那既然有软链接,当然就还会有硬链接,那如果说这里边我们不加上对应的杠S选项的话,直接一个LN后边加一个文件名。
19:04
然后接下来再加一个创建的链接的名称的话。那么这样的一个指定相当于创建出来的。就是一个硬链接,哎,那这个硬链接跟软链接之间又有什么关系,又有什么区别呢?简单来说就是硬链接,相当于是把我们当前的这个文件。多了一个指向的链接。而软链接呢,是单独的创建了一个新的链接文件,指到了这里。诶,这是什么意思呢?啊,其实前面我们提到过啊,文件它有一个非常重要的信息叫做ino。之前我们讲到在文件里边去追加内容的时候啊,用V追加的时候也提到过,那为什么V追加之后,这个信息我们用Q-F。
20:00
没有办法直接监视到呢,就是因为文件的I node里边的信息,它对应的那个索引号那个index已经发生变化。那所谓的这个inoe,我们可以理解成就是保存了文件对应的一些原信息啊,就是我们说的这个Meta data。保存了文件原信息的一一个节点数据啊,那对应的这个所谓的原信息,那我们就可以认为是LL能够看到的那些啊,文件的类型,文件的权限,当前的链接数,创建时间等等等等,这些信息都放在里面,都放在这个inote里边,这里边非常关键的就有一个当前这个文件的唯一编号那个ID啊,是当前的一个索引号啊,我们可以把它叫做索引节点号。那在Linux里边呢,它是允许。不同的文件名称,你这里可以叫一个A,然后呢可以叫一个B,不同的这个名称是可以指向同一个IO的节点的。
21:03
所以这样的话,这就有了一一种用法,就是IO的节点,这里它是原信息嘛,然后他再链接到具体存放数据的,呃,那一块存储的区域,那这样的话,我们可以直接创建一个。指向inod的相同的一个文件名,那这样的话呢,相当于我们对于之前的这个文件没有任何的影响,只是纯粹多了一个新的链接而已,这种链接方式就叫做硬链接,好啊,那就是这种硬链接的好处,就是说你删这个原始的这个文件,比方说我们叫A。你把它删了,对这个B也没影响,因为它相当于跟这个A是完全平等的嘛,他们链接链接到的都是我们原先文件的那个ino的信息。原信息。而前面我们讲的软链接呢,就不一样了,软链接我们当前这个创建的链接文件,它其实是一个单独的文件,它也有自己的ino啊,然后也有自己的数据框。
22:09
它的数据块里边存放的是我们对应的原始文件的地址,哎,所以它的这个链接关系是这样,链接到了原始的这个A文件这里,然后A文件有自己的ino的信息。所以在这个链接的过程当中,假如你把原始的文件删掉的话,我们就会发现当前的这个链接也就失效,因为它里面只装了一个地址啊,你之前的那个东西都已经没了,那当然对应的数据也就不存在了。啊,所以大家一一定要注意一下,就是在这个Linux文件系统里边,有时候我们看会看到一个概念,就叫做当前文件的链接数,它指的是什么呢?它其实指的并不是软链接的数量,因为软链接你可以认为它其实就是一个单独的链接文件了嘛,跟当前文件其实是没什么关系的啊,它只是指向了它一个地址,保存了一个地址,而真正这个文件的链接数是什么呢?其实是它的硬链接的数量。
23:08
这个应链接相当于都是完全平等的,你删掉一个,哎,那另外一个还可以直接访问啊,当然了,这个在实际使用的时候,大家可能会觉得它稍微有点麻烦,用的也比较少,因为这种方式的话,它跟文件的IO的相关,你就只能创建一个文件的硬链接,而不能针对目录去创建硬链接啊,所以这种方式在实际使用的过程当中可能会少一点,我们在实际应用一般创建的都是软链接。这是一一个扩展的内容啊,大家可以做一个了解。
我来说两句