🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。 🎯 适合人群: Linux 初学者、Ubuntu 新手、计算机专业学生、后端 / 运维 / 测试入门同学、想搭建 Linux 开发环境的开发者、准备学习服务器部署的同学,以及想从 Windows 过渡到 Ubuntu 工作流的用户。
从“会打开终端”到“能管理系统”,从“复制命令”到“理解 Linux 思维”,这一次,我们不零散学,而是一路滚雪球! 🎉 限时福利:当前专栏活动中,一次订阅,终身阅读,后续更新章节全部免费解锁 👉 立即查看 👈️
演示环境说明:
- 开发工具:Visual Studio Code / JetBrains 系列 IDE / Vim / Nano
- Ubuntu版本:Ubuntu 22.04 LTS / Ubuntu 24.04 LTS,推荐 Ubuntu 24.04 LTS
- Linux内核版本:Linux Kernel 6.x 或更高
- 终端环境:Bash / Zsh
- 包管理工具:APT / Snap / Flatpak
- 远程连接工具:OpenSSH / Windows Terminal / MobaXterm / Termius
- 虚拟化环境:VMware Workstation / VirtualBox / WSL2 / 云服务器
- 容器环境:Docker / Docker Compose
- 操作系统:Ubuntu Desktop / Ubuntu Server
全文目录:
-
- 一、前言
- 二、本文要解决什么问题?
- 三、从 inode 开始理解
-
- Linux 文件系统存储文件的方式
- 四、硬链接
-
- 4.1 硬链接的本质
- 4.2 硬链接的创建与验证
- 4.3 硬链接的限制与背后的原因
- 4.4 硬链接计数的工作机制
- 五、软链接
-
- 5.1 软链接的本质
- 5.2 软链接的创建与验证
- 5.3 软链接的特性与行为
- 5.4 悬空软链接
- 六、硬链接与软链接的全面对比
- 七、链接的底层结构图解
- 八、实验环境准备
- 九、案例一:基础实验——亲手验证链接行为
-
- 9.1 创建硬链接并验证 inode 共享
- 9.2 创建软链接并验证链接结构
- 9.3 删除操作对链接的影响
- 9.4 案例命令解析
- 十、案例二:真实使用场景——软链接在日常开发与服务器部署中的应用
-
- 10.1 Nginx 配置文件管理:sites-available 与 sites-enabled
- 10.2 多版本工具切换:用软链接管理 Node.js 或 JDK 版本
- 10.3 日志目录统一归档
- 10.4 案例命令解析
- 十一、案例三:工程化与运维增强实践
-
- 11.1 部署目录管理:用软链接实现灰度发布切换
- 11.2 配置文件统一管理与软链接映射
- 11.3 脚本中安全检测链接状态
- 11.4 案例命令解析
- 十二、链接与文件权限的关系
-
- 软链接自身的权限 vs 目标文件的权限
- 硬链接的权限
- 十三、链接与文件系统跨挂载点的限制
- 十四、目录链接的特殊限制与例外
-
- 目录软链接的 -L 参数问题
- find 命令对软链接目录的处理
- 十五、Ubuntu 系统中已有的典型链接案例
- 十六、常见问题与踩坑总结
-
- 问题 1:创建软链接时,用相对路径还是绝对路径?
- 问题 2:`ln -sf` 和 `ln -sfn` 有什么区别?
- 问题 3:软链接出现了,但访问时说\”没有这个文件\”
- 问题 4:`ln -s` 的参数顺序和 `cp` 一样吗?
- 问题 5:如何快速找出系统里所有的悬空软链接?
- 问题 6:`ls -l` 看到的软链接权限 `lrwxrwxrwx` 是什么意思?能改吗?
- 问题 7:硬链接在备份场景中有什么实际用途?
- 问题 8:在 Docker 容器里,硬链接和软链接的行为有什么特殊之处?
- 问题 9:为什么 `cp -r` 复制软链接时,默认复制的是链接本身,不是目标内容?
- 问题 10:软链接的路径字符串存储长度有限制吗?
- 十七、最佳实践建议
-
- 1. 关于软链接的绝对路径与相对路径选择
- 2. 更新现有软链接的标准做法
- 3. 创建软链接前确认目标存在
- 4. 定期检查悬空软链接
- 5. 在部署脚本里用软链接实现版本管理
- 6. 不要用硬链接作为\”备份\”策略
- 7. 理解 `systemctl enable` 背后的软链接本质
- 8. Docker 和软链接的注意事项
- 9. 检查文件是否为硬链接(共享 inode)
- 十八、扩展知识点
-
- 18.1 链接与 Linux 文件系统层级结构(FHS)
- 18.2 链接与 inode 耗尽的关系
- 18.3 软链接与 ACL(访问控制列表)
- 18.4 链接相关的系统调用
- 十九、完整操作流程回顾
- 二十、总结
- 🧧 学习福利 · 限时开放 🧧
- 🫵 Who am I?
一、前言
我第一次遇到\”硬链接\”这个词,是在读一本 Linux 入门书的时候。书上说:\”硬链接是文件的另一个名字,指向同一个 inode。\”我当时把这句话读了三遍,觉得自己懂了,但实际上完全没懂。
后来我在真实的服务器上工作,发现 Nginx 的配置目录里有一个奇怪的文件组织方式:/etc/nginx/sites-available/ 里放着配置文件,而 /etc/nginx/sites-enabled/ 里放着指向它们的链接。我第一次看到这个结构时,完全不明白为什么要这样设计,直接把配置文件复制到 sites-enabled 里不就行了?
再后来,做 CI/CD 流程时,我见到一种部署方案,通过软链接切换 current 目录来实现零停机发布——这对我来说算是一次开窍:原来软链接不只是个\”路径别名\”,它是一种非常实用的工程工具。
这些经历让我意识到,硬链接和软链接这个知识点,表面上很简单,但真正理解它,需要从底层往上看,从 inode 出发,到文件系统的挂载机制,再到工程实践中的使用场景,缺哪一层都会留下模糊地带。
这篇文章就是我希望当初能读到的那篇文章。
二、本文要解决什么问题?
在开始之前,我先列出这篇文章想帮你解答的核心问题:
- 硬链接和软链接到底有什么本质区别?不是让你背结论,而是让你真正理解为什么会有这种区别
- 软链接比硬链接用得广,背后的原因是什么?
- 硬链接为什么不能跨文件系统、不能链


