跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Linux 基础 IO:软硬链接详解

Linux 软硬链接是文件系统中建立文件关联的两种机制。软链接通过 ln -s 创建,拥有独立 inode 和路径信息,类似快捷方式,可跨文件系统但依赖源文件存在。硬链接通过 ln 创建,共享源文件 inode 和数据块,不占用额外空间,但不能链接目录以防环路。两者的创建方法、原理区别及应用场景,包括简化路径访问、系统命令扩展及目录硬链接限制的原因。

花里胡哨发布于 2026/3/16更新于 2026/8/1844 浏览
Linux 基础 IO:软硬链接详解

Linux 基础 IO:软硬链接详解

一、如何建立文件之间的软硬链接

软硬链接是 Linux 文件系统中用于建立文件之间关联的两种机制。建立软链接或硬链接的前提是存在一个已存在的源文件。

建立文件之间的软链接

使用 ln -s 命令建立软链接。其中 -s 选项代表 soft(柔软),表示创建符号链接。

ln -s 被软链接的文件 进行软链接的文件

执行后,使用 ls -l -i 查看 inode 编号,会发现软链接文件拥有自己独立的 inode 编号,与源文件不同。这表明软链接是一个独立的文件,拥有自己的属性。

建立文件之间的硬链接

使用 ln 命令建立硬链接。如果不带 -s 选项,默认进行硬链接。

ln 被硬链接的文件 进行硬链接的文件

执行后,使用 ls -l -i 查看 inode 编号,会发现硬链接文件与源文件共用同一个 inode 编号。这表明硬链接文件不是独立的文件,没有属于自己的 inode,也没有独属于自己的属性。这也侧面说明文件名不属于 inode 中的文件属性,因为硬链接文件名与源文件名可以不同。

二、深入理解软硬链接

如何理解软链接

  1. 软链接是一个独立的文件,具有独立的 inode 和数据块。数据块中保存的是指向源文件的路径。
  2. 删除软链接文件使用 unlink 命令,仅删除链接本身,不影响源文件。
  3. 软链接相当于 Windows 桌面上的快捷方式。它存储了应用程序的路径,用户通过快捷方式即可找到并打开实际程序,无需知道具体路径。
  4. 在正规项目中,若可执行文件路径很深,可在当前路径下建立软链接指向该文件,方便直接执行。
  5. 也可以将软链接放到系统指令路径(如 /usr/bin)中,这样执行时不需要带路径,系统会在 PATH 环境变量指定的目录中搜索。
软链接的应用场景
  • 简化路径访问:当可执行文件路径很深时,在当前路径建立软链接即可直接执行。
  • 系统命令扩展:将自定义程序软链接到 /usr/bin,实现全局调用。

示例代码(C 语言):

#include <stdio.h>

int main() {
    printf("hello soft link\n");
    return 0;
}

编译后生成可执行文件,可通过软链接在不同目录下运行。

如何理解硬链接

  1. 硬链接不是一个独立的文件,因为它没有独立的 inode。
  2. 多个文件名可以对应同一个 inode。inode 结构体内部有一个引用计数(硬链接数),表征有多少个文件名指向它。
  3. 建立硬链接的本质是在特定目录的数据块中新增文件名和 inode 编号的映射关系。
  4. 删除硬链接文件(使用 unlink)只会减少引用计数。只有当引用计数减为 0 时,才会真正删除 inode 和数据块。
  5. 目录中也存在硬链接机制,例如当前目录 . 和上级目录 .. 都是特殊的硬链接。
硬链接的应用场景
  • 路径定位:可用于目录间的路径切换。
  • 数据备份:在不占用额外空间的情况下保留文件的多个入口。
硬链接能否链接目录,为什么?

操作系统禁止用户对目录文件进行硬链接,原因如下:

  1. 防止环路:如果允许对目录建立硬链接,文件系统可能形成环路。例如在子目录中对根目录建立硬链接,遍历文件系统时(如使用 find 命令)会陷入死循环。
  2. 特殊处理:操作系统自身维护了 . 和 .. 这两个隐藏目录项作为硬链接,以支持相对路径导航。如果允许用户随意创建目录硬链接,会破坏多叉树结构的文件系统稳定性。

因此,Linux 限制普通用户对目录建立硬链接,以保证系统的安全性和高效性。

总结

软链接和硬链接是 Linux 文件系统中重要的概念。软链接类似快捷方式,独立于源文件,可跨文件系统;硬链接共享 inode,不能跨文件系统且不能链接目录。理解它们的区别有助于更好地管理文件和优化系统操作。

目录

  1. Linux 基础 IO:软硬链接详解
  2. 一、如何建立文件之间的软硬链接
  3. 建立文件之间的软链接
  4. 建立文件之间的硬链接
  5. 二、深入理解软硬链接
  6. 如何理解软链接
  7. 软链接的应用场景
  8. 如何理解硬链接
  9. 硬链接的应用场景
  10. 硬链接能否链接目录,为什么?
  11. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 基础进阶:引用、内联函数与 nullptr 详解
  • ngrok:免费 HTTPS、本地开发调试与 Webhook 测试工具详解
  • C++ 类与对象:封装特性实现与实战应用
  • C++ libxl 库实现 Excel 文件读写操作指南
  • HarmonyOS 文件预览服务避坑指南:从入门到实战
  • CoWoS 封装技术解析:架构、演进与 AI 应用
  • Ubuntu 20.04 LTS 升级至 24.04 LTS 完整指南
  • ik_llama.cpp 混合 GPU/CPU 推理与智能张量覆盖策略
  • Cosmos-Reason1-7B 实战:工业巡检中设备异常动作识别与推理
  • 基于 UltraScale 架构 FPGA 的 System Manager Wizard 使用
  • C++ 中 std::string 的常用操作:初始化、遍历和容量管理
  • OpenClaw 浏览器控制方案:让 AI 助手随时控制浏览器
  • OpenWrt 部署 Docker 的内核适配与资源优化
  • Vitis 烧录 FPGA 失败排查:底层配置与权限设置
  • Xilinx Vivado 付费 IP 核 License 状态解读与获取指南
  • C++ STL 标准库算法详解:查找、排序与数值处理
  • AI 辅助开发:基于 DeepSeek 构建贪吃蛇游戏
  • GitHub Copilot 学生认证零基础入门指南
  • Spring Boot 入门:环境搭建与第一个应用
  • 宇树 G1 人形机器人强化学习训练实战指南

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online