关于Linux中的软链接和硬链接

大家好!我是大聪明-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.txthardlink.txt具有相同的inode编号,这表明它们引用相同的文件内容。

编辑硬链接

  1. 对硬链接进行更改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.txtanother-hardlink.txt具有相同的 inode 编号,这意味着它们引用相同的文件内容。

❯ 硬链接的优点和缺点

硬链接有以下优点:

  1. 高效布局:多个硬链接可以共享相同的 inode 和数据块,这意味着为同一个文件创建多个硬链接不会浪费磁盘空间。

  2. 文件可用性:只要文件至少存在一个硬链接,文件的数据就仍然可访问。删除一个硬链接并不会删除文件本身。

  3. 性能:硬链接通常比软链接更快,因为它们直接指向 inode 并且不需要路径解析。

  4. 透明性:硬链接的外观和功能与常规文件类似。原始文件和指向该文件的硬链接之间没有区别。

  5. 一致性:指向文件的所有硬链接始终保持最新。通过任何硬链接所做的更改都会立即反映在所有其他硬链接中。

虽然硬链接很有用,但它们也有一些限制:

  1. 目录限制:只能为常规文件创建硬链接(不能为目录或特殊文件创建)。

  2. **单文件系统限制:**硬链接不能跨越多个文件系统。只有当新的硬链接与原始硬链接位于同一文件系统中时,硬链接才有效。

❯ 软链接

软链接(符号链接)是一个单独的文件,其中包含指向另一个文件或目录的路径。与硬链接不同,软链接不直接引用目标文件的 inode,而是拥有自己的 inode,并包含指向目标文件或目录的路径。

创建软链接

1.创建源文件:

复制代码
`echo "Hello World" > original.txt`
  1. 使用以下命令创建软链接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

移动目标文件

  1. 将文件移动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-folder12.通过符号链接访问目录soft-folder

复制代码
`ls soft-folder`

13.删除源目录my-folder 并列出内容soft-folder

复制代码
`rm -r my-folder
ls soft-folder`

我们可以看到,由于原始文件夹已被删除,因此显示软文件夹内容时没有任何内容。链接指向的对象已被删除,导致链接无效。

❯ 符号链接的优点和缺点

符号链接具有以下优点:

  1. 灵活性:软链接可以指向文件和目录,并且可以跨不同的文件系统或分区工作。

  2. 便捷性:使用软链接可以轻松创建快捷方式并组织文件。它们可以指向不存在的文件,并在目标文件创建后立即生效。

  3. 低开销:符号链接文件的大小很小,因为它们只包含目标的路径。

然而,符号链接也有缺点:

  1. 脆弱性:如果目标被移动、重命名或删除,它们可能会成为悬空链接。

  2. 性能:访问符号链接比硬链接稍慢,因为需要额外的路径解析步骤。

  3. 不安全性:如果管理不当,软链接可能会带来安全风险,因为它们可能指向敏感文件。

  4. 不同的inode:软链接有自己的inode,这会导致系统中的inode数量变得过大。

相关推荐
路遥芝麻3 小时前
如何使用升腾C92主机搭建本地Linux编译服务器并通过Windows映射访问共享目录
linux·服务器·windows
ARM+FPGA+AI工业主板定制专家3 小时前
基于RK3576+FPGA的无人机飞控系统设计
linux·fpga开发·无人机·rk3588·rk3568
Anthony_2313 小时前
Dockerfile构建镜像以及网络
linux·运维·服务器·网络·docker
明月看潮生3 小时前
编程与数学 03-009 Linux 操作系统应用 16_Linux 邮件服务器
linux·运维·服务器·青少年编程·编程与数学
2302_799525743 小时前
【Shell】Shell脚本基础知识
linux·bash
conkl4 小时前
PyCharm 在 Linux 上的安装指南
linux·ide·pycharm
zhangzeyuaaa4 小时前
Linux 进程名查看与pkill命令的使用
linux·运维·服务器
美好的事情能不能发生在我身上4 小时前
Linux实用操作以及基础命令
linux·运维·服务器
笨蛋少年派4 小时前
Shell常用快捷键和常用文件操作命令
linux·运维·服务器