架构狂人

V1

2023/05/12阅读:29主题:橙心

Unix/Linux 中的软链接和硬链接

UNIX 中的链接是指向文件的指针。与任何编程语言中的指针一样,UNIX 中的链接是指向文件或目录的指针。创建链接是一种访问文件的快捷方式。链接允许多个文件名在别处引用同一个文件。

有两种类型的链接:

  1. 软链接或符号链接
  2. 硬链接

当链接的源(链接到的内容)被移动或删除时,这些链接的行为会有所不同。符号链接不更新(它们仅包含一个字符串,该字符串是其目标的路径名);硬链接始终引用源,即使移动或删除。

例如,如果我们有一个文件 a.txt。如果我们创建一个文件的硬链接然后删除文件,我们仍然可以使用硬链接访问该文件。但是如果我们创建一个文件的软链接,然后删除文件,就不能通过软链接访问到文件,软链接就变成了悬空。基本上硬链接增加了一个位置的引用计数,而软链接用作快捷方式(如在 Windows 中)

1. 硬链接

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

2. 软链接

  • 软链接类似于 Windows 操作系统中使用的文件快捷方式功能。每个软链接文件都包含一个指向原始文件的独立索引节点值。与硬链接类似,对任一文件中数据的任何更改都会反映在另一个文件中。软链接可以跨不同的文件系统链接,但是如果删除或移动了原始文件,软链接文件将无法正常工作(称为挂起链接)。
  • ls -l 命令显示第一列值为 l 的所有链接?链接指向原始文件。
  • 软链接包含原始文件的路径而不是内容。
  • 删除软链接除了删除原始文件外没有任何影响,链接变成“悬挂”链接,指向不存在的文件。
  • 软链接可以链接到目录。
  • 软链接的大小等于我们给的原文件的路径长度。例如,如果我们像ln -s /tmp/hello.txt /tmp/link.txt这样链接一个文件,那么文件的大小将是 14 字节,等于“/tmp/hello.txt”的长度。
  • 如果我们更改原始文件的名称,那么该文件的所有软链接都会变得悬空,即它们现在毫无价值。
  • 跨文件系统链接:如果要跨文件系统链接文件,只能使用符号链接/软链接。
  • 创建软链接的命令是:
$ ln -s [原始文件名] [链接名]

分类:

后端

标签:

后端

作者介绍

架构狂人
V1

公众号【顶尖架构师栈】