一个快速理解“硬链接”和“软连接”的区别的例子

134 阅读2分钟

让我们用具体的例子来说明硬链接(hard link)和符号链接(symbolic link)的区别。

假设你有一个文本文件 original.txt 存放在 /home/user/documents/ 目录下。我们可以在同一个目录下创建一个硬链接和一个符号链接到这个文件。

创建文件

首先,我们需要创建一个原始文件:

touch /home/user/documents/original.txt
echo "Hello, this is the original file." > /home/user/documents/original.txt

创建硬链接 (Hard Link)

接下来,我们创建一个硬链接 hardlinked.txtoriginal.txt

ln /home/user/documents/original.txt /home/user/documents/hardlinked.txt

现在,hardlinked.txtoriginal.txt 都指向同一个文件内容。这意味着对 original.txt 的任何更改也将反映在 hardlinked.txt 中,反之亦然。

创建符号链接 (Symbolic Link)

然后,我们创建一个符号链接 symlinked.txtoriginal.txt

ln -s /home/user/documents/original.txt /home/user/documents/symlinked.txt

现在,symlinked.txt 是一个指向 original.txt 的符号链接。这意味着 symlinked.txt 实际上是一个包含 /home/user/documents/original.txt 路径的文件。

示例操作

修改文件

假设我们在 original.txt 中添加了一些内容:

echo "This is an update." >> /home/user/documents/original.txt

现在,如果我们查看 hardlinked.txtsymlinked.txt 的内容,它们都将显示更新后的内容,因为它们都指向相同的文件。

删除原始文件

如果我们删除原始文件 original.txt

rm /home/user/documents/original.txt
  • 对于硬链接 hardlinked.txt,由于它指向相同的inode,因此仍然可以访问文件内容。
  • 对于符号链接 symlinked.txt,现在将变成一个“断开”的链接,因为它所指向的文件已经被删除了。当我们尝试打开 symlinked.txt 时,会发现它不再指向任何有效的内容。

查看链接类型

我们可以使用 ls -l 命令来查看这些文件的详细信息,包括它们是否为硬链接或符号链接:

ls -l /home/user/documents/original.txt /home/user/documents/hardlinked.txt /home/user/documents/symlinked.txt

输出示例(假设原始文件的inode是1234567):

-rw-r--r-- 2 user user 43 Aug 18 19:35 /home/user/documents/original.txt
-rw-r--r-- 2 user user 43 Aug 18 19:35 /home/user/documents/hardlinked.txt
lrwxrwxrwx 1 user user 20 Aug 18 19:35 /home/user/documents/symlinked.txt -> original.txt

在这个输出中:

  • original.txthardlinked.txt 都显示了2作为链接数,表示它们共享同一个inode(1234567),并且都有两个链接指向它。
  • symlinked.txt 显示了1作为链接数,并且以 -> 开头,后面跟着目标文件的路径,表明这是一个符号链接。

这就是硬链接和符号链接的基本用法和区别。希望这些示例能够帮助您更好地理解这两种链接类型!