关于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数量变得过大。

相关推荐
虾..4 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙4 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh1236 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen7 小时前
Linux字符串处理
linux·string
张童瑶7 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功1237 小时前
什么是SELinux
linux
石小千7 小时前
Linux安装OpenProject
linux·运维
柏木乃一7 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-30907 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯8 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix