目录
那什么是链接?
链接命令的生成:
实验案例:
硬链接概念:
软链接概念:
情况1:删除myfile.txt:
情况2:重新创建一个新的myfile.txt文件:
软链接作用:
软链接的作用:
今天我们来讲一讲Linux系统中对文件的链接:
那什么是链接?
链接就是共享文件的一种方式。使用链接我们可以轻松快捷的跳转到该文件中。就好比在Windows系统中,下载了一个谷歌浏览器的软件,假设该软件的安装位置是在:
C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Examples\Validator\abca中,那么使用该浏览器就需要运行它的可执行文件程序,我们就需要一步一步的点开这么多的文件夹去找,不仅浪费时间,心态上也会崩溃。于是链接的好处就体现出来了,将该可执行文件进行路径链接——快捷方式,链接好后放在桌面,以后我们只需要在桌面打开该快捷方式即可,轻松又简单。而在Linux中,程序员们经常用链接去解决一些版本的问题。
链接命令的生成:
对文件使用链接有两种方式:一种是硬链接,一种是软链接。
硬链接指令:ln 文件名 链接名
软链接指令:ln -s 文件名 链接名
实验案例:
从上图的指令执行结果可知:通过创建一个文件,使用硬链接指令去生成后就像是一个普通的文件,使用软链接生成后是彩色链接名用箭头指向文件名。
硬链接概念:
通过索引节点inode来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给该文件分配一个inode编号,多个文件名指向同一个inode是存在的,一般这种链接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删的功能”。因为对应该目录的索引节点inode有一个一个以上的链接,只删除一个并不影响文件的inode及其数据和其他对该inode的链接,只有当最后一个链接该inode的链接被删除后,文件的数据块才会被释放。文件真正被删除的条件是与之相关的所有硬链接均被删除。
软链接概念:
类似于Windows的快捷方式,给文件创建一个快速的访问路径。它依赖于源文件,该软链接的inode会被系统重新分配一个,并不会与源文件的inode相同,这是与硬链接最大的区别之一!当源文件出现丢失、删除问题后,该链接不可用。
使用ls -li指令可以查看当前目录下的inode编号:
从上图知:硬链接与文件的inode是同一个,表明硬链接并不是一个特有的文件,且其它的属性(文件权限、内容大小)也与文件相差无几,说明硬链接采用的全是myfile.txt的信息数据,就像是一个克隆体一样。
而软链接的inode与文件不同,说明它是一个独立的文件,但软链接的其他属性有许多和文件差很多。
命令执行:向myfile.txt文件写入一行字符串内容
发现不仅仅是myfile.txt的内容大小从0变成了13,连硬链接的内容也变成了13,更加证明了硬链接采用的全是myfile.txt的信息数据,myfile.txt变成什么样,硬链接就变成了什么样。
反观软链接的大小从创建出来是10后,现在它仍是10。
通过查看这两个链接的内容,我们发现,软连接的内容也有hello bit! 但是它的大小就是不变,这说明了软链接里面装的并不是myfile.txt的内容数据,其实装的是myfile.txt的绝对路径!
情况1:删除myfile.txt:
当我们删除了原本的文件后,对该文件进行链接后的两个链接文件会发生什么呢?是不是全都失效了?
经看上图我们发现:软链接变红了,而且后面被删除的文件发红发闪,这是软连接发出的警告,表明它失效了,虽然失效了但软链接仍在,没有随着文件的删除而消失。
但是我们使用cat命令查看软链接的内容时,发现该链接不存在!也就是说它处于半死不活的状态。
但对比硬链接来说,硬链接并没有发现什么问题,没有发红,大小什么的也没变
使用cat指令查看硬链接的内容时,它仍然显示着上一次myfile.txt输入的内容,也就是说myfile.txt文件的删除并没有影响到硬链接文件,它仍保留着myfile.txt被删除前的所有数据,包括inode。
情况2:重新创建一个新的myfile.txt文件:
重新创建一个同名字的文件时,这两个链接又会发生什么变化?
通过显示出来的结果,我们发现有多处地方不同:
1.创建出来的myfile.txt拥有了新的indoe编号1048614,那么说明myfile.txt不再是原来的myfile.txt了。
2.软链接又活过来了!!!,软链接在生无可恋的生活中又遇到了和之前长得一模一样的容貌和名字的女孩,他从绝望的泥潭深渊中又飞到了希望的湖边稻田中。
3.在往新文件myfile.txt中输入新内容“xixixi”后,查看软链接的内容,发现变了;查看硬链接的内容,发现没变,更加佐证了硬链接和这个新myfile.txt不再有任何关系。硬链接也遇到了和之前长得一模一样容貌和名字的女孩后,但对其显得很冷漠,压根不理人家,与软链接形成了天差地别的影响。
总结:虽然旧文件myfile.txt被删除了,又产生了与旧文件相同名称的新文件myfile.txt,虽说是狸猫换太子,但狸猫和太子的出生地(绝对路径)是一样的;而对于硬链接来说,狸猫终究不是真正的太子!
软链接作用:
在实际情况中,软链接的使用率是远远高于硬链接的,接下来我通过Linux来展示软链接的实际作用:
通过创建一个多重递归型目录后,在该目录的最后一层进行代码的编写并生成可执行文件,将做好的这个可执行文件执行的话只能是进入一层又一层的目录下去找该文件,这种方式有些搓,即使在目录外面,也需要输入繁琐的指令去执行,如下:
为可执行文件main.exe产生软链接:
这样,直接执行软链接即可。
软链接的作用:
案例说明:
由上图可知:在当前目录下,有个子目录bin,该目录的inode编号为1317147。接下来我将会在bin目录里面再创建一个子目录empty:
创建出empty后,该目录的inode编号为1317147,进入empty目录里面,使用ls -ali指令,该指令的作用是显示当前目录下所有的文件的详细属性及其inode编号。
这里做个知识点解析:倒数第三行及倒数第二行的.和..文件是属于隐藏文件,.表明是当前路径,..表明是上一级路径。
通过图片可知bin目录的inode编号和/bin目录下的.文件inode编号相同。我在上面讲到过硬链接链接某个文件时,它们的inode是相同的,所以.是bin目录的硬链接。
继续举例:
总结:bin目录下的.文件和bin目录下的empty目录下的..文件inode也相同,说明/bin/empty/..是/bin/.的硬链接,它俩也都是bin目录的硬链接。
所以在文件属性栏中的第3列中的数字表示的就是该文件的硬链接数目,由上可知bin目录文件包括它自己共有3个相同的inode编号1317147,所以为硬链接数目为3。
定义硬链接数目的方式就是:该文件本身+链接它自己的多个硬链接!
我们平常使用的cd ..,./main.exe等命令全是使用硬链接进行的。
默认情况下:新创建一个文件的硬链接数为1——它本身
新建一个目录的硬链接数为2——它本身和它内部的.文件