大家好!我是大聪明-PLUS!

Linux 中的链接是指定文件和目录路径的强大工具。链接主要分为两种类型:硬链接和软链接(后者也称为符号链接或 symlink)。了解这两种类型之间的区别将有助于您有效地管理文件系统。
❯ 什么是链接?
在开始使用硬链接和软链接之前,让我们先了解一下 Linux 中的链接是什么。
每个存储设备都包含以块形式存储的文件和目录。

文件或目录的信息存储在一种称为inode 的特殊数据结构中。inode
包含元数据,例如文件的所有者、创建日期、上次访问日期、大小、访问权限,以及指向实际存储文件内容的数据块的指针等信息。
任何存储介质,例如硬盘、闪存盘等,都有其自己的 inode。这些 inode 取决于文件系统、存储信息的设备以及分区。因此,如果我们将文本文件从本地驱动器传输到闪存盘,它将获得不同的 inode。
每个索引描述符都有一个唯一的编号,文件系统可以通过该编号找到它。
目录条目本质上是由文件系统维护的一张表。该表包含文件或目录的名称,以及指向 inode 号的指针(通常以地址的形式表示)。
|---------|-------------|
| 文件名 | 索引描述符编号 |
| 报告.txt | 43132770 |
| 图像.png | 43132771 |
由于文件系统在底层管理目录条目,因此无法直接查看原始目录条目。但是,我们可以使用 ls -li 或 stat 命令查看目录中文件的相关信息,包括目录条目的 inode 编号。
链接只是文件或目录的另一个目录条目。它位于文件名和文件系统中存储的实际数据之间。通过创建链接,我们可以为同一个文件或目录创建多个目录条目(名称),从而允许对同一个对象使用两个或多个名称。
❯ 硬链接
硬链接是直接指向文件 inode 的目录条目。它的作用类似于一个单独的文件,指向硬盘上的特定位置。它是原始文件的镜像副本。让我们看看如何创建硬链接并了解其工作原理。要创建硬链接,请使用 ln 命令。
如何创建硬链接
1.创建源文件:
`echo "Hello World!" > original.txt`

2.创建硬链接:
`ln original.txt hardlink.txt`

3.检查源文件和硬链接文件的索引号:
`ls -i original.txt hardlink.txt`

我们可以看到,文件original.txt
和hardlink.txt
具有相同的inode编号,这表明它们引用相同的文件内容。
编辑硬链接
- 对硬链接进行更改
hardlink.txt
:
`echo "Nice to see you World" >> hardlink.txt`
5.检查源文件的内容 original.txt
:
`cat original.txt`

正如您所见,对 所做的更改hardlink.txt
也会反映在 中,original.txt
因为它们引用的是同一个 inode。
删除原始文件
6.删除原文件:
`rm original.txt`
7.检查硬链接内容 hardlink.txt
:
`cat hardlink.txt`

我们可以看到,文件内容仍然可以通过 hardlink.txt 访问,因为 inode 和数据块会被保留,直到所有硬链接被删除。
创建多个硬链接
8.创建另一个硬链接:
`ln hardlink.txt another-hardlink.txt`
9.检查索引描述符编号:
`ls -li hardlink.txt another-hardlink.txt`

同样,文件hardlink.txt
和another-hardlink.txt
具有相同的 inode 编号,这意味着它们引用相同的文件内容。
❯ 硬链接的优点和缺点
硬链接有以下优点:
-
高效布局:多个硬链接可以共享相同的 inode 和数据块,这意味着为同一个文件创建多个硬链接不会浪费磁盘空间。
-
文件可用性:只要文件至少存在一个硬链接,文件的数据就仍然可访问。删除一个硬链接并不会删除文件本身。
-
性能:硬链接通常比软链接更快,因为它们直接指向 inode 并且不需要路径解析。
-
透明性:硬链接的外观和功能与常规文件类似。原始文件和指向该文件的硬链接之间没有区别。
-
一致性:指向文件的所有硬链接始终保持最新。通过任何硬链接所做的更改都会立即反映在所有其他硬链接中。
虽然硬链接很有用,但它们也有一些限制:
-
目录限制:只能为常规文件创建硬链接(不能为目录或特殊文件创建)。
-
**单文件系统限制:**硬链接不能跨越多个文件系统。只有当新的硬链接与原始硬链接位于同一文件系统中时,硬链接才有效。
❯ 软链接
软链接(符号链接)是一个单独的文件,其中包含指向另一个文件或目录的路径。与硬链接不同,软链接不直接引用目标文件的 inode,而是拥有自己的 inode,并包含指向目标文件或目录的路径。
创建软链接
1.创建源文件:
`echo "Hello World" > original.txt`
- 使用以下命令创建软链接
ln -s
:
`ln -s original.txt softlink.txt`
💡 创建符号链接时,必须指定绝对路径,因为相对路径不起作用。
3.输入以下命令检查软链接:
`ls -l original.txt softlink.txt`

4.读取文件内容softlink.txt
:
`cat softlink.txt`

编辑软链接
5.编辑软链接 softlink.txt
:
`echo "Nice to see you World!" >> softlink.txt`
6.检查源文件的内容 original.txt
:
`cat original.txt`

如您所见,通过所做的更改softlink.txt
反映在中original.txt
。
移动目标文件
- 将文件移动
original.txt
到系统上的另一个位置(或删除它):
`mv original.txt ./backup/`
8.再次检查文件内容softlink.txt
:
`cat softlink.txt`

我们可以看到,软链接变成了悬空链接,因为它指向的对象已被移动到另一个位置(或者如果文件已被删除则不再存在)。
目录链接
由于软链接符合逻辑且不会重复,符号链接可以指向远程计算机上的整个目录或文件。硬链接并非为此目的而设计的。让我们来看看它是如何工作的。
9.创建文件夹和文件:
`mkdir my-folder
echo "Learn how to create soft links to folders" > my-folder/file`
soft-folder
10. 创建与目录 同名的软链接my-folder
:
`ln -s my-folder soft-folder`
11.检查链接:
`ls -l`
my-folder
12.通过符号链接访问目录soft-folder
:
`ls soft-folder`
13.删除源目录my-folder
并列出内容soft-folder
:
`rm -r my-folder
ls soft-folder`

我们可以看到,由于原始文件夹已被删除,因此显示软文件夹内容时没有任何内容。链接指向的对象已被删除,导致链接无效。
❯ 符号链接的优点和缺点
符号链接具有以下优点:
-
灵活性:软链接可以指向文件和目录,并且可以跨不同的文件系统或分区工作。
-
便捷性:使用软链接可以轻松创建快捷方式并组织文件。它们可以指向不存在的文件,并在目标文件创建后立即生效。
-
低开销:符号链接文件的大小很小,因为它们只包含目标的路径。
然而,符号链接也有缺点:
-
脆弱性:如果目标被移动、重命名或删除,它们可能会成为悬空链接。
-
性能:访问符号链接比硬链接稍慢,因为需要额外的路径解析步骤。
-
不安全性:如果管理不当,软链接可能会带来安全风险,因为它们可能指向敏感文件。
-
不同的inode:软链接有自己的inode,这会导致系统中的inode数量变得过大。