我们学习下链接文件,链接文件是Linux下七大文件类型之一。它可分为软链接(符号链接)和硬链接两种,使用ln(link)命令可创建链接文件。
软连接(符号链接)symbolic link
软连接做什么用?一句话就能明白“软连接相当于是windows系统的快捷方式”。
ln -s 源文件 软链接
演示:
1)为一文件创建软连接
ln -s a.sh a2.sh
通过上图我们需要注意这几点:
①设置软链接,如果软链接和源文件不在同一级目录,源文件需要设置为绝对路径方式。
②ls -li,i:显示文件和目录的inode编号。看源文件与软链接inode编号是不一样的。
③所有软连接文件的权限是777,而真正的权限是由指向的那个文件决定的。
④源文件与软链接大小不一样,软链接只是一个符号连接,所占用的空间只是存储路径所占用的极小空间。
⑤ls -l以后,软链接后面箭头指向的是原文件
⑥软连接文件与源文件内容一致,并且可直接编辑软链接文件,保存后两者内容一致(其实修改软链接文件就是修改的源文件,当运行软链接的时候,会根据链接指向找到真正的文件,然后执行)
2)软连接的原理
产生一个特殊的档案,该档案的内容是指向另一个档案的位置。
linux下每一个文件都对应一个inode编号,创建软链接后,软链接与源文件各有一个inode编号。
3)也可为目录创建软连接
ln -s /home/ubuntu parent
创建的链接只是对应的指向源文件的路径,所以可以对目录进行链接。
4)源文件被删除
在Windows上,源文件被删除,快捷方式也会失效;重新创建源文件,快捷方式又会恢复有效。
在Linux下也是这样的:
原文件丢失,软链接无法访问,会报找不到的错误。如果再创建一个同名原文件,软链接又恢复为有效链接文件。
注意:软链接可以对一个不存在的文件名进行链接,但直到这个名字对应的文件被创建后,才能打开其链接。
硬链接 hard link
已有软链接了,硬链接有什么用处?
软链接它有个弊端,就是甭管一个源文件有多少软链接,只要源文件被删了,软链接全部失效。软链接起不到防止误删文件的作用。
而硬链接的好处就是防止误删文件。
举例:文件a创建了硬链接b,文件a被删除,硬链接b依然可以使用,也就是文件a依然存在。这是因为硬链接相当于给某一文件多起了一个名字,文件此时的名字即是a,又是b。删除文件a,只是删除掉文件其中一个名字,并没有删除源文件本身。
ln 源文件 软链接
把-s参数去掉,创建的就是硬链接
演示:
1)为一文件创建硬链接
ln b.sh b2.sh
通过上图我们需要注意这几点:
①看源文件与硬链接inode编号是一样的。
②源文件和硬链接的属性完全一样,硬链接的文件类型并不是“l”。
③硬连接文件与源文件内容一致,并且可直接编辑硬链接文件,保存后两者内容一致。
2)硬链接的原理
linux下每一个文件都对应一个inode编号,创建硬链接后,硬链接与源文件的inode编号是相同的
不管一个文件有多少个硬链接,与源文件全部是同一个inode编号。
硬链接是直接建立在节点表上的(inode),建立硬连接指向一个文件的时候,会更新节点表上面的计数值,这个计数值叫硬链接计数。
创建一个硬链接,并不是复制了源文件,而只是把硬链接计数+1;
删除一个硬链接(包括源文件),也没有删除实际的文件内容,而只是把硬链接计数-1。
当一文件只有硬链接计数变成0也就是没有任何硬连接指向的时候,才会真实地删除内容。
这个地方的原理和我们前面学习PHP对象传值时的原理是一样的,PHP对象赋值给变量的是对象标识符,不是对象的实际内容。
注意:
不论是硬链接或软链接都不是将原本的档案复制一份,不会重复的占用磁盘空间。硬链接的文件显示大小只是跟源文件一样,但它不会明显占用文件系统磁盘空间。
3)不允许为目录创建硬链接
4)不允许跨越文件系统创建硬链接
硬链接只有在同一个文件系统中才能创建,同文件系统不同目录下也可以。而软连接是没有这方面限制的。
5)总结硬链接
系统里边文件的名称(引用)就是硬链接;
给文件增加名称(引用)的过程就是创建“硬链接”;
一个文件有多个名字,它们互为硬链接;
硬链接好处:
① 防止重要的文件被误删除
② 如果有多人需要操作同一个文件,就给他们创建许多硬链接即可。