Hard links and Symbolic links (硬链接 VS 符号链接)

2,049 阅读4分钟

image.png

硬链接和符号链接引用之间的可视化路径差异

硬链接和符号链接是引用硬盘驱动器中文件的两种不同方法。这些方法是文件系统的一部分,用于组织文件是什么以及在哪里。硬链接本质上是文件的同步副本,它直接引用文件的 inode。另一方面,符号链接直接指向引用索引节点的文件,这是一个快捷方式。为了理解符号链接和硬链接的工作原理,我们需要了解什么是 inode。

什么是索引节点?

inode 是描述文件/目录属性的数据库,例如元数据和硬盘上的物理位置. 它们本质上是完整地址的数字等价物。使用 inode,操作系统可以检索有关文件的信息,例如权限和数据在硬盘驱动器上的物理位置,以访问文件。如果文件从一个文件夹移动到另一个文件夹,该文件将被移动到硬盘驱动器上的不同位置,其 inode 值将随之自动更改。这对于硬链接很重要。说到硬链接……

什么是硬链接?

硬链接是通过其 inode 直接引用文件。您也可以只硬链接文件而不是目录。通过使用硬链接,您可以更改原始文件的内容或位置,并且硬链接仍将指向原始文件,因为其 inode 仍指向该文件。没有对原始文件的引用。此外,硬链接只能引用同一卷内的文件,否则将需要符号链接。要创建文件的硬链接,您将需要 ln 命令并在命名硬链接之前参考源文件。下面是一个如何创建名为 test 2 的硬链接的示例。

先制作测试文件再制作硬链接test2 先制作测试文件再制作硬链接test2

文件测试应该是完全空的,我将通过硬链接向其中添加“Hello”。

image.png 通过 test2 在文件 test 中输入 Hello

image.png 打开包含 Hello 的测试 2

image.png 来自硬链接的变化反映在原始文件中

如上图所示,我通过硬链接更改了原始文件,添加了“Hello”。通过打开原始文件,“你好”这个词已经在那里了。我们可以使用 ls -i 命令进一步确保文件引用相同的 inode。

image.png test 和 test2 具有完全相同的 inode。

现在,如果我们将一个名为 test 的类似文件从不同的文件夹复制到该文件夹​​中会发生什么?对于本实验,我们将文件夹名称从“test”更改为“test folder”。

image.png 在这里我们可以看到 cp 命令并没有改变原始值的 inode 值,但是 mv 改变了。我们已将父目录中的文件复制到“testfolder”中,并且 inode 值未更改。只有当您移动文件并替换文件时,inode 值才会更改。

什么是符号链接?

符号链接本质上是引用文件而不是其 inode 值的快捷方式。这种方法可以应用于目录,并且可以跨不同的硬盘/卷进行引用。由于符号链接是指原始文件而不是其 inode 值,因此将原始文件替换到不同的文件夹将破坏符号链接,或创建悬空链接。

image.png 制作符号链接。请注意,该链接的文件名中有一个指向原始文件的箭头

由于符号链接是指向原始文件的链接,因此更改符号链接应该会更改原始文件。

image.png

更改了链接 hello_sym

image.png

更改反映在原始文件中

image.png 快速 ls -i 检查显示它们有不同的 inode

当原始文件被移动到不同的文件或被删除时,会破坏符号链接。

image.png 将原始文件移动到不同的文件夹破坏了链接

image.png 打开链接显示链接已损坏

所以符号链接可以看作是指向原始文件最后一个已知位置的静态链接。即使您将原始文件替换为具有相同名称的其他文件,该链接也应该有效。

image.png

用新内容制作了一个新文件

image.png

该链接现在再次工作

image.png

链接的内容显示新文件的内容

参考地址: medium.com/@307/hard-l…