linux 中的硬连接和软连接有什么区别
linux 中的硬连接和软连接有什么区别
前言
在 Linux 中,硬连接(Hard Link) 和 软连接(Soft Link,也称符号链接 Symbolic Link) 都是文件系统中的链接方式,但它们在实现方式、作用机制和使用场景上有很大区别。
✅ 一图对比
特性 | 硬连接(Hard Link) | 软连接(Soft Link / Symbolic Link) |
---|---|---|
本质 | 指向同一个 inode | 创建一个指向目标路径的特殊文件 |
是否跨分区 | ❌ 不支持跨文件系统或分区 | ✅ 可以跨文件系统 |
是否能指向目录 | 一般❌(默认不允许) | ✅ 可以指向目录 |
原文件删除后是否可用 | ✅ 内容仍然可访问(还有引用) | ❌ 链接失效(称为“悬挂链接”) |
创建命令 | ln 原文件 新文件 |
ln -s 原文件 新文件 |
文件类型显示 | 普通文件 | l (在 ls -l 中会显示为链接) |
占用空间 | 不额外占用 | 占用少量磁盘空间(存储路径字符串) |
🔍 举例说明
1. 创建硬连接
touch file1.txt
ln file1.txt file1_hard.txt
特点:
- file1.txt 和 file1_hard.txt 都指向同一个 inode。
- 改动其中一个文件的内容,另一个也会同步变化。
- 删除其中一个不影响另一个文件的内容。
由于两个文件都指向同一个inode,并且删除其中一个连接不会影响另外一个的连接,所以可以利用此特性去drop mysql的大表。
2. 创建软连接
ln -s file1.txt file1_soft.txt
特点:
- file1_soft.txt 只是一个指向 file1.txt 的快捷方式。
- 删除 file1.txt 后,file1_soft.txt 会变成“断链”,打不开。
inode 概念补充
- 每个文件在 Linux 中由一个 inode 编号唯一表示。
- 硬链接本质是给同一个 inode 增加多个目录项。
- 软链接是一个新的文件,内容是目标文件的路径名。
可以用 ls -li 命令查看 inode:
ls -li file1.txt file1_hard.txt
你会看到它们的 inode 编号相同(硬链接),而软链接的 inode 不同。
总结
适用场景 | 建议使用链接类型 |
---|---|
在同一分区共享文件内容 | 硬链接 |
跨分区/指向目录或快捷方式 | 软链接 |