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 -l 以 l 开头,末尾显示 -> 原路径

四、典型使用场景

  1. 硬链接 :适合需要多位置访问同一文件数据,且不希望因删除某一个别名导致文件丢失的场景。例如:日志文件的多目录备份。
  2. 软链接 :适合目录快捷方式 、跨分区文件访问 、版本管理 等场景。例如:为 /usr/local/php-8.2 创建软链接 /usr/local/php,方便切换版本。
相关推荐
不悔哥7 分钟前
Linux系统编程多线程程序如何安全退出
linux
Fcy64820 分钟前
Linux下 数据链路层详解(从以太网到ARP协议)
linux·mac·以太网·数据链路层·arp
集智飞行41 分钟前
解决mavros2 ros2版本cpu占用高的问题
java·服务器·前端
Java后端的Ai之路44 分钟前
昇腾NPU显存管理避坑指南:从npu-smi输出精准识别空闲卡的底层逻辑与实战
服务器·网络·数据库·npu·大模型服务
YH行业报告分析1 小时前
2026电缆铺设设备市场:自动化敷设与电网升级驱动增长
运维·自动化
ajassi20002 小时前
AI语音智能体开发日记(十八)智能体服务器xiaozhi-esp32-server源码部署指南
运维·服务器·人工智能·ai·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
linux 进程信号(下)
linux·运维·服务器
skywalk81632 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko73 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
蓝胖的四次元口袋3 小时前
Jenkins知识梳理(2)
运维·jenkins