当前位置:首页>Linux>Linux 进阶实战:彻底吃透软链接与硬链接

Linux 进阶实战:彻底吃透软链接与硬链接

  • 2026-10-11 08:12:25
Linux 进阶实战:彻底吃透软链接与硬链接
Hello,大家好,我是程序媛MM。

本文约2100字,今天继续学习Linux进阶实战的内容——文件链接 。文件链接是Linux文件系统进阶的核心分水岭:看懂 inode、看懂链接,才算真正入门 Linux 文件系统。本文详细整理了硬链接、软链接、底层原理、常用命令、高频误区、生产场景等内容,搬好小板凳一起来学习吧。

我建了一个BSP学习交流群,想学BSP或者已经是BSP开发者可私信我,加入群,一起交流学习,共同进步。

关注公众号, 即可获得与Linux相关的电子书籍以及常用开发工具,文末有文档清单。


我们很多开发者用了很久的 Linux,但仍有可能分不清软链接和硬链接:

[1].为什么硬链接不能跨分区?

[2].为什么删了源文件,硬链接还能打开,软链接却红了?

[3].生产环境什么时候用软链接、什么时候用硬链接?

一 先搞懂:链接到底是什么


Linux 里一切皆文件,链接就是给文件 / 目录创建 “别名” 或 “快捷方式”,但分两种完全不同的底层实现:

硬链接(Hard Link):多个文件名 -> 同一个 inode ->同一份数据块

软链接(Soft Link / Symbolic Link):一个独立文件 -> 存目标路径字符串 -> 指向另一个文件/目录

用大白话:

硬链接:同一个人,多个名字(共享身份证)

软链接:一张纸条,写着别人地址(纸条丢了 / 地址错了就无效)

二 硬链接(ln):inode 级别的 “多文件名共享”

[1]. 底层原理

创建硬链接:

ln source.txt hardlink.txt

不创建新 inode,两个文件名共享同一个 inode

inode 里的链接计数(Links)+1

删除一个文件名:链接计数 - 1,计数到 0 才真正释放数据块

[2]. 硬链接的五大特性

共享 inode:ls -i 看到的 inode 号完全一样

不能跨文件系统 / 分区:inode 只在当前分区唯一

不能链接目录:防止出现目录环(死循环)

删源文件不影响:只要还有一个硬链接,数据就还在

几乎不占额外空间:只是目录里多一条映射记录

[3]. 实操示例

# 创建源文件echo "hello link" > test.txt# 创建硬链接ln test.txt test_hard.link# 看 inode(相同)ls -i test.txt test_hard.link# 看链接计数(都是2)stat test.txt | grep Links# 修改任意一个,两边同步变echo "update" >> test_hard.linkcat test.txt# 删除源文件,硬链接依然可用rm -f test.txtcat test_hard.link

[4]. 适合硬链接的场景

防止误删重要文件:多建几个硬链接,只要有一个在,数据就不丢

节省空间的 “备份”:同分区内多副本,不额外占磁盘

日志 / 数据文件多入口访问:同一份数据,多个路径访问

三 软链接(ln -s):路径级别的 “快捷方式”


[1]. 底层原理创建软链接

ln -s source.txt softlink.txt

创建独立 inode,是一个完整的新文件

数据块里只存目标路径字符串,不存原文件内容

权限永远是 lrwxrwxrwx,实际权限由目标文件决定

[2]. 软链接的五大特性

独立 inode:ls -i 看到的 inode 号和源文件不同

支持跨文件系统 / 分区:只认路径,不认 inode

支持链接目录:最常用(比如 /bin → /usr/bin)

依赖源文件路径:删源文件 / 移动源文件 → 软链接失效(悬空)

占用少量磁盘:存路径字符串(大小 = 路径长度)

[3]. 实操示例

# 创建源文件echo "soft test" > source.txt# 创建软链接(-s)ln -s source.txt soft.link# 看类型(l 表示软链接)ls -l soft.link# 看真实路径readlink -f soft.link# 删源文件 → 软链接变红、失效rm -f source.txtls -l soft.linkcat soft.link

[4]. 适合软链接的场景

跨分区 / 跨设备引用:U 盘、网络存储、不同分区

目录快捷访问:深层路径简化(~/bin → /usr/local/bin)

版本切换:current 软链接指向不同版本目录

命令全局调用:自制程序软链接到 /usr/bin

配置文件灵活管理:不同环境配置快速切换

四 核心对比表


一句话总结:

硬链接 = 多入口共享同一份数据(安全、省空间)

软链接 = 灵活指向任意路径(方便、易断)

五 高频误区(新手必避坑)


误区 1:硬链接可以跨分区

inode 只在当前分区唯一,跨分区 inode 无意义,直接报错:

ln: 无法创建硬链接: 无效的跨设备链接

解决:跨分区一律用软链接

误区 2:软链接删了会把源文件也删了

删软链接只是删 “纸条”,不影响源文件。

反过来:删源文件,软链接失效

误区 3:给目录建硬链接很正常

硬链接不能链接目录(防止目录环死循环),root 强制建也会出问题

误区 4:软链接权限 777 很危险

软链接本身权限永远是 lrwxrwxrwx,实际权限由目标文件决定,不用改它的权限

误区 5:移动源文件,硬链接还能用

硬链接靠 inode,移动(同分区)不改变 inode,依然有效。

软链接:移动源文件->路径变->软链接失效

六 生产环境实战场景


场景 1:版本无缝切换

目录结构:plaintext/var/www/├── releases/│   ├── v1.0│   └── v1.1└── current → /var/www/releases/v1.0

发布 / 回滚一条命令:

# 切到 v1.1ln -snf /var/www/releases/v1.1 /var/www/current# 回滚到 v1.0ln -snf /var/www/releases/v1.0 /var/www/current

优势:秒级切换、零停机、一键回滚

场景 2:防止误删重要配置(硬链接)

# 给 /etc/my.cnf 建硬链接到备份目录ln /etc/my.cnf /backup/my.cnf.hard# 误删原文件依然能恢复rm -f /etc/my.cnfcp /backup/my.cnf.hard /etc/my.cnf

场景 3:深层路径简化(软链接)

# 把 /opt/software/apache-tomcat-10.1.26 链接到 ~/tomcatln -s /opt/software/apache-tomcat-10.1.26 ~/tomcat# 直接访问cd ~/tomcat场景 4:查找冗余硬链接(inode 追溯)bash运行# 查文件 inodels -i /data/monitor.tar.gz# 全网找同 inode(找冗余副本)find / -inum 50693098

七 进阶命令清单(日常必用)


# 创建硬链接ln src dst# 创建软链接ln -s src dst# 查看 inodels -i# 查看链接计数/元数据stat file# 追踪软链接真实路径readlink -f soft.link# 查找指定 inode 的文件find / -inum 123456

以上为全文内容。

往期文章(欢迎订阅技术分享栏目全部文章):

【从零开始撸内核驱动源码】:以ttyserial(串口驱动)为例,串联字符设备驱动基础知识点的学习计划
Linux内核源码顶层 Makefile分析并单独编译调试内核自带的驱动
【从零开始撸内核驱动源码】:ttynull驱动
Linux内核驱动安装失败问题调试及解决方法
Linux内核驱动源码走读之编译内核及外部驱动实操指南

“谢谢你看到这里”

这里是女程序员的笔记本

 15年+嵌入式软件工程师兼二胎宝妈

分享读书心得、工作经验,自我成长和生活方式。

希望我的文字能对你有所帮助

最新文章

随机文章