Linux 将所有内容都视为文件。无论是块设备、字符设备、套接字还是命名管道,Linux 都会将它们视为文件。硬链接和软链接也是一种类型的文件,实际上是在参考原始文件创建的新文件。
![linux中软连接和硬链接的特点与区别(linux软链接和硬链接的创建、删除和更新)](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
什么是 Linux 中的硬链接
硬链接就像原始文件的镜像备份,所有的硬链接与原始文件拥有相同的 inode 编号,即使删除原始文件和其他硬链接文件,也不会对其产生任何影响,仍然可以正常读取文件内容。硬链接具有以下特征:
- 每个硬链接文件都具有与原始文件相同的 Inode 值,它们引用相同的物理文件位置。即使原始文件或其他硬链接在整个文件系统中被删除,硬链接也不会受到影响,尽管硬链接无法跨越不同的文件系统。
- ls -l 命令可以显示显示链接数。
- 硬链接有实际的文件内容
- 删除任何其他硬链接,只会减少链接数,但不会影响其他硬链接。
- 即使我们更改了原始文件的文件名,硬链接也能正常工作。
- 我们不能为目录创建硬链接以避免递归循环。
- 如果原始文件被删除,硬链接仍能显示文件的内容。
- 任何硬链接文件的内容与原始文件相同,如果我们更改任何硬链接中的内容,则所有硬链接文件的内容都会更新。
- 硬链接的缺点是不能为不同文件系统上的文件创建,也不能为特殊文件或目录创建。
- 创建硬链接的命令是: ln [original filename] [link name]
注意:不能为目录创建硬链接。
如何在 Linux 中创建硬链接
让我们看看如何使用硬链接。我们创建一个名为 file1.txt 的文件,并向其中写入一些内容。
$ cat file1.txt
![创建新文件](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
现在,运行 ls 命令,加 -i
选项来检查 file1.txt 文件的 inode 号和链接数。
$ ls -li file1.txt
![列出文件 inode 编号](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
现在,创建一个新的硬链接,并运行相同的 ls 命令来检查 inode 编号。将看到两个文件具有相同的 inode 编号。
$ ln <源文件> <目标文件>
$ln file1.txt file2.txt
![在 Linux 中创建硬链接](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
现在,我们再从 file2.txt 创建一个新的硬链接文件,该文件已经从file1.txt创建。检查链接计数,它在所有文件中更新为 3。
$ ln file2.txt /home/karthick/file3.txt
$ ls -li file2.txt /home/karthick/file3.txt
![在 Linux 中创建新的硬链接](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
如何在 Linux 中删除硬链接
现在,如果想要删除任何一个硬链接文件,所有文件中的链接计数将相应改变,但仍然可以访问文件内容。
$ rm file1.txt
要完全删除整个文件系统中的所有硬链接文件,可以使用 find 命令查找具有相同 inode 编号的文件并删除这些文件。
$ find <directory> -inum <inode-number> # SYNTAX
$ find / -inum 415314
![查找具有 inode 编号的文件](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
要删除文件,可以在 find 命令添加 exec 命令。
$ sudo find / -inum415314 -exec rm -f {} ;
![在 Linux 中删除硬链接](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
注意:当运行 find 命令时,如果希望扫描文件系统中的所有目录,最好使用 sudo。
什么是 Linux 中的软链接
软链接也被称为符号链接。创建软链接时,将创建一个新文件,该文件将指向原始文件。可以将软链接视为文件的快捷方式。与原始文件相比,软链接有不同的 Inode 编号。软连接具有以下特征:
- 软链接类似于 Windows 操作系统中的文件快捷方式。每个软链接文件都包含一个单独的 Inode 值,指向原始文件。与硬链接类似,对任一文件中的数据的任何更改都会影响其他文件。软链接可以跨不同的文件系统,但如果原始文件被删除或移动,软链接文件将无法正常工作。
- ls -l 命令显示第一列值为 l 的所有链接?并且链接指向原始文件。
- 软链接只是指向原始文件的路径而不包含内容。
- 删除软链接不会对原始文件产生任何影响,但是删除了原始文件,软链接将无法正常工作。
- 软链接可以链接到目录。
- 如果我们更改原始文件的名称,那么该文件的所有软链接都无法正常工作。
- 跨文件系统链接:如果要跨文件系统链接文件,只能使用软链接。
- 创建软链接的命令是: ln -s [original filename] [link name]
$ cat > slink.txt
$ ls -li slink.txt
![在 Linux 中创建文件](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
如何在 Linux 中创建软链接
现在,创建一个新的软链接,并运行相同的 ls 命令来检查 inode 编号。会看到两个文件具有不同的 inode 编号。此外,每个文件的链接数都为 1 。
$ ln -s <source> <destination> # 语法
$ ln -s file1.txt file2.txt
![在 Linux 中创建软链接](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
看看上图中的链接数,软链接总是为 1,因为所有文件都有一个单独的 Inode 编号。现在,如果删除软链接,它将不会对原始文件产生任何影响。
# grep ^ ./slink* # 显示file1、file2的内容
# rm slinked_linked.txt
![在 Linux 中删除软链接](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
如果删除原始文件,软链接文件将无法再继续访问。
$ ls -li
$ rm slink.txt
$ ls -li
$ cat slink_linked.txt
![删除父文件](https://www.niuqi360.com/wp-content/uploads/2021/02/2021022710242555.png)
有时我们在删除了原始文件后,却忘记删除所有软链接文件。我们可以通过运行以下命令,来检查和清除所有孤立的软链接。Find 命令将尝试从 /home/ 目录中查找所有孤立的软链接,并将删除这些软链接。
# find -L /home/ -type l -delete
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/hardlinks-and-softlinks-in-linux/