linux中软连接和硬链接的特点与区别(linux软链接和硬链接的创建、删除和更新)

Linux 将所有内容都视为文件。无论是块设备、字符设备、套接字还是命名管道,Linux 都会将它们视为文件。硬链接软链接也是一种类型的文件,实际上是在参考原始文件创建的新文件。

linux中软连接和硬链接的特点与区别(linux软链接和硬链接的创建、删除和更新)
linux中软连接和硬链接的特点与区别(linux软链接和硬链接的创建、删除和更新)

什么是 Linux 中的硬链接

硬链接就像原始文件的镜像备份,所有的硬链接与原始文件拥有相同的 inode 编号,即使删除原始文件和其他硬链接文件,也不会对其产生任何影响,仍然可以正常读取文件内容。硬链接具有以下特征:

  • 每个硬链接文件都具有与原始文件相同的 Inode 值,它们引用相同的物理文件位置。即使原始文件或其他硬链接在整个文件系统中被删除,硬链接也不会受到影响,尽管硬链接无法跨越不同的文件系统。
  • ls -l 命令可以显示显示链接数。
  • 硬链接有实际的文件内容
  • 删除任何其他硬链接,只会减少链接数,但不会影响其他硬链接。
  • 即使我们更改了原始文件的文件名,硬链接也能正常工作。
  • 我们不能为目录创建硬链接以避免递归循环。
  • 如果原始文件被删除,硬链接仍能显示文件的内容。
  • 任何硬链接文件的内容与原始文件相同,如果我们更改任何硬链接中的内容,则所有硬链接文件的内容都会更新。
  • 硬链接的缺点是不能为不同文件系统上的文件创建,也不能为特殊文件或目录创建。
  • 创建硬链接的命令是: ln [original filename] [link name]

注意:不能为目录创建硬链接。

如何在 Linux 中创建硬链接

让我们看看如何使用硬链接。我们创建一个名为 file1.txt 的文件,并向其中写入一些内容。

$ cat file1.txt
创建新文件
创建新文件

现在,运行 ls 命令,加 -i 选项来检查 file1.txt 文件的 inode 号和链接数。

$ ls -li file1.txt
列出文件 inode 编号
列出文件 inode 编号

现在,创建一个新的硬链接,并运行相同的 ls 命令来检查 inode 编号。将看到两个文件具有相同的 inode 编号。

$ ln <源文件> <目标文件>
$ln file1.txt file2.txt
在 Linux 中创建硬链接
在 Linux 中创建硬链接

现在,我们再从 file2.txt 创建一个新的硬链接文件,该文件已经从file1.txt创建。检查链接计数,它在所有文件中更新为 3。

$ ln file2.txt /home/karthick/file3.txt
$ ls -li file2.txt /home/karthick/file3.txt
在 Linux 中创建新的硬链接
在 Linux 中创建新的硬链接

如何在 Linux 中删除硬链接

现在,如果想要删除任何一个硬链接文件,所有文件中的链接计数将相应改变,但仍然可以访问文件内容。

$ rm file1.txt

要完全删除整个文件系统中的所有硬链接文件,可以使用 find 命令查找具有相同 inode 编号的文件并删除这些文件。

$ find <directory> -inum <inode-number> # SYNTAX
$ find / -inum 415314  
查找具有 inode 编号的文件
查找具有 inode 编号的文件

要删除文件,可以在 find 命令添加 exec 命令。

$ sudo find / -inum415314 -exec rm -f {} ;
在 Linux 中删除硬链接
在 Linux 中删除硬链接

注意:当运行 find 命令时,如果希望扫描文件系统中的所有目录,最好使用 sudo

什么是 Linux 中的软链接

软链接也被称为符号链接。创建软链接时,将创建一个新文件,该文件将指向原始文件。可以将软链接视为文件的快捷方式。与原始文件相比,软链接有不同的 Inode 编号。软连接具有以下特征:

  • 软链接类似于 Windows 操作系统中的文件快捷方式。每个软链接文件都包含一个单独的 Inode 值,指向原始文件。与硬链接类似,对任一文件中的数据的任何更改都会影响其他文件。软链接可以跨不同的文件系统,但如果原始文件被删除或移动,软链接文件将无法正常工作。
  • ls -l 命令显示第一列值为 l 的所有链接?并且链接指向原始文件。
  • 软链接只是指向原始文件的路径而不包含内容。
  • 删除软链接不会对原始文件产生任何影响,但是删除了原始文件,软链接将无法正常工作。
  • 软链接可以链接到目录。
  • 如果我们更改原始文件的名称,那么该文件的所有软链接都无法正常工作。
  • 跨文件系统链接:如果要跨文件系统链接文件,只能使用软链接。
  • 创建软链接的命令是: ln -s [original filename] [link name]
$ cat > slink.txt
$ ls -li slink.txt
在 Linux 中创建文件
在 Linux 中创建文件

如何在 Linux 中创建软链接

现在,创建一个新的软链接,并运行相同的 ls 命令来检查 inode 编号。会看到两个文件具有不同的 inode 编号。此外,每个文件的链接数都为 1 。

$ ln -s <source> <destination> # 语法
$ ln -s file1.txt file2.txt
在 Linux 中创建软链接
在 Linux 中创建软链接

看看上图中的链接数,软链接总是为 1,因为所有文件都有一个单独的 Inode 编号。现在,如果删除软链接,它将不会对原始文​​件产生任何影响。

# grep ^ ./slink* # 显示file1、file2的内容
# rm slinked_linked.txt
在 Linux 中删除软链接
在 Linux 中删除软链接

如果删除原始文件,软链接文件将无法再继续访问。

$ ls -li
$ rm slink.txt
$ ls -li
$ cat slink_linked.txt
删除父文件
删除父文件

有时我们在删除了原始文件后,却忘记删除所有软链接文件。我们可以通过运行以下命令,来检查和清除所有孤立的软链接。Find 命令将尝试从 /home/ 目录中查找所有孤立的软链接,并将删除这些软链接。

# find -L /home/ -type l -delete

原创文章,作者:牛奇网,如若转载,请注明出处:https://www.niuqi360.com/linux/hardlinks-and-softlinks-in-linux/

发表评论

登录后才能评论