「Linux 系统编程」软链接和硬链接

1 索引节点 Inode

文件在 Linux 中通过索引节点(Inode) 管理,Inode 包含文件的元数据(如权限、大小、修改时间等),而文件名只是 Inode 的 “别名”。


2 硬链接

2.1 硬链接基本概念

硬链接:直接关联到文件的 Inode,相当于给原文件的 Inode 新增一个文件名。多个硬链接指向同一个 Inode,它们在文件系统中是平等的。

2.2 创建硬链接

1
ln [原文件路径] [硬链接路径]

创建硬链接后,文件的硬链接计数 +1。删除一个硬链接,计数 -1。当计数减为 0 时,文件数据才会被真正删除(释放磁盘空间)

创建的硬链接大小与原文件相同(共享同一份数据),文件与其对应的硬链接的 Inode 是相同的。通过硬链接对文件进行修改,其对应的原文件也会跟着被修改

在下面的示例中,通过 ln file.txt file_hard.txt 创建了一个 硬链接,可以看到原文件和 硬链接 的大小是一样的。原文件的硬链接计数从 1 变为了 2。

在下面的示例中,对硬链接中的内容进行修改,其指向的原文件的内容也跟着被修改了。


2.3 硬链接适用场景

  • 需在同一文件系统内创建多个文件入口(如简化复杂路径访问)。
  • 希望原文件被误删时仍能通过其他硬连接访问数据(类似 “备份” 但不占用额外空间)。

3 软链接

3.1 软链接基本概念

软链接:是一个 独立的文件,其 内容是指向原文件的路径(类似 Windows 的 “快捷方式”),通过路径间接访问原文件。

3.2 创建软链接

1
ln -s [原文件路径] [软链接路径]

软链接 是一个 独立的文件,ls -l 中,软连接以 “l” 开头(类型标识),且路径后会显示 -> 原文件路径。

在下面的示例中,通过 ln -s /home/file.txt file_soft.txt 创建了一个软链接。可以看到,软链接的大小正好对应原文件的路径。

注意:软链接文件的文件权限是软链接其本身的文件权限。

在下面的示例中,通过软链接打开文件会自动解析指向原文件的路径,因此进行修改的就是原文件的内容:


3.3 软链接的失效问题

Linux 下的软链接虽然和 Windows 下的快捷方式差不多,但是 如果用相对路径创建的软链接,在 软链接移动之后就会失效,无法访问。这一点和 Windows 快捷方式不同。

在下面的示例中,采用相对路径创建了一个软链接 file_soft_2.txt。通过 mv 命令将其移动到其他目录下,可以发现软链接失效了。

因此,在创建软链接时,尽量采用绝对路径,这样可以避免软链接失效的问题。

3.4 软链接适用场景

  • 需关联目录(如将 /usr/local/app 链接到 /app 简化访问)。
  • 需清晰区分链接与原文件(通过 ls -l 可直观识别)。
  • 需临时关联文件(原文件移动后可重新创建软连接指向新路径)。

「Linux 系统编程」软链接和硬链接
https://marisamagic.github.io/2025/08/02/20250802/
作者
MarisaMagic
发布于
2025年8月2日
许可协议