「Linux 系统编程」软链接和硬链接
1 索引节点 Inode
文件在 Linux 中通过索引节点(Inode) 管理,Inode 包含文件的元数据(如权限、大小、修改时间等),而文件名只是 Inode 的 “别名”。
2 硬链接
2.1 硬链接基本概念
硬链接:直接关联到文件的 Inode,相当于给原文件的 Inode 新增一个文件名。多个硬链接指向同一个 Inode,它们在文件系统中是平等的。
2.2 创建硬链接
1 |
|
创建硬链接后,文件的硬链接计数 +1。删除一个硬链接,计数 -1。当计数减为 0 时,文件数据才会被真正删除(释放磁盘空间)。
创建的硬链接大小与原文件相同(共享同一份数据),文件与其对应的硬链接的 Inode 是相同的。通过硬链接对文件进行修改,其对应的原文件也会跟着被修改。
在下面的示例中,通过 ln file.txt file_hard.txt
创建了一个 硬链接,可以看到原文件和 硬链接 的大小是一样的。原文件的硬链接计数从 1 变为了 2。
在下面的示例中,对硬链接中的内容进行修改,其指向的原文件的内容也跟着被修改了。
2.3 硬链接适用场景
- 需在同一文件系统内创建多个文件入口(如简化复杂路径访问)。
- 希望原文件被误删时仍能通过其他硬连接访问数据(类似 “备份” 但不占用额外空间)。
3 软链接
3.1 软链接基本概念
软链接:是一个 独立的文件,其 内容是指向原文件的路径(类似 Windows 的 “快捷方式”),通过路径间接访问原文件。
3.2 创建软链接
1 |
|
软链接 是一个 独立的文件,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 可直观识别)。
- 需临时关联文件(原文件移动后可重新创建软连接指向新路径)。