1.硬链接
硬链接实际上就是文件的备份,文件之所以能够在操作系统保存,就是因为有文件名与inode之间存在映射关系,而这个映射关系通常会被保存在目录中,可以用readdir系统调用进行调试观察,下面是展示运行该系统调用后样子:
可以看到存在文件名与inode之间的映射,而硬链接就是创建一个新文件例如code.hard来保存code.cpp所对应的inode,并将该对应关系保存在当前文件夹中(隐含的必须用readdir才能看见),也就是说硬链接后,文件夹会保存2份文件,code.cpp与code.hard,但是它们对应的inode都是相同的。
如下图所示:
通过ls -ln创建了code.hard为code.cpp硬链接后,其inode结果一样。且引用计数为2(ubuntu前面),当删除任意一个之后,引用计数-1,但是文件依旧保留,只有当删除全部文件后,系统发现该inode引用计数为0才会删除inode结构体里保存的内容,释放资源。
2.软链接(符号链接)
当删除code.cpp后。code.soft就会发生悬空,悬空不会发生太大危险。只是占用资源。可以看到code.soft与code.hard引用计数都是1,且各自inode是不一样的。