Preface:
本文以站在不懂到懂的角度,知识开始理解有错误,但慢慢进阶,最后豁然开朗。要点评先看完再说。
Basic_Knowledge:
在linux下有硬链接和软链接两种,硬链接为文件的别名,它和软链接一样,都指向文件,但是硬链接不是一个文件。
linux下判定是不是一个独立文件看的就是其inode是不是独一无二的,ls -l 一下,如果链接数是1,那么这肯定是一个文件。
命令:ex > ln test f_h || cp -l test f_h //硬链接
ex > ln test s_s || cp -s test s_s //软链接
Hard Link: 每个文件都会都会占用一个inode,文件内容由inode的记录来指向。
想要读取该文件,必须经过目录所记录的文件名来指向正确的inode号码来读取。
文件名其实只与目录有关,但是文件内容与inode有关。一个inode可能会与多个文件名关联,这就是硬链接的由来。
(图出处来自网上,作者如有觉得不妥请留言)
Symbolic Link: 软链接其实就像windows桌面上面放的快捷方式一样,删除了软链接就会删除源文件,而硬链接不会,软链接独立于源文件,指向源文件,但是其所占有的inode却和源文件不同。
(图出处来自网上,作者如有觉得不妥请留言)
Practice:
0x01:
0x02:
由于三个文件名都指向2362180号inode,所以第二列都显示3,f_h、s_h的都是硬链接,但这里居然显示的是普通文件。
软链接所在的inode都互相独立,即使都指向同一个文件。
0x03:
胡思乱想一下,创建一个软链接的硬链接会发生什么,实践一下。
结果就是软链接的硬链接还是一个软链接,是不是有点绕口,两个软链接都指向一个文件。
0x04:
那如果再创建一个硬链接的软链接会如何?
创建的这个软链接指向s_h,inode唯一。
0x05:
鸟哥上面说,删除软链接,源文件就会删除,试一下。
= =,郁闷。
0x06:
还好源文件还在,我们试试把源文件删除,然后再用软链接、硬链接打开试试。
,
细节不讲了,直接说原因,软链接独立,源文件删除后,由于没有了源文件的文件名,所以会出现打开文件为空的现象。
但是硬链接则不同,文件打开最关键的一点就是找到文件的inode,源文件即使删除,但硬链接文件知道源文件的inode号码,还是可以打开文件读取数据。
(图出处来自网上,作者如有觉得不妥请留言)
End: 书上说硬链接不是文件,只是文件的别名。在我看来它就是一个文件,虽然与其它文件共享一个inode,在源文件看来它不是一个文件,只是自己的别名,但是它和源文件数据什么都是一样,只不过名字不一样。在硬链接文件看来,源文件和自己(数据、权限等,除文件名)一样,那源文件岂不是自己的别名 了,源文件岂不是文件了?换个对象考虑考虑。再者,有一句话说得好:linux下一切皆文件。可能你还是有疑惑:硬链接本来就不是文件。但是我把源文件删除之后,为何用硬链接还是可以读出数据(这里inode起着很大作用,只要有inode就可以找到数据,前提是数据还没有被其他数据覆盖),没有文件,何来数据,没有地球,何来地球万物。
以上只是个人观点,看客请保持自己的思维。