众所周知linux下有两种特殊的文件类型,一种是硬链接,一种是符号链接(软连接)。那么这两种类型有什么区别呢的?
硬连接
首先要弄清楚一点,linux下的文件名并没有存在文件自身中,而是存在其父目录内。
创建一个硬链接使用ln命令即可
ln oldfile newfile
我们来看一下硬连接文件的行为

我们可以看到,往file2写入数据,file1也是被同步更新了的,这种表述是错误的,更好的说法应该是通过~/playground/link/file1和~/playground/link/file2压根就是指向了同一个文件!换句话说我们能通过两个不同的文件名检索到同一个文件。
在这个大前提下,我们来看看删除的行为。

示意图如下,恰好印证了我们的想法,实际上,同一个文件同一时间可以被多个目录所引用,或者在同一个目录下的多个目录项引用,而且在引用时能够采用不同的名字,这种情形会给人造成一种错觉,好像一个文件可以出现在多个地方。
我们可以想象,文件是一个对象,文件系统始终维护着指向每个文件的硬链接计数,在最后一个链接删除之后才会释放掉文件的数据块,是不是有点像垃圾回收和引用计数的感觉。

软连接
还是通过ln命令来创建软连接,-s可以理解为soft的意思。
ln -s oldfile newfile
然后我们废话少说,直接看行为!

这里的行为是和硬链接一致的,通过file2是能直接修改到被链接的file1的!
我们再来看看删除的行为吧

这次把file1干掉之后,想再通过file2去查看file1的内容,这下就行不通了,这表现起来有点像我们熟悉的windows快捷方式?!
而且我们有理由推测,软连接是通过名字来指向文件的!如果在内核中在查找路径名的过程中碰到符号链接,就会转头去找该链接中所保存的文件名。
