linux软链接和硬链接详解

1,086 阅读3分钟

本文知识点:

  1. 软链接概念
  2. 硬链接概念
  3. 软链接和硬链接对比

linux的文件链接有两种,分别为软连接(符号链接)和硬链接,对应的命令是ln

1. 软链接概念

软连接也称为符号链接,也有人称它为快捷方式,因为它的逻辑很像是windows的快捷方式。软连接文件实际上是一个文本文件,包含的内容是链接的文件的位置信息。

2. 硬链接概念

硬链接是通过索引节点进行链接的。硬链接就是多个文件指向了同一个索引节点,可以理解为C语言的指针,指向了同一块地址。很好理解:如果f2f1的硬链接,那么他们两个指向了同一块地址,此时删除f1f2的内容依然不会被删除,也就是说这块地址的内容不会被清除。这样的特性的用法就是:为关键的文件设置多个硬链接,这样误删除的话不会导致这块内容的清除,因为还有其他链接指向这块地址。

索引节点:在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号。

3. 软链接和硬链接对比

此部分通过实验来对比软链接和硬链接

3.1 创建一个文件f1

touch f1

3.2 创建硬链接f2+软连接f3

ln f1 f2
ln -s f1 f3

ls -li # -i 显示索引节点 
总用量 0
1314303 -rw-r--r-- 2 root root 0 11月 17 21:48 f1
1314303 -rw-r--r-- 2 root root 0 11月 17 21:48 f2
1314304 lrwxrwxrwx 1 root root 2 11月 17 21:50 f3 -> f1

注: 我们可以看到,f1f2 的索引节点是一样的1314303,他们是硬链接。 f1f3 的索引节点不同,说明f3是一个单独问文件,它指向的是f1

3.3 向f1写内容观察f2f3

echo "hello link f1" >> f1
cat f1
#hello link f1
cat f2
#hello link f1
cat f3
#hello link f1

注:此时可以看到三个文件输出的内容和f1一模一样。

3.4 删除f1观察f2f3

rm -f f1
ls -li
#总用量 4
#1314303 -rw-r--r-- 1 root root 14 11月 17 21:54 f2
#1314304 lrwxrwxrwx 1 root root  2 11月 17 21:50 f3 -> f1
cat f2
#hello link f1
cat f3
#cat: f3: 没有那个文件或目录

注: 我们可以看到f2正常输出,而且索引节点没有发生改变,但是f3已经找不到文件了,因为它所包含的内容是f1这个文件,但是f1这个文件已经没有了(截图中f3也变成了红色),所以f3无法正常输出。

我就在思考,f3存的是f1的什么呢??

于是我在刚才的基础之上,重新创建了一个名称也为f1的文件

touch f1
ls -li
#总用量 4
#1314305 -rw-r--r-- 1 root root  0 11月 17 21:59 f1
#1314303 -rw-r--r-- 1 root root 14 11月 17 21:54 f2
#1314304 lrwxrwxrwx 1 root root  2 11月 17 21:50 f3 -> f1

重新修改f1的内容,观察f1/f2/f3

echo "I am new f1 " >>f1
cat f1
#I am new f1
cat f2
#hello link f1
cat f3
#I am new f1

可以发现,f3软链接f1是根据文件名链接的,我们删除了f1之后,又创建了新的名称为f1的文件,可以发现两次的f1的索引节点变了,但是f3始终保持和f1的软连接,此时f2的硬链接已经断开了