在本篇博客主要想说说Linux文件系统中的硬链接与软链接的问题,这是一个很多人介绍过的问题,那么我为什么还要再说一遍了呢?我个人感觉这个问题不是什么很深奥的问题,我之前了解过,但是没有明白,直到今天才搞清楚,在这里我主要是想分析一下原因。
我之前对Linux系统的文件系统一点概念也没有,当然今天还是没有完全理解Linux文件系统。我是在看文件系统的时候,看到了硬链接两个字的时候,突然想到软链接与硬链接的问题的,基于这一点我就简单研究了一下这两者的关系,下面我就说说他们的特性吧。
1.软链接是可以跨越文件系统,但是硬链接不行!
2.硬链接是由通过索引节点连接起来了(Linux下的所有文件都会被分配一个索引的),这好比C语言中的指针,不占用额外的空间;软链接是一个"快捷方式",他需要空间来保存它所指向的文件的路径。对这两种链接文件的操作都等价与对原文件的操作。
3.原文件被删除的时候:软链接失效,因为它所指向的路径的文件被删除了,快捷方式也有这个特性的,这也就比较好理解了;硬链接就不一样了,大家可以类比"引用计数"的特性,只要引用计数不为0(Linux下也是通过引用计数来实现的),那么空间是不会被释放的,所以只有所有的硬链接以及原始文件都被删除的时候,共用的文件才被删除。
4.我们可以想一想,一个索引节点是一个文件系统特有的,所以再别的文件系统是无法访问到的,这也说明了硬链接不能跨越文件系统;但是路径是可以的,只要按照绝对路径来访问的话,不同的文件系统中的文件也是可以标记的,所以这也就说明了软链接可以跨越文件系统。
下面给出几个示例演示一下吧:
我创建了两个普通文件 file1,file2
创建了file1的硬链接,hlink1
创建了file1的软链接slink1,file2的软链接slink2
当我们使用 ll 查看的时候,可以看到,hlink1没有什么特别之处,slink1和slink2就比较明显了,他们有指向,而且它的前面属性中有链接文件的符号。
---------------------------------------------------------------------------------------------------------------------------------
我删除了file1,再次观察的时候,我们发现hlink1还存在,但是slink1也发生了变化,slink1失效了,因为它所指向的文件被删除了,它此时是一个无效的"快捷方式"
关于硬链接和软链接的情况就说到这儿了,若是以后发现了新东西的话,我会及时来补上的。