linux中的软链接和硬链接

刚学习linux就知道linux中的链接有两种,符号链接和硬链接。但是两者之间的区别又是怎样的呢?有些教材是翻译的英文,导致一些理解上很费解,其实这种问题很简单,那就是自己动手测试一下。

1. 符号链接

符号链接使用-s选项创建,例如我们有一个文件sss.txt,创建符号链接的命令是:

ln -s sss.txt ttt.txt

此处的-s是指的symbolic,不过国内也有人喜欢叫做软链接,导致一些人以为s的意思是soft。

在ubuntu中,符号链接文件和源文件显示如下:

  可以看到符号链接的文件,有一个类似windows系统下快捷方式的小箭头。

首先,符号链接文件和原来的文件,文件大小、内容不同,而且是两个完全不同的文件,这个可以通过inode确认。

可以看到sss.txt文件大小是67字节,而ttt.txt文件大小为7字节。两个文件的inode分别是1836284和1835050,说明确实是两个不同的文件。

其次,在访问时的作用。如果我用文本编辑器打开sss.txt,输入一些内容然后保存,然后用文本编辑器再打开ttt.txt,可以看到其内容也产生了变化。反过来,我继续在ttt.txt中输入一些字符保存后,再打开sss.txt,则其中内容也产生变化。

最后我们我们还可以看到,即使内容产生变化,两个文件的大小变化情况:

  sss.txt文件大小已经变为89字节了,而ttt.txt文件大小仍旧为7字节,因为它仅仅指向了sss.txt文件, 符号链接文件和windows平台下的快捷方式很像。

 2. 硬链接

创建硬链接的时候不需要带选项,我们再给sss.txt创建一个ppp.txt的硬链接,命令如下:

ln sss.txt ppp.txt

 从ls显示的结果来看,ppp.txt和sss.txt之间看起来没什么关系。但是如果我们用文本编辑器打开sss.txt或者ppp.txt,对一个文件内容的修改,同样也会在另外一个文件中得到体现,这一点和之前的符号链接倒是一致的。

此外,ppp.txt和sss.txt两个文件大小都是89字节,我们自然会想到,他们是否是同样一个文件呢?看看i-node吧:

 可以看到,带有硬链接的文件共享inode编号 ,说明这两文件就是同一个文件。

3. 区别

测试了这么多,是时候做一下总结了。

重点:

理解这两种不同的链接,其关键是理解文件的i-node。i-node与原文件相同,就是硬链接, 不同就是软连接。

 相同点:

1)创建链接的命令都是ln。

2)对原文件内容的修改,都会反映到链接文件上,反过来也一样,也就是所谓的同步更新。

不同点:

1)符号链接是一个新的文件(i-node不同),硬链接是同一个文件(i-node相同)

2)你可以为不存在文件,或者文件夹创建符号链接(虽然没啥用),但不能通过不存在的文件创建硬链接。

3)只能对处于同一存储媒体的文件创建硬链接。要想在不同存储媒体的文件之间创建链接, 只能使用符号链接

4)软链接会因为原文件的删除、重命名等导致不可用(软连接可以认为是原文件的一个附庸),而硬连接不会(所有硬链接创建的文件和原文件地位相同,没有主次之分)

例如,我们把sss.txt重命名为aaa.txt,ppp.txt可以正常访问和使用,而且更新也会在aaa.txt中得到体现,但是ttt.txt已经不可用了。

但是ppp.txt就不一样了,你在ppp.txt中的修改都会在aaa.txt中得到反映,而且你把ppp.txt放到其他的路径(同一存储媒体)下,其效果也是一样的。

 总的来说,对于一个习惯了使用windows系统的人来说,符号链接由于有快捷方式这种类似的概念,因此相对来说更好理解一点,而硬链接在windows中似乎没有对应方式。

posted @ 2021-06-23 13:51  castor_xu  阅读(243)  评论(0编辑  收藏  举报