Linux:硬链接与软链接

在看下面内容之前,建议先看一下这篇文章,理解一下inode Linux:Ext系列文件系统-CSDN博客https://blog.csdn.net/2401_88433210/article/details/156613350?spm=1011.2415.3001.5331

一、硬链接

我们看到,真正找到磁盘上文件的并不是文件名,而是inode。其实在linux中可以让多个文件名对应于同一个inode。

1. 定义与原理

硬链接是给现有文件的 inode 新增一个文件名映射,相当于为同一个文件数据取了多个名字。

  • 硬链接和原文件共用同一个 inode,因此 inode 编号相同。
  • 硬链接本质上不是 "新文件",只是原文件的一个别名

2. 创建命令

bash 复制代码
ln 原文件路径 硬链接路径

示例:为 test.txt 创建硬链接 test_hard.txt

可以看到inode一样,都是指向同一个文件

同时硬链接数由1变成了2,表面有两个文件指向这个inode

我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。

在当前目录下创建path目录,进入path,会发现.和..对应的硬链接都会加1,. 对应的是当前目录的硬链接,.. 对应的是上级目录的硬链接

  • 所以知道了一个目录的硬链接数,就可以通过 -2,知道这个文件里面有多少个目录了
  • 可以进行文件的备份

3. 核心特性

特性 说明
inode 共享 硬链接与原文件 inode 号相同,元数据完全一致。
跨分区限制 无法跨文件系统(分区)创建,因为不同分区的 inode 是独立编号的。
目录限制 不能为目录创建硬链接(Linux 系统限制,避免目录树循环)。
删除机制 文件的链接数 (inode 中的 nlink 字段)记录了指向该 inode 的文件名数量。删除原文件或硬链接时,仅减少链接数;只有当链接数减为 0 时,才会真正删除文件数据。
权限继承 对硬链接的读写操作等同于对原文件的操作,权限由 inode 控制。

二、软链接

1. 定义与原理

软链接是一个独立的文件 ,它的内容是原文件的路径,相当于 Windows 中的 "快捷方式"。

  • 软链接有自己的 inode,与原文件的 inode 号不同。
  • 访问软链接时,系统会根据其存储的路径跳转到原文件。

2. 创建命令

bash 复制代码
ln -s 原文件路径 软链接路径

示例:为 test.txt 创建软链接 test_soft.txt

test_soft.txt文件有内容,存储的是源文件的路径,但是不能打开,因为会直接链接到源文件。

软链接可以用来给深度太深的运行程序创建快捷方式,让用户方便调用。

3. 核心特性

特性 说明
独立 inode 软链接有自己的 inode,元数据(如创建时间)与原文件无关。
跨分区支持 可以跨文件系统(分区)创建,因为软链接存储的是原文件的绝对 / 相对路径。
目录支持 可以为目录创建软链接(常用场景:如为版本目录创建快捷方式 ln -s /usr/local/python3.10 /usr/local/python)。
删除机制 软链接是独立文件,删除软链接不影响原文件 ;但如果删除原文件,软链接会变成悬空链接 (指向不存在的文件),访问时会报错 No such file or directory
权限特点 软链接的权限显示为 lrwxrwxrwx(所有用户可读写执行),但实际权限由原文件决定。

三、硬链接 vs 软链接 核心区别总结

对比维度 硬链接 软链接
inode 关系 与原文件共用同一个 inode 有独立的 inode
本质 原文件的别名 指向原文件的快捷方式(独立文件)
跨分区 不支持 支持
目录链接 不支持 支持
删除原文件 仍可通过硬链接访问文件数据 软链接变为悬空链接,无法访问
权限 与原文件权限一致 权限显示为 lrwxrwxrwx,实际由原文件决定
标识 ls -l 无特殊标识,与普通文件一致 ls -ll 开头,末尾显示 -> 原路径

四、典型使用场景

  1. 硬链接 :适合需要多位置访问同一文件数据,且不希望因删除某一个别名导致文件丢失的场景。例如:日志文件的多目录备份。
  2. 软链接 :适合目录快捷方式跨分区文件访问版本管理 等场景。例如:为 /usr/local/php-8.2 创建软链接 /usr/local/php,方便切换版本。
相关推荐
Johny_Zhao3 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
YuMiao17 小时前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux