1、Linux 链接的概念
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link,也称为软链接)。默认情况下,ln 命令产生硬链接。
硬链接
硬链接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件,无论其是什么类型,都会给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是允许的。通常,这种连接就是硬链接。
硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。其原因是,由于对应该文件的索引节点有一个以上的连接,只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,在 Linux 系统,要实现真正删除一个文件,要求与该文件相关的所有硬链接均被删除。
软链接
另外一种连接称之为符号链接(Symbolic Link),也叫软链接。软链接文件有类似于 Windows 的快捷方式。在符号链接中,文件实际上是一个特殊的文本文件,其中包含的有另一文件的位置信息。
2、硬链接/软链接实操
下面,我们通过一些实验,来验证 Linux 的硬链接和软链接的行为。
# 创建一个测试文件 file1
$ touch file1
# 创建 file1 的一个硬链接文件 file2
$ ln file1 file2
# 创建 file1 的一个符号链接文件 file3
$ ln -s file1 file3
# -i 参数显示文件的 inode 节点信息
$ ls -li
total 0
8504662 -rw-r--r-- 2 docker staff 0 Oct 19 13:52 file1
8504662 -rw-r--r-- 2 docker staff 0 Oct 19 13:52 file2
8504663 lrwxrwxrwx 1 docker staff 2 Oct 19 13:52 file3 -> file1
从上面的结果中可以看出,硬链接文件 file2 与原文件 file1 的 inode 节点相同(都是 8504662),然而符号链接文件的 inode 节点不同。
让我们继续测试。
# 向 file1 输入内容
$ echo "I am file1 file" >> file1
# 查看 file1 文件的内容
$ cat file1
I am file1 file
# 查看 file2 文件的内容
$ cat file2
I am file1 file
# 查看 file3 文件的内容
$ cat file3
I am file1 file
# 删除 file1 文件
$ rm -f file1
# 查看 file2 文件的内容
$ cat file2
I am file1 file
# 查看 file3 文件的内容
$ cat file3
cat: file3: No such file or directory
通过上面的测试可以看出:当删除原始文件 file1 后,硬链接 file2 不受影响,但是符号链接 file3 文件无效。
3、总结
根据上面的相关的测试,我们可以得出以下结论:
- 删除符号链接 file3,对 file1 和 file2 无影响;
- 删除硬链接 file2,对 file1 和 file3 也无影响;
- 删除原文件 file1,对硬链接 file2 没有影响,但符号链接 file3 会失效;
- 同时删除原文件 file1 和硬链接 file2,整个文件会真正的被删除。
全文完,感谢阅读!