前言
之前一直对软链接跟硬链接有点印象,但是用的时候总是会重新翻一遍资料或者上网重新搜索,知道这两个是有区别的,但总是没记住,现在记录下来加深自己的印象。
用法
原文件
现在先生成我们的原始文件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
下的快捷方式图标 - 硬链接文件相当于一份同步原文件的自动备份文件(原文件没了,备份文件还在,相当于一种保护后备机制)