🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:Linux,本专栏目的在于,记录学习Linux操作系统的总结 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

很多初学者容易混淆这两个概念。让我详细解释:
特性 | 硬链接(ln) | 复制(cp) |
|---|---|---|
数据存储 | 共享同一份数据 | 独立的重复数据 |
磁盘空间 | 几乎不占用额外空间 | 占用等量空间 |
inode号 | 与源文件相同 | 新的不同inode |
修改同步 | ✅ 自动同步(修改一处,所有链接都变) | ❌ 独立修改 |
删除影响 | 删除任一链接不影响其他,直到最后一个链接 | 删除任一文件不影响其他 |
跨文件系统 | ❌ 不允许 | ✅ 允许 |
链接目录 | ❌ 不允许(特殊情况除外) | ❌ 不是链接概念 |
性能 | 创建快,几乎不耗资源 | 创建慢,需要复制数据 |
文件大小 | 显示与原文件相同 | 显示与原文件相同 |
# 创建测试环境
mkdir test_dir && cd test_dir
echo "Hello World" > original.txt
# 1. 创建硬链接
ln original.txt hardlink.txt
# 2. 创建复制
cp original.txt copy.txt
# 查看结果
ls -li输出示例:
1234567 -rw-r--r-- 2 user group 12 Jan 1 10:00 hardlink.txt
1234567 -rw-r--r-- 2 user group 12 Jan 1 10:00 original.txt
1234568 -rw-r--r-- 1 user group 12 Jan 1 10:00 copy.txt↑ 注意:hardlink.txt和original.txt的inode号相同(1234567),链接计数为2
测试显示:

# 修改原始文件
echo "Modified content" > original.txt
# 查看效果
echo "硬链接内容:"
cat hardlink.txt # 显示 "Modified content"(已同步)
echo "复制文件内容:"
cat copy.txt # 仍然显示 "Hello World"(未同步)测试结果:

# 删除原始文件
rm original.txt
# 检查剩余文件
echo "删除后硬链接内容:"
cat hardlink.txt # 仍然可以访问!显示 "Modified content"
echo "删除后复制文件内容:"
cat copy.txt # 仍然可以访问!显示 "Hello World"
# 查看inode信息
ls -li hardlink.txt copy.txt测试结果:

# 备份大文件但不重复占用空间
ln /data/bigfile.iso /backup/bigfile_backup.iso
# 两个位置访问同一份数据,不占双倍空间# 创建配置文件的"快照"
cp -l config.cfg config.cfg.backup
# 修改config.cfg,backup保留原始版本 3.多个程序需要相同数据
# 多个用户需要读取同一大文件
ln /shared/data.db ~user1/data.db
ln /shared/data.db ~user2/data.dbcp template.conf my_config.conf
# 修改my_config.conf不影响template.conf2.跨文件系统移动
cp /dev/sda1/file.txt /dev/sdb1/backup/
# 硬链接无法跨文件系统 3.创建可安全删除的副本
cp important.txt temp_working.txt
# 可以随意修改temp_working.txt,不影响原始文件硬链接:
original.txt -> inode 1000 -> 数据块
hardlink.txt -> inode 1000 -> 相同数据块
(链接计数:2)
复制:
original.txt -> inode 1000 -> 数据块A
copy.txt -> inode 1001 -> 数据块B(内容相同)
(链接计数:各自为1)# 查看完整的文件信息
stat original.txt
stat copy.txt
# 结果会显示:
# File: original.txt
# Size: 12 Blocks: 8 IO Block: 4096 regular file
# Device: fd00h/64768d Inode: 2097508 Links: 2
# Access: (0664/-rw-rw-r--) Uid: ( 1000/ tjf) Gid: ( 1000/ tjf)
# ...
# 查看inode使用情况
df -i . # 查看inode总数和使用情况
# 查看文件类型
file original.txt # ASCII text
file /bin/ls # ELF 64-bit LSB executable测试结果:
