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

Linux 基础 IO:软硬链接详解

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

花里胡哨发布于 2026/3/16更新于 2026/10/488 浏览
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. 删除硬链接文件(使用 )只会减少引用计数。只有当引用计数减为 0 时,才会真正删除 inode 和数据块。
unlink
  • 目录中也存在硬链接机制,例如当前目录 . 和上级目录 .. 都是特殊的硬链接。
  • 硬链接的应用场景
    • 路径定位:可用于目录间的路径切换。
    • 数据备份:在不占用额外空间的情况下保留文件的多个入口。
    硬链接能否链接目录,为什么?

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

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

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

    总结

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

    目录

    1. Linux 基础 IO:软硬链接详解
    2. 一、如何建立文件之间的软硬链接
    3. 建立文件之间的软链接
    4. 建立文件之间的硬链接
    5. 二、深入理解软硬链接
    6. 如何理解软链接
    7. 软链接的应用场景
    8. 如何理解硬链接
    9. 硬链接的应用场景
    10. 硬链接能否链接目录,为什么?
    11. 总结

    更多推荐文章

    查看全部
    • Java 动态规划实战:从递归优化到经典模型解析
    • VSCode 集成智谱 GLM-4 及自定义大模型配置指南
    • OpenClaw 大龙虾机器人:本地部署与配置实战
    • Python 字典与结构化数据核心用法
    • Buzz 离线语音转文字工具:基于 Whisper 的本地部署指南
    • 机器学习工程师的薪资、能力与职业路径
    • 从零构建 RISC-V 智能家居中控:硬件、固件与通信全链路实战
    • 实战:Protobuf 对象序列化在多模块依赖中的反序列化陷阱
    • 论文解读:Smart Agent-Based Modeling 与 LLM 在模拟中的应用
    • ABB 机器人虚拟示教器基础操作与编程指南
    • AI 绘画工具背后的视觉技术:Stable Diffusion 解析
    • OpenClaw安全AI助理从零搭建实战教程
    • OpenWebUI 对外提供 HTTP 接口的配置与使用
    • Java 泛型核心机制与实战指南
    • 2025 年智能机器人操作系统(AGIROS)开源社区生态大会
    • 【GitHub项目推荐--AI Novel Generator:智能小说创作助手】
    • Mac mini M4 部署 OpenClaw + Ollama 本地大模型接入飞书机器人
    • AI 绘画建筑设计提示词:从基础到高级的完整指南
    • 排序算法详解:直接插入、希尔与选择排序原理及实现
    • 通达信主力建仓指标源码

    相关免费在线工具

    • 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