本文知识点:
- 软链接概念
- 硬链接概念
- 软链接和硬链接对比
linux
的文件链接有两种,分别为软连接(符号链接)和硬链接,对应的命令是ln
1. 软链接概念
软连接
也称为符号链接,也有人称它为快捷方式
,因为它的逻辑很像是windows的快捷方式。软连接文件实际上是一个文本文件,包含的内容是链接的文件的位置信息。
2. 硬链接概念
硬链接
是通过索引节点
进行链接的。硬链接就是多个文件指向了同一个索引节点
,可以理解为C语言的指针
,指向了同一块地址。很好理解:如果f2
是f1
的硬链接,那么他们两个指向了同一块地址,此时删除f1
,f2
的内容依然不会被删除,也就是说这块地址的内容不会被清除。这样的特性的用法就是:为关键的文件设置多个硬链接
,这样误删除的话不会导致这块内容的清除,因为还有其他链接指向这块地址。
索引节点:在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
注: 我们可以看到,f1
和 f2
的索引节点是一样的1314303
,他们是硬链接。
f1
和 f3
的索引节点不同,说明f3
是一个单独问文件,它指向的是f1
。
3.3 向f1
写内容观察f2
和f3
echo "hello link f1" >> f1
cat f1
#hello link f1
cat f2
#hello link f1
cat f3
#hello link f1
注:此时可以看到三个文件输出的内容和f1
一模一样。
3.4 删除f1
观察f2
和f3
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
的硬链接已经断开了