硬链接与软链接详解

819

引言

Linux基础是非常重要得,无论是工作还是我们平时得学习,掌握Linux对你的学习道路一定能提供不少帮助。

下面简单的介绍下Linux中的硬链接软连接,为了你更好的理解我下面的分享,你需要掌握Linux中的inode概念,如果你还不知道,推荐你到我的另一篇分享,先了解inode。传送门

硬链接

什么是硬链接

Linux中文件的inode号码与文件名一般都是一对一的关系,但是也可以多个一对多(多个文件名指向一个inode号码),称为硬链接。

特点

  1. 可以用不同的文件名访问同样的内容

  2. 对其中一个文件内容修改时,会影响到其他文件的内容。

  3. 删除其中一个文件时,其他文件可以正常访问,不受影响

实例

首先,创建一个测试文件一,并写入 "做个哎记录的人"

vim 1.txt

Laravel

接着创建一个硬链接

格式:ln 源文件 目标文件

ln 1.txt 2.txt

Laravel

可以看到执行命令后多了个2.txt

我们打开2.txt看看~~

vim 2.txt

Laravel

发现内容跟1.txt 一样,跟copy差不多,但也是有取别:

硬链接,无论是修改源文件还是目标文件,是会影响其它文件的,而copy后的文件修改是不会影响源文件的,而为什么不会影响到呢,无非就是inode的问题

我 copy 2.txt 到 3.txt,

我们可以通过一下命令来查看区别:

ls -i

Laravel

从图中可以发现, 1和2的 inode号码是一样的,所以修改其中一个文件,其余文件内容会随之变化. copy出来的3.txt 生成了个新的inode号码,所以是不会影响源文件的。所以验证了我们上面那个结论。

我们再验证一下,修改 inode号码一样的文件,其它文件是否会随之改变。

我打开2.txt 修改里面的内容,看1.txt是否有更新

Laravel

发现1.txt也更新了

验证了我们的1,2条结论。

那我们把 2.txt 删除试试

Laravel

发现 1.txt 还在,第三条结论也没有问题。

软链接

通过上面的验证,相信大家对Linux 的硬链接,应该掌握得差不多了,那我们接着来讲讲软连接,如果你已经掌握了硬链接,那软连接 很快就能掌握。

硬链接和软连接区别

  1. 硬链接inode号码一致,软连接相反。

  2. 硬链接读的内容是不同文件的内容,软连读的是源文件的内容。

实例

通过以下命令创建一个软连接

命令结构:ln 源文件 目标文件

ln -s 1.txt 2.txt

Laravel

观察2.txt 后面,什么意思呢,就是 把2.txt路径指向1.txt的路径,当我们访问2.txt的时候,实际读取的是1.txt的内容。

我们访问 2.txt看看

vim 2.txt

Laravel

内容一致,没问题。怎么验证我们上面说的实际读取的是1.txt的内容呢?很好验证,我们把1.txt删除了。

Laravel

明显看到,删除1.txt 后 字变红了,为什么呢?很好理解,有错误,文件找不到了嘛,我们把1.txt删除了,而2.txt还指向1.txt,一个不存在的文件。

我们试着访问下2.txt

cat 2.txt

Laravel

发现报了个错误,文件找不到,所以我们的结论没有问题。

篇尾

相信到这里你对Linux的 inode 、硬链接、软连接已经掌握得差不多了,希望能帮助到在看得你。

个人博客

原文