第十七章:第26节Linux目录与文件——链接文件

更新于:2018-12-18 15:00:14

我们学习下链接文件,链接文件是Linux下七大文件类型之一。它可分为软链接(符号链接)和硬链接两种,使用ln(link)命令可创建链接文件。


软连接(符号链接)symbolic link


软连接做什么用?一句话就能明白“软连接相当于是windows系统的快捷方式”。


ln  -s   源文件    软链接


演示:


1)为一文件创建软连接


ln -s a.sh a2.sh



1.png


通过上图我们需要注意这几点:


①设置软链接,如果软链接和源文件不在同一级目录,源文件需要设置为绝对路径方式

②ls -li,i:显示文件和目录的inode编号。看源文件与软链接inode编号是不一样的。

③所有软连接文件的权限是777,而真正的权限是由指向的那个文件决定的。

④源文件与软链接大小不一样,软链接只是一个符号连接,所占用的空间只是存储路径所占用的极小空间。

⑤ls -l以后,软链接后面箭头指向的是原文件

⑥软连接文件与源文件内容一致,并且可直接编辑软链接文件,保存后两者内容一致(其实修改软链接文件就是修改的源文件,当运行软链接的时候,会根据链接指向找到真正的文件,然后执行)


2)软连接的原理


产生一个特殊的档案,该档案的内容是指向另一个档案的位置。


1.png


linux下每一个文件都对应一个inode编号,创建软链接后,软链接与源文件各有一个inode编号。


3)也可为目录创建软连接


ln -s /home/ubuntu parent


1.png


 创建的链接只是对应的指向源文件的路径,所以可以对目录进行链接。


4)源文件被删除


在Windows上,源文件被删除,快捷方式也会失效;重新创建源文件,快捷方式又会恢复有效。


1.png


在Linux下也是这样的:


1.png


原文件丢失,软链接无法访问,会报找不到的错误。如果再创建一个同名原文件,软链接又恢复为有效链接文件。


注意:软链接可以对一个不存在的文件名进行链接,但直到这个名字对应的文件被创建后,才能打开其链接。


硬链接 hard link


已有软链接了,硬链接有什么用处?


软链接它有个弊端,就是甭管一个源文件有多少软链接,只要源文件被删了,软链接全部失效。软链接起不到防止误删文件的作用。


而硬链接的好处就是防止误删文件。


举例:文件a创建了硬链接b,文件a被删除,硬链接b依然可以使用,也就是文件a依然存在。这是因为硬链接相当于给某一文件多起了一个名字,文件此时的名字即是a,又是b。删除文件a,只是删除掉文件其中一个名字,并没有删除源文件本身。


ln  源文件    软链接


把-s参数去掉,创建的就是硬链接


演示:


1)为一文件创建硬链接


ln b.sh b2.sh


1.png


通过上图我们需要注意这几点:


①看源文件与硬链接inode编号是一样的。

②源文件和硬链接的属性完全一样,硬链接的文件类型并不是“l”。

③硬连接文件与源文件内容一致,并且可直接编辑硬链接文件,保存后两者内容一致。


2)硬链接的原理


linux下每一个文件都对应一个inode编号,创建硬链接后,硬链接与源文件的inode编号是相同的


1.png


不管一个文件有多少个硬链接,与源文件全部是同一个inode编号。


硬链接是直接建立在节点表上的(inode),建立硬连接指向一个文件的时候,会更新节点表上面的计数值,这个计数值叫硬链接计数


创建一个硬链接,并不是复制了源文件,而只是把硬链接计数+1;

删除一个硬链接(包括源文件),也没有删除实际的文件内容,而只是把硬链接计数-1。

当一文件只有硬链接计数变成0也就是没有任何硬连接指向的时候,才会真实地删除内容。 


1.png


这个地方的原理和我们前面学习PHP对象传值时的原理是一样的,PHP对象赋值给变量的是对象标识符,不是对象的实际内容。


注意:


不论是硬链接或软链接都不是将原本的档案复制一份,不会重复的占用磁盘空间。硬链接的文件显示大小只是跟源文件一样,但它不会明显占用文件系统磁盘空间。


关于硬链接与软连接占用磁盘空间问题的分析研究


3)不允许为目录创建硬链接


1.png


4)不允许跨越文件系统创建硬链接


1.png


硬链接只有在同一个文件系统中才能创建,同文件系统不同目录下也可以。而软连接是没有这方面限制的。


5)总结硬链接


系统里边文件的名称(引用)就是硬链接;

给文件增加名称(引用)的过程就是创建“硬链接”;

一个文件有多个名字,它们互为硬链接;


硬链接好处:


① 防止重要的文件被误删除

② 如果有多人需要操作同一个文件,就给他们创建许多硬链接即可。