用例子解释Linux中的软链接和硬链接

内容

  1. Linux中的软链接和硬链接是什么?
  2. 如何创建软链接或符号链接
  3. 如何创建硬链接
    1. 那么,硬链接和普通复制文件有什么区别呢?
  4. 结论

一个 象征性的 或者 软链接 是原始文件的实际链接,而 硬链接 是原始文件的镜像副本。 如果删除原始文件,软链接没有价值,因为它指向一个不存在的文件。

但在硬链接的情况下,则完全相反。 即使你删除了原始文件,硬链接仍然有原始文件的数据。 因为硬链接充当原始文件的镜像副本。

简而言之,软链接

  • 可以跨文件系统,
  • 允许您在目录之间链接,
  • 与原始文件具有不同的 inode 编号和文件权限,
  • 权限不会更新,
  • 只有原始文件的路径,没有内容。

硬链接

  • 不能跨越文件系统边界(即硬链接只能在同一个文件系统上工作),
  • 无法链接目录,
  • 具有与原始文件相同的 inode 编号和权限,
  • 如果我们更改源文件的权限,权限将被更新,
  • 具有原始文件的实际内容,因此即使原始文件被移动或删除,您仍然可以查看内容。

还是不明白? 好吧,请允许我向您展示一些实际的例子。

让我们创建一个名为 "test".

$ mkdir test

更改为 "test" 目录:

$ cd test

现在,创建一个名为 source.file 一些数据如下所示。

$ echo "Welcome to OSTechNix" >source.file

让我们查看 source.file 的数据。

$ cat source.file Welcome to OSTechNix

那么, source.file 已经被创造了。

现在,创建一个符号或软链接到 source.file.

为此,请运行:

$ ln -s source.file softlink.file

让我们比较一下两者的数据 source.filesoftlink.file.

$ cat source.file  Welcome to OSTechNix
$ cat softlink.file  Welcome to OSTechNix
查看符号链接数据

正如您在上面的输出中看到的, softlink.file 显示相同的数据 source.file.

让我们检查一下inode和权限 softlink.filesource.file.

$ ls -lia

样本输出:

total 12 11665675 drwxrwxr-x  2 sk sk 4096 Oct 17 11:39 .  4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 .. 11665731 lrwxrwxrwx  1 sk sk   11 Oct 17 11:39 softlink.file -> source.file 11665692 -rw-rw-r--  1 sk sk   21 Oct 17 11:39 source.file
检查符号链接的inode和权限

正如我们在上面的屏幕截图中看到的, 索引节点号(11665731 对比 11665692)文件权限(lrwxrwxrwx 对比 -rw-r--r--)不同的,即使 softlink.file 具有相同的内容 source.file. 因此,证明软链接不共享原始文件的相同inode号和权限。

现在,删除原始文件(即 source.file) 看看会发生什么。

$ rm source.file

检查内容 softlink.file 使用命令:

$ cat softlink.file

样本输出:

cat: softlink.file: No such file or directory
检查符号链接内容检查符号链接内容

正如您在上面看到的,没有这样的文件或目录称为 softlink.file 在我们删除原始文件后(即 source.file)。

所以,现在我们明白软链接只是指向原始文件的链接。 软链接就像文件的快捷方式。 如果您删除该文件,该快捷方式将毫无用处。

如您所知,如果您删除软链接,原始文件仍然可用。

建议阅读:

  • 如何在 Linux 上列出符号链接
  • 如何在 Linux 上查找损坏的符号链接并删除它们

创建一个名为 source.file 部分内容如下图。

$ echo "Welcome to OSTechNix" >source.file

让我们验证文件的内容。

$ cat source.file Welcome to OSTechNix

source.file 现在已经创建。

现在,让我们创建指向 source.file 如下所示。

$ ln source.file hardlink.file
创建硬链接创建硬链接

检查内容 hardlink.file

$ cat hardlink.file Welcome to OSTechNix

你看到 hardlink.file 显示与 source.file 相同的数据。

让我们检查一下inode和权限 hardlink.filesource.file.

$ ls -lia

样本输出:

total 16 11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 . 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 .. 11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file 11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file
检查硬链接的inode和权限检查硬链接的inode和权限

现在,我们看到两者 hardlink.filesource.file 有相同的 索引节点数 (11665692)文件权限(-rw-r--r--). 因此,证明硬链接文件与原始文件共享相同的 inode 数量和权限。

当心: 如果我们更改权限 source.file, 相同的权限将应用于 hardlink.file 也是。

现在,删除原始文件(即 source.file) 看看会发生什么。

$ rm source.file

检查内容 hardlink.file 使用命令:

$ cat hardlink.file

样本输出:

检查硬链接内容检查硬链接内容

如您所见,即使我删除了源文件,我也可以查看 hardlink.file. 由此证明,硬链接共享相同的inode号、原始文件的权限和数据。

您可能想知道为什么我们要创建硬链接,而我们可以轻松复制/粘贴原始文件? 创建文件的硬链接与复制文件不同。

如果您复制文件,它只会复制内容。 因此,如果您修改一个文件的内容(原始文件或硬链接),对另一个文件没有影响。

但是,如果您创建指向文件的硬链接并更改其中一个文件的内容,则更改将在两个文件中都可见。

让我们看一下source.file。

$ cat source.file  Welcome to OSTechNix

源文件有一行写着 – 欢迎来到 OSTechNix。

添加一个新行,例如“Welcome to Linux” source.file 或者 hardlink.file.

$ echo "Welcome to Linux" >>source.file

现在检查两个文件的内容。

$ cat hardlink.file  Welcome to OSTechNix Welcome to Linux
$ cat source.file  Welcome to OSTechNix Welcome to Linux
更新硬链接的内容更新硬链接的内容

看? 我们刚刚做出的改变 source.file 在两个文件中都进行了更新。 含义 – 两个文件(源和硬链接)同步。

您在任何文件中所做的任何更改都将反映在另一个文件中。 如果您通常复制/粘贴文件,您将不会在其他文件中看到任何新更改。

有关更多详细信息,请查看手册页。

$ man ln

结论

在本指南中,我们讨论了 Linux 中的软链接和硬链接,如何通过示例命令创建软链接和硬链接,最后我们解释了硬链接和普通复制文件之间的区别。

希望您对如何在 Linux 中使用符号链接或软链接和硬链接有一个基本的了解。

BASHCLI 命令行硬链接LinuxLinux 基础Linux 命令Linux 方法Linux 提示ln 命令软链接符号链接UnixUnix 基础