硬连接 软连接 拷贝

12 阅读2分钟

硬连接(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