linux软链接与硬链接的区别

Posted by 婷 on May 22, 2022 本文总阅读量

前言

之前一直对软链接跟硬链接有点印象,但是用的时候总是会重新翻一遍资料或者上网重新搜索,知道这两个是有区别的,但总是没记住,现在记录下来加深自己的印象。

用法

原文件

现在先生成我们的原始文件touch yuanshiwenjian,内容为this is the original file

image-20220522151948360

软链接

这个时候生成原始文件的软链接

ln -s yuanshiwenjian softyuanshiwenjian

通过ll -l命令可以看到,我们链接文件的属性

lrwxrwxrwx  1 root root   14 May 22 14:52 softyuanshiwenjian -> yuanshiwenjian

image-20220522145247075

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

image-20220522145343118

image-20220522152430176

硬链接

生成硬链接

ln -s yuanshiwenjian hardyuanshiwenjian

通过ll -l命令可以看到,我们链接文件的属性,这个时候看其实跟一个普通文件没有什么两样

-rw-r--r--  2 root root   44 May 22 14:53 hardyuanshiwenjian

image-20220522152748751

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

修改原文件

image-20220522145739724

修改硬链接文件

image-20220522150007191

修改软链接文件

image-20220522150159504

原理

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

删除前先用stat命令看下

image-20220522153940139

可以看到红框中,yuanshiwenjianhardyuanshiwenjian其实是同一个inode,而且inode 793107表示有两个link。相反我们看softyuanshiwenjianinode 793107跟剩下的两人不一样,link也表示只有一个。

(其实黄框中也可以看出这三者的差异,不过这个是涉及到更本质的文件系统方面的知识,等之后学习到了再回头看看,在这里就不再深入了)

这个时候如果我们删除了原始文件,可以看到软链接文件已经失效了,读取不到任何内容,而硬链接文件还保留着之前的备份

image-20220522154419097

这时候用stat命令查看

image-20220522154619840

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

image-20220522155649965

  • 我们读取软链接文件的时候,从出发到inode B,这个时候inode B由着yuanshiwenjian,原始文件从inode A,其实读取软链接文件的时候经历了①②③
  • 而读取原始文件跟硬链接文件都是经过
  • 代表link(自己画的线比较好理解)

当我们删除了原文件的时候,上面的图就变成了这样,因为inode Alink有两个,所以inodeA在硬盘中就没有被删除,里面的信息还在,但是读取软链接文件的时候,只有①②,没有

image-20220522160205356

总结

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

链接