前言
关于Linux中的软链接和硬链接一直感觉自己理解的不够到位,查了很多资料,看了很多大佬的学习总结,现在才算对这两个概念有了一个清晰的理解。
软链接
举个形象的例子,软链接就像是windows系统中的快捷方式,它是一个单独的文件,记录的是源文件的路径信息,使用软链接能够快速访问源文件,因此,删除软链接对源文件并没有任何影响。
硬链接
相当于复制了一份源文件并且换了个名字,复制产生的文件和源文件指向同一个内存地址,因此更改这两个文件都会对源文件的内容产生更改。或者换种方式来讲,为一个文件创建硬链接就相当于为系统中的这个文件的内存地址创建一个新的映射关系,因此,删除一个硬链接并不会完全删除掉源文件,只有将全部映射关系删除,源文件才会被删除,这就是硬链接的作用,就比如说你在你的电脑上编辑一个文件,但是还没有完全编辑好,因为有什么事情中途离开了,这时候别人来用你的电脑,不小心把你这个文件当作垃圾文件给删了,如果你对这个文件做了硬链接就依然能够编辑这个文件,只是这个文件的名字换成了你做的硬链接的名字。
inode(i节点)
i节点是文件和目录的唯一标识,每个文件和目录必有i节点,不然操作系统就无法识别该文件或系统。
实验
之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。
软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。
总结
硬链接:
与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
软链接:
保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。