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,方便切换版本。
相关推荐
野犬寒鸦几秒前
从零起步学习并发编程 || 第三章:JMM(Java内存模型)详解及对比剖析
java·服务器·开发语言·分布式·后端·学习·spring
hweiyu00几秒前
Linux 命令:diff3
linux
小李独爱秋3 分钟前
计算机网络经典问题透视:无线局域网的物理层主要有哪几种?
服务器·网络·物联网·计算机网络·信息与通信
Honmaple18 分钟前
OpenClaw 钉钉插件安装指南
服务器·网络·钉钉
IT研究所32 分钟前
信创浪潮下 ITSM 的价值重构与实践赋能
大数据·运维·人工智能·安全·低代码·重构·自动化
代码AI弗森32 分钟前
WSL2:在 Windows 上获得一整套可托付的 Linux 工程环境
linux·运维·服务器
不会代码的小猴33 分钟前
Linux环境编程第五天笔记
linux·笔记
玉梅小洋1 小时前
Docker 镜像在节点间的高效拷贝的方案
运维·docker·容器
firstacui1 小时前
搭建harbor仓库
linux·docker
niceffking1 小时前
Linux信号相关函数
linux·运维·服务器·linux信号