前言
之前一直对软链接跟硬链接有点印象,但是用的时候总是会重新翻一遍资料或者上网重新搜索,知道这两个是有区别的,但总是没记住,现在记录下来加深自己的印象。
用法
原文件
现在先生成我们的原始文件touch yuanshiwenjian,内容为this is the original file

软链接
这个时候生成原始文件的软链接
ln -s yuanshiwenjian softyuanshiwenjian
通过ll -l命令可以看到,我们链接文件的属性
lrwxrwxrwx 1 root root 14 May 22 14:52 softyuanshiwenjian -> yuanshiwenjian

对原文件进行修改,增加一行this line is add,可看到原文件跟软链接文件同步


硬链接
生成硬链接
ln -s yuanshiwenjian hardyuanshiwenjian
通过ll -l命令可以看到,我们链接文件的属性,这个时候看其实跟一个普通文件没有什么两样
-rw-r--r-- 2 root root 44 May 22 14:53 hardyuanshiwenjian

这个时候呢,无论是修改原始文件,软链接文件,硬链接文件,这三者都是同步变化的,这里就不赘述了
修改原文件

修改硬链接文件

修改软链接文件

原理
正如前面的操作,其实还是体会不出软链接跟硬链接之间的区别,但是这个时候如果对原文件进行删除操作会发生什么呢?
删除前先用stat命令看下

可以看到红框中,yuanshiwenjian和hardyuanshiwenjian其实是同一个inode,而且inode 793107表示有两个link。相反我们看softyuanshiwenjian的inode 793107跟剩下的两人不一样,link也表示只有一个。
(其实黄框中也可以看出这三者的差异,不过这个是涉及到更本质的文件系统方面的知识,等之后学习到了再回头看看,在这里就不再深入了)
这个时候如果我们删除了原始文件,可以看到软链接文件已经失效了,读取不到任何内容,而硬链接文件还保留着之前的备份

这时候用stat命令查看

可以看到对于inode 793117也就是硬链接文件跟原始文件的inode,删除了原始文件,link只是减了一,硬盘中这个inode保存的信息其实是还在的,所以前面读取硬链接文件的时候就有内容。其实这三者的关系可以用下面这张图来描述。

- 我们读取软链接文件的时候,从①出发到
inode B,这个时候inode B由着②到yuanshiwenjian,原始文件从③到inode A,其实读取软链接文件的时候经历了①②③ - 而读取原始文件跟硬链接文件都是经过③跟⑥
- ④跟⑤代表
link(自己画的线比较好理解)
当我们删除了原文件的时候,上面的图就变成了这样,因为inode A的link有两个,所以inodeA在硬盘中就没有被删除,里面的信息还在,但是读取软链接文件的时候,只有①②,没有③了

总结
- 软链接文件相当于
windows下的快捷方式图标 - 硬链接文件相当于一份同步原文件的自动备份文件(原文件没了,备份文件还在,相当于一种保护后备机制)