[操作系统] 文件的软链接和硬链接


文章目录
- 引言
- 硬链接(Hard Link)
- 什么是硬链接?
- 硬链接的特性
- 硬链接的用途
- 软链接(Symbolic Link)
- 什么是软链接?
- 软链接的特性
- 软链接的用途
- 软硬链接对比
- 文件的时间戳
- 实际应用示例
- 使用硬链接节省备份空间
- 用软链接管理多版本
- 查找所有硬链接文件
- 注意事项
- 总结
引言
在 Linux 文件系统中,文件名与文件数据的关系并不像表面看起来那样简单。真正标识文件的是 inode(索引节点),而文件名只是 inode 的别名。这种设计衍生出了两种特殊的文件关联方式:硬链接(Hard Link) 和 软链接(Symbolic Link,又称软链接)。本文将深入探讨它们的原理、区别及实际应用。
硬链接(Hard Link)
什么是硬链接?
硬链接是多个文件名指向同一个 inode 的映射关系。通过 ln 命令可以创建硬链接:
touch abc
ln abc def # 创建硬链接
ls -li # 查看 inode
输出示例:
263466 -rw-r--r-- 2 user group 0 Sep 15 17:45 abc
263466 -rw-r--r-- 2 user group 0 Sep 15 17:45 def
- inode 相同:
abc和def的 inode 均为263466。 - 链接数:inode 的硬链接数会递增(此处为 2)。
硬链接的特性

- 共享数据:写时计数的原理,所有硬链接指向同一份磁盘数据。
- 独立性:删除任意一个硬链接不会影响其他链接,只有当链接数归零时,文件才会被真正删除。
- 限制:
- 不能跨文件系统创建(inode 是文件系统局部的)。
- 不能对目录创建硬链接(避免循环引用)。
硬链接的用途
- 文件备份:创建重要文件的硬链接,防止误删。
- 文件系统结构:目录中的
.(当前目录)和..(上级目录)本质上是硬链接,所以目录文件的硬链接数会被当前目录的.和下一级目录的..影响。 .和..是文件系统内部实现的硬链接,用于维护目录树结构。- 用户无法手动为目录创建硬链接,但文件系统自身在底层使用硬链接机制。
用户手动建立目录硬链接的话会破坏文件系统的树状结构,形成路径环问题。
软链接(Symbolic Link)
什么是软链接?
软链接是一个独立的文件,其内容存储的是目标文件的路径。通过 ln -s 创建:
ln -s abc abc.soft # 创建软链接
ls -li
输出示例:
263563 -rw-r--r-- 2 user group 0 Sep 15 17:45 abc
261678 lrwxrwxrwx 1 user group 3 Sep 15 17:53 abc.soft -> abc
- inode 不同:软链接有自己的 inode(
261678)。 - 文件类型:
l表示链接文件,->指向目标路径。
软链接的特性
- 灵活性:
- 可跨文件系统创建。
- 可指向目录或文件。
- 依赖性:删除原文件后,软链接会变成“悬空链接”(Dangling Link)。
- 路径解析:可以是绝对路径或相对路径(相对于软链接的位置)。
软链接的用途
- 快捷方式:快速访问深层目录中的文件。
- 版本管理:如
/usr/bin/python指向具体版本(如python3.11)。 - 动态切换:在配置文件中指向不同环境(开发、生产)。
软硬链接对比
| 特性 | 硬链接 | 软链接 |
|---|---|---|
| inode | 与原文件相同 | 独立 inode |
| 跨文件系统 | ❌ 不支持 | ✅ 支持 |
| 指向目录 | ❌ 不允许 | ✅ 允许 |
| 原文件删除后 | 仍可访问(链接数减 1) | 失效(悬空链接) |
| 存储内容 | 直接映射 inode | 存储目标路径字符串 |
| 文件大小 | 与原文件相同 | 等于路径字符串长度 |
| 应用场景 | 备份、文件系统结构 | 快捷方式、动态引用 |
文件的时间戳
Linux 文件有三个关键时间戳:
- Access Time (atime):最后访问时间(如
cat查看文件)。 - Modify Time (mtime):文件内容最后修改时间(如
echo写入)。 - Change Time (ctime):文件元数据最后修改时间(如权限、链接数变化)。
注意:
- 修改文件内容会更新
mtime和ctime。 - 创建硬链接会增加链接数,因此会更新
ctime。
实际应用示例
使用硬链接节省备份空间
cp -l data.txt backup/ # 用硬链接备份,共享相同数据块
用软链接管理多版本
ln -s /opt/app/v2.0/ /opt/app/current
查找所有硬链接文件
find /path -samefile filename # 根据 inode 查找
注意事项
- 避免循环软链接:如
a -> b且b -> a。 - 权限问题:软链接的权限是独立的,但最终访问权限由目标文件决定。
- 路径依赖:移动原文件会导致软链接失效,硬链接不受影响。
总结
| 场景 | 推荐链接类型 |
|---|---|
| 同文件系统备份 | 硬链接 |
| 跨文件系统引用 | 软链接 |
| 需要快捷方式 | 软链接 |
| 维护文件系统结构(. / …) | 硬链接 |
理解软硬链接的底层机制,能帮助开发者更高效地管理文件、设计存储方案。无论是通过硬链接实现低成本备份,还是利用软链接灵活组织项目结构,这两种工具都是 Linux 系统中不可或缺的利器。
相关文章:
[操作系统] 文件的软链接和硬链接
文章目录 引言硬链接(Hard Link)什么是硬链接?硬链接的特性硬链接的用途 软链接(Symbolic Link)什么是软链接?软链接的特性软链接的用途 软硬链接对比文件的时间戳实际应用示例使用硬链接节省备份空间用软链…...
RabbitMQ面试题及原理
RabbitMQ使用场景: 异步发送(验证码、短信、邮件…)MYSQL和Redis, ES之间的数据同步分布式事务削峰填谷 1. 消息可靠性(不丢失) 消息丢失场景: RabbitMQ-如何保证消息不丟失? 开启生产者确…...
SpringBoot中Get请求和POST请求接收参数详解
1、Get请求 1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须保持一致 RestController RequestMapping(“/user”) Slf4j public class DemoController { GetMapping("/query") public void getStudent(String name,Strin…...
分布式日志和责任链路
目录 日志问题 责任链问题 分布式日志 GrayLog简介 部署安装 收集日志 配置Inputs 集成微服务 日志回收策略 搜索语法 搜索语法 自定义展示字段 日志统计仪表盘 创建仪表盘 链路追踪 APM 什么是APM 原理 技术选型 Skywalking简介 部署安装 微服务探针 整合…...
h5 IOS端渐变的兼容问题 渐变实现弧形效果
IOS端使用渐变的时候有兼容问题 以下是问题效果,图中黑色部分期望的效果应该是白色的。但是ios端是下面的样子…… 安卓pc 支持: background-image: radial-gradient(circle 40rpx at 100% 0, #f3630c 40rpx, rgb(255, 255, 255) 50%);安卓pc ios支持…...
哈希算法--猜数字游戏
1.题目要求 输入两个位数相同的数,判断对应位置的数字是否相等,返回两个数。第一个数是数字和位置完全猜对的数字个数,第二个数是数字大小猜对但位置不对的数字个数 2.逐步编程 2.1 定义函数 def g(secret,guess):sec_dic{}gue_dic{}# 定义…...
idea生成自定义Maven原型(archetype)项目工程模板
一、什么是Maven原型(Maven archetype) 引自官网的介绍如下: Maven原型插件官网地址 这里采用DeepSeek助手翻译如下: Maven 原型 什么是原型? 简而言之,原型是一个 Maven 项目模板工具包。原型被定义为一…...
Redis面试常见问题——使用场景问题
目录 Redis面试常见问题 如果发生了缓存穿透、击穿、雪崩,该如何解决? 缓存穿透 什么是布隆过滤器? 缓存击穿 缓存雪崩 双写一致性(redis做为缓存,mysql的数据如何与redis进行同步呢?) …...
样式和ui(待更新)
element-plus 先在项目下执行安装语句执行按需导入的命令按照官方文档修改vitest.json sass样式定制 npm -i sass -D在项目下准备定制的样式文件 styles/element/index.scss(!注意这里是.scss文件在vitest.json 修改配置文件 Components({resolvers: [ElementPlusResolver(…...
大摩闭门会:250228 学习总结报告
如果图片分辨率不足,可右键图片在新标签打开图片或者下载末尾源文件进行查看 本文只是针对视频做相应学术记录,进行学习讨论使用...
线程(Thread)
一、概念 线程:线程是一个轻量级的进程 二、线程的创建 1、线程的空间 (1)进程的空间包括:系统数据段、数据段、文本段 (2) 线程位于进程空间内部 (3) 栈区独享、与进程共享文本段、…...
AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命
AI军备竞赛2025:GPT-4.5的“情商革命”、文心4.5的开源突围与Trae的代码革命 ——一场重塑人类认知边界的技术战争 一、OpenAI的“感性觉醒”:GPT-4.5的颠覆与争议 1.1 从“冷面学霸”到“温柔导师”:AI的情商跃迁 当用户输入“朋友放鸽子&…...
DeepSeek + 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP
DeepSeek 自由职业 发现新大陆,从 0 到 1 全流程跑通商业 IP 商业定位1. 商业定位分析提示词2. 私域引流策略提示词3. 变现模型计算器提示词4. 对标账号分析提示词5. 商业IP人设打造提示词6. 内容选题策略提示词7. 用户人群链分析提示词8. 内容布局与转化路径设计提…...
Java进阶——常用工具类
日常开发中,Arrays、Collections 和 Objects 是非常实用的工具类,提供了丰富的功能,从而可以更高效地处理数组、集合和对象。本文将详细介绍这三个工具类的重要知识细节。 本文目录 一、 Arrays数组转集合并行排序优化Stream 支持 二、 Colle…...
【考试大纲】高级系统架构设计师考试大纲
目录 引言一、 考试说明1.考试目标2.考试要求3.考试科目设置二、 考试范围考试科目1:系统架构设计综合知识考试科目2:系统架构设计案例分析考试科目3:系统架构设计论文引言 最新的系统架构设计师考试大纲出版于 2022 年 11 月,本考试大纲基于此版本整理。 一、 考试说明…...
上位机知识篇---四种CPU架构交叉编译
文章目录 前言一、四种 CPU 架构1. x86/x86_64指令集位宽:应用场景编译工具 2. ARM指令集位宽:应用场景编译工具 3. MIPS指令集位宽应用场景编译工具 4. RISC-V指令集位宽应用场景编译工具 二、交叉编译1. 什么是交叉编译?定义应用场景 2. 交…...
隐式转换为什么导致索引失效
SELECT * FROM users WHERE id 123;这条语句失效的原因就是id是int类型的主键,比较的时候把id从int转化为字符串来比较了,而字符串的比较规则和int的比较规则明显不同,字符串是字典序比较的,还涉及到数据的长度,那为什…...
【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现
项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...
SpringBoot @Value 注解使用
Value 注解用于将配置文件中的属性值注入到Spring管理的Bean中。 1. 基本用法 Value 可以直接注入配置文件中的属性值。 配置文件 (application.properties 或 application.yml) 配置文件定义需要注入的数据。 consumer:username: lisiage: 23hobby: sing,read,sleepsubje…...
Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言安装JDK 17创建Spring Boot 项目 方式1:网页在线生成方式2&#…...
lin诊断功能寻址和静态电流测试方法
lin诊断功能寻址是不会回响应的,不管正响应还是负响应,而且进入会话必须是10 83这种(不知道是不是项目规定)****************************************************************************************************这个数字电流…...
电子供应链服务转型:从元器件分销到技术赋能与韧性构建
1. 项目概述:从“卖货”到“赋能”的供应链服务转型在电子元器件分销这个看似传统的行业里,我从业十几年,亲眼见证了从“电话传真报价”到“线上实时库存”的变迁。最近和一位行业老友,也是某知名分销商的资深销售总监聊天&#x…...
STM32G4项目实战:巧用MCP2518FD实现多路CAN FD通信,附完整工程源码解析
STM32G4项目实战:巧用MCP2518FD实现多路CAN FD通信,附完整工程源码解析 在工业控制和车载网络领域,CAN FD总线因其更高的传输速率和更大的数据负载能力正逐步取代传统CAN总线。STM32G4系列微控制器内置3路FDCAN接口,但面对需要5路…...
ARM架构中APB外设与External PPB空间部署解析
1. APB系统外设与External PPB空间的关系解析在嵌入式系统设计中,APB(Advanced Peripheral Bus)作为ARM架构中广泛使用的低速外设总线,其常规部署位置通常位于SoC内部。但近年来,随着异构计算和模块化设计的普及,将APB外设放置在E…...
AI、机器学习、深度学习:工程师的三层实战分水岭
1. 这不是概念辨析课,而是一张能让你少走三年弯路的“技术地图”我带过三十多个从零起步转行做数据工作的学员,几乎每个人在入职前都反复问过同一个问题:“AI、机器学习、深度学习,到底谁是谁的爸爸?”——结果翻遍教程…...
紧急提醒!项目管理人员不要乱签字,否则真会坐牢!
在工程项目里,人证不合一早已不是新鲜事,项目经理、安全员、资料员之间“代签”几乎成了一种心照不宣的默契。忙起来的时候,一张签到表、一份验收单传过来,顺手帮不在场的同事填上名字,很多人觉得这不过是抬抬手的事&a…...
开源架构企业管理软件适合哪些类型的公司
开源架构企业管理软件适合哪些类型的公司 很多人一听到“开源架构”,第一反应是技术人员、开发者、极客项目。放到企业管理软件里,其实开源架构更像一种长期可控的建设方式:企业能看见系统如何运行,也能在需要时改造它。 对中小…...
graph-autofusion:算子自动融合框架,让模型性能提升30%
前言 算子融合就像把多个快递包裹合并成一个,减少送货次数。 你有没有想过,为什么模型推理时,每个算子都要单独读写HBM(High Bandwidth Memory)?明明LayerNorm后面紧跟Add,为什么要分开算&#…...
Structured3D完整指南:如何用3D结构化数据轻松构建智能室内场景
Structured3D完整指南:如何用3D结构化数据轻松构建智能室内场景 【免费下载链接】Structured3D [ECCV20] Structured3D: A Large Photo-realistic Dataset for Structured 3D Modeling 项目地址: https://gitcode.com/gh_mirrors/st/Structured3D 如果你正在…...
三步解锁全网盘极速下载:免登录直链解析完整教程
三步解锁全网盘极速下载:免登录直链解析完整教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 …...
