硬连接(Hard Link)
硬连接是多个文件名指向同一个 inode(文件内容) ,它们共享同一个数据内容,谁删了都不影响另一个。
特点:
- 每个硬链接文件完全等价,都是真实文件。
- 删除其中一个,不影响另一个。
- 不支持跨文件系统(不同磁盘/挂载点)。
- 不支持对目录创建硬链接(为了避免无限循环)。
使用
ln 原文件 新硬链接
实际使用
pnpm
软连接
软连接是一个特殊文件,内容是另一个文件的路径,相当于“快捷方式”。
✅ 特点:
- 类似 Windows 的快捷方式。
- 可以跨文件系统。
- 可以指向目录。
- 被链接文件如果被删除,软连接就失效(变成“悬挂链接”)。
使用
ln -s 原文件 软链接名
实际使用
组件库调试
拷贝(复制)
✅ 定义:
拷贝就是新建一个 inode + 新建数据块,和原文件完全独立。
✅ 特点:
- 完全复制了一份数据,占用新的磁盘空间。
- 两个文件互不影响。
- 可跨文件系统。
- 是最安全的独立备份方式。
使用
cp 原文件 目标文件
区别:
特性 | 拷贝(copy) | 软链接(symlink) | 硬链接(hard link) |
---|---|---|---|
是否独立一份 | ✅ 是 | ❌ 否,指向原文件 | ❌ 否,共享 inode |
是否共享 inode | ❌ 否 | ❌ 否 | ✅ 是 |
源文件删除后可用 | ✅ | ❌(指向失效) | ✅(数据仍在) |
是否跨文件系统 | ✅ 可以 | ✅ 可以 | ❌ 不可以(仅限同一文件系统) |
ls -l 显示区别 | 普通文件 | 有箭头 -> 指向路径 | 普通文件(和原文件完全一样) |
bash测试
#!/bin/bash
set -e
mkdir -p test_links
cd test_links
# 创建原始文件
echo "hello world" > original.txt
# 创建拷贝
cp original.txt copied.txt
# 创建软链接
ln -s original.txt symlink.txt
# 创建硬链接
ln original.txt hardlink.txt
echo "=== 初始状态 ==="
ls -li
echo
echo "=== 修改 original.txt ==="
echo "new content" > original.txt
cat copied.txt # 不变
cat symlink.txt # 改变(指向原文件)
cat hardlink.txt # 改变(共享 inode)
echo
echo "=== 删除 original.txt ==="
rm original.txt
ls -li
echo
echo "=== 访问其他文件 ==="
cat copied.txt # ✅
cat symlink.txt || echo "symlink.txt ❌失效"
cat hardlink.txt # ✅ 仍然有内容
首次执行需要赋予执行权限:chmod +x your-script.sh