软链接就类似快捷方式,或者网页上超级链接:跟原文件一样,也同步更新,但不占空间。如果原文件被删除,那磁盘空间立刻释放(文件真没了),软链接本身不会被删除,但由于指向的文件已经不在了,所以链接会失效。
软连接很常用(相比硬链接)。比如你有一个软件需要读取cc.conf这个配置文件,但你有好几套配置文件,常规的方法是用哪套就把哪套改名(或复制)成cc.conf,不用的暂时就叫cc1.conf,cc2.conf这样。
但这样有很多问题,第一,不看内容你也不知道现在的cc.conf到底是哪一套。第二,如果是改名,改来改去容易把文件弄丢。如果是复制,你修改了cc.conf还要记得复制一下,不然下次一切换就修改的部分就丢了。
用软链接就很容易了,你把cc.conf做成软链接,想用哪个就指向哪个就行了。想看当前用的是哪个ls -l就能看到,所有修改都会同步,你还不怕把foo.conf会弄丢。
硬链接跟软链接差不多,但指向的不是文件,而是底层的文件系统。也就是如果原文件被删,磁盘空间并不会释放,硬链接也不会失效。如果要删掉文件(释放空间),就要删掉它所有的硬链接。
硬链接用的少,但有一些很有意思的用法,比如增量备份。
假设你有很多很重要的文件,需要每天备份一次,因为有些时候需要回溯到某特定一天的版本。最简单粗暴的办法就是每天备份一次,但长期下来容量必然吃不消。所以我们用硬链接来做增量备份。
硬链接增量备份的原理如下图所示
第一天,备份为Backup 1,里面有三个文件,没什么好说的。
第二天,备份为Backup 2,还是三个文件,但File3修改了。这样File1,File2做硬链接,File3保存新版
这样文件系统上其实只存了File1,File2,File3和修改过的File3,但你在第一天和第二天的文件夹里可以看到当天完整的File1,File2和File3。这样即使每天备份一次,其实也占不了多少空间,但却可以像每天备份一次那样,可以在指定日期的文件夹里找到所有文件那一天的版本。
更妙的是删除的时候也会智能释放空间,比如上图的情况,这时候如果删除第一天的备份(Backup 1),File1和File2由于还有第二天的硬链接,所以不会被删除。File3(Changed)会保留,但第一天版本的File3则会被删除,释放空间。
所以你还可以把备份规则写到风骚,比如过去1周每天保留一个备份,一周以前一个月以内每三天保存一个备份,之后每周保存一个版本,最多保存过去一年的,之类的。