首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >硬链接(ln) vs 复制(cp)的详细区别

硬链接(ln) vs 复制(cp)的详细区别

作者头像
一个平凡而乐于分享的小比特
发布2026-02-02 16:56:47
发布2026-02-02 16:56:47
840
举报

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

在这里插入图片描述
在这里插入图片描述

硬链接(ln) vs 复制(cp)的详细区别

很多初学者容易混淆这两个概念。让我详细解释:

一、核心本质区别

硬链接(ln)
  • 多个文件名指向同一份数据
  • 创建的是新的目录条目,指向相同的inode
  • 不占用额外的磁盘空间(除了目录条目本身)
  • 所有链接都是平等的,没有"原始"和"副本"之分
复制(cp)
  • 创建全新的独立文件
  • 分配新的inode和数据块
  • 占用与原文件相同的磁盘空间
  • 有明确的"源文件"和"目标文件"之分

二、详细对比表格

特性

硬链接(ln)

复制(cp)

数据存储

共享同一份数据

独立的重复数据

磁盘空间

几乎不占用额外空间

占用等量空间

inode号

与源文件相同

新的不同inode

修改同步

✅ 自动同步(修改一处,所有链接都变)

❌ 独立修改

删除影响

删除任一链接不影响其他,直到最后一个链接

删除任一文件不影响其他

跨文件系统

❌ 不允许

✅ 允许

链接目录

❌ 不允许(特殊情况除外)

❌ 不是链接概念

性能

创建快,几乎不耗资源

创建慢,需要复制数据

文件大小

显示与原文件相同

显示与原文件相同


三、直观示例演示

代码语言:javascript
复制
# 创建测试环境
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

输出示例:

代码语言:javascript
复制
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

测试显示:

在这里插入图片描述
在这里插入图片描述

四、修改测试

代码语言:javascript
复制
# 修改原始文件
echo "Modified content" > original.txt

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

测试结果:

在这里插入图片描述
在这里插入图片描述

五、删除测试

代码语言:javascript
复制
# 删除原始文件
rm original.txt

# 检查剩余文件
echo "删除后硬链接内容:"
cat hardlink.txt    # 仍然可以访问!显示 "Modified content"
echo "删除后复制文件内容:"
cat copy.txt        # 仍然可以访问!显示 "Hello World"

# 查看inode信息
ls -li hardlink.txt copy.txt

测试结果:

在这里插入图片描述
在这里插入图片描述

六、实际应用场景对比

适合使用硬链接的情况:
  1. 备份但节省空间
代码语言:javascript
复制
# 备份大文件但不重复占用空间
ln /data/bigfile.iso /backup/bigfile_backup.iso
# 两个位置访问同一份数据,不占双倍空间
  1. 版本快照
代码语言:javascript
复制
# 创建配置文件的"快照"
cp -l config.cfg config.cfg.backup
# 修改config.cfg,backup保留原始版本

​ 3.多个程序需要相同数据

代码语言:javascript
复制
# 多个用户需要读取同一大文件
ln /shared/data.db ~user1/data.db
ln /shared/data.db ~user2/data.db
适合使用复制的情况:
  1. 需要独立修改
代码语言:javascript
复制
cp template.conf my_config.conf
# 修改my_config.conf不影响template.conf

2.跨文件系统移动

代码语言:javascript
复制
cp /dev/sda1/file.txt /dev/sdb1/backup/
# 硬链接无法跨文件系统

​ 3.创建可安全删除的副本

代码语言:javascript
复制
cp important.txt temp_working.txt
# 可以随意修改temp_working.txt,不影响原始文件

七、技术细节深入

文件系统层面
代码语言:javascript
复制
硬链接:
original.txt -> inode 1000 -> 数据块
hardlink.txt -> inode 1000 -> 相同数据块
(链接计数:2)

复制:
original.txt -> inode 1000 -> 数据块A
copy.txt     -> inode 1001 -> 数据块B(内容相同)
(链接计数:各自为1)

扩展知识:查看更详细信息

代码语言:javascript
复制
# 查看完整的文件信息
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

测试结果:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 硬链接(ln) vs 复制(cp)的详细区别
    • 一、核心本质区别
      • 硬链接(ln)
      • 复制(cp)
    • 二、详细对比表格
    • 三、直观示例演示
    • 四、修改测试
    • 五、删除测试
    • 六、实际应用场景对比
      • 适合使用硬链接的情况:
      • 适合使用复制的情况:
    • 七、技术细节深入
      • 文件系统层面
    • 扩展知识:查看更详细信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档