[操作系统] 文件的软链接和硬链接
文章目录
- 引言
- 硬链接(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&#…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...