Linux软硬链接
目录
- 什么是软链接?
- 软链接的特点
- 软链接的原理
- 什么是硬链接
- 硬链接的特点
- 硬链接的原理
什么是软链接?
在Linux操作系统中,文件系统的核心概念之一是链接,包括软链接(符号链接)和硬链接。这些链接提供了访问文件系统中文件的灵活方式。软链接,被称为符号链接。类似于windows下的一个快捷方式。其本身也是一个文件,有着自己独立的inode。该文件的内容是链接对象文件的路径。这也是我们为什么可以通过快捷方式打开目标文件。
比如桌面的快捷方式
目标显示的就是这个文件的内容,这个文件是一个独立文件,有自己的inode,这个文件的内容是目标文件的路径。
使用软链接文件名,找到他的inode,找到文件内容,通过文件内容知道了目标文件的文件名,然后找到目标文件的inode。
使用命令ln -s
便可以创建一个软链接,可以发现用来链接的inode和原文件的inode是不同的。同样可以在不同的目录下建立软链接,这样就实现了跨目录访问。
值得注意的是,rm
指令删除文件时并不会考虑该文件是否是一个软链接,也就不会影响到原来的文件。其余大部分操作都会通过软链接影响到原文件,比如chmod
修改权限。
软链接的特点
- 软链接包含的是另一个文件的路径,而不是直接指向文件数据的inode。
- 如果原始文件被移动或删除,软链接就会失效,因为它的路径不再有效,这种情况下软链接被称为悬空链接。
- 软链接可以跨文件系统,因为它仅仅保存了另一个文件的路径。
为什么说软链接可以更灵活的访问文件呢?
因为很多时候我们有的文件会在非常深的路径下面,通过路径去找到这个文件往往会比较麻烦。例如给出一个文件,其路径结构为:
访问文件比较复杂,此时在常用的目录下创建一个软链接,便可以通过这个软链接直接访问其他目录的文件了。如Windows下我们常用的目录就是桌面,桌面上就有许多我们创建的快捷方式,这些方式是指向了各个盘的各个目录。
软链接的原理
-
软链接是文件系统中的一个特殊文件类型,存储的是目标文件的路径信息。操作系统访问到软链接的时候会重定向到路径指向的目录或者路径。
-
操作系统是怎么识别一个文件是否是软链接的呢?软链接的文件类型标识符会被标记为
l
这样操作系统就能在马上知道一个文件是否是软链接了。 -
软连接本身的权限和被指向的目标文件无关。即使软链接指向一个不可读的文件,软链接本身的权限也是可读的。这也是为什么我们创建出来的软链接的权限掩码是777。无论目标文件的权限如何,软链接本身的权限都是可读可写可执行(通常可以设置为 777)。有趣的是,我们并不能对一个软链接本身修改其权限,当我们尝试用chmod指令修改一个软链接的权限时,操作系统会直接跳过软链接而去修改它所指向的文件。从设计角度上来说,软链接只是一个“表象”,控制软链接的权限也没有太多意义。所以,对于操作系统来说,软链接只需要提供两点信息就可以了:一是告诉操作系统自己是一个软链接文件,二是目标文件的路径信息。
-
当用户通过软链接访问文件时,操作系统内核首先检查链接指向的路径。如果路径有效,操作系统就转向该路径并完成相应的文件操作。如果目标文件被移动或删除,软链接就会失效,称为悬挂链接(dangling link),因为它指向了一个不存在的路径。
什么是硬链接
在技术上讲,硬链接是文件实际数据的另一个名字(或指针)。创建出来的硬链接会复用原来文件的inode,也就意味着硬链接并不是一个独立的文件。硬链接可以理解为文件的另一个名字。
可以通过ln
指令建立硬链接
可以发现硬链接inode与原文件的inode是一样的。
硬链接的特点
- 节省空间:硬链接只是增加了一个新的目录条目,即indoe映射。并没有开额外的空间来存储文件数据。
- 备份和共享方便:通过硬链接,我们可以在不同的路径下创建指向相同文件内容的路口,有助于数据的共享和备份,尤其对于大文件来说。因为删除了也只是对连接数减1,并不会直接删除文件,只有链接数为0了才是真正删除了。
-
百度云盘就可以使用类似硬链接的方式来对用户提供服务,很多个用户,只需要对链接数增加即可,并不需要存在多份。
- 即时更新:由于同一文件的所有的硬链接都是指向同一inode,对原始文件或任何硬链接的修改会即时反映在所有链接上,因为它们共享相同的数据。
- 不能链接目录:硬链接不能链接目录,防止循环引用,这可能导致目录遍历算法陷入无限递归。当我们想要遍历整个分区的时候,是从根目录开始进行深度优先遍历,此时如果碰到对目录的硬链接,就会无限循环这个目录,从目录本身递归到硬链接,硬链接处又开始递归这个目录。
- 硬链接不能跨文件系统,因为不同的文件系统的indoe表不同。
- 删除复杂:多个硬链接指向同一个文件时,删除操作需要谨慎处理。每次删除一个硬链接文件,其实是使该inode引用数-1,直到为0才是真正的删除。
硬链接的原理
创建硬链接实际上是在文件系统中创建一个额外的目录条目,指向同一个inode。因此,原始文件和硬链接共享同一个inode和文件数据。
每个inode有一个引用计数,表示有多少文件名(目录条目)指向这个inode。当创建硬链接时,相关inode的引用计数会增加。当删除文件名时,引用计数减少。只有当引用计数达到零时,文件的数据和inode才会被系统回收。在文件属性中可以看到一个文件的硬链接数量:
这个硬链接数量其实是值指有多少个inode指向该文件的内容。
其实硬链接可以链接目录,只不过这是由操作系统自己去做的。比如我们创建一个目录后,
.
和..
其实就是一个硬链接:
我们进入某一个目录后观察.的inode,发现和目录的inode是一样的!这也能解释为什们我们的.
表示的就是当前目录。
同理..
其实就是上一级目录的硬链接。
之所以不给用户创建目录的硬链接,是因为出于安全考虑。
大多数目录硬链接数都是3,因为本什么算一个,目录中的.
算一个,下一级目录中的..
算一个。总共三个。
为什么用户可以软链接目录呢?
软链接避免死循环的关键在于软链接本身并不修改文件系统的实际物理结构。它们只是提供了到另一个位置的引用,而文件系统的遍历工具通常可以识别出软链接并决定如何处理它们,即操作系统会识别他 ,不让陷入循环。即使逻辑上看起来有循环引用的风险,物理层面上的目录结构并未形成真正的闭环,因此遍历操作不会陷入无限循环。
相关文章:

Linux软硬链接
目录 什么是软链接?软链接的特点软链接的原理什么是硬链接硬链接的特点硬链接的原理 什么是软链接? 在Linux操作系统中,文件系统的核心概念之一是链接,包括软链接(符号链接)和硬链接。这些链接提供了访问文…...

Kali换源
【刚忘了】 下面这个 里面的一删放就好了 deb http://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib...

Java 大视界 -- Java 大数据机器学习模型的可解释性增强技术与应用(107)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

SYN Flood的攻击原理及防御
SYN Flood的攻击原理 TCP 协议是一个可靠的、面向连接的流协议,由于 TCP 协议是建立在 IP 协议这种面向无连接的协议,所以 TCP 协议必须自己来维护连接的状态 TCP的三次握手过程 建立连接三次握手过程如下: 客户端需要发送一个 SYN包 给服…...

Javaweb数据库多表查询 内连接 外连接 子查询
内连接 外连接 左外连接,左边是全部表 表名,即使没有匹配右边的数据,也要查询出来 子查询 案例 1.没有说所有的部门,所有的员工,用内连接(隐式内连接)...

绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?
编者按: 你是否曾经遇到过这样的困扰:在开发基于 RAG 的应用时,实时检索的延迟让用户体验大打折扣?或者在处理复杂查询时,检索结果的不准确导致回答质量不尽如人意? 在当前大语言模型应用大规模落地的背景下…...
Nginx系列09(Nginx 与其他服务集成、实战项目)
目录 Nginx 与其他服务集成 实战项目 Nginx 与其他服务集成 Nginx 与 Tomcat 集成 概念:将 Nginx 作为前端代理服务器,Tomcat 作为后端应用服务器。Nginx 负责处理静态资源请求、负载均衡以及将动态请求转发给 Tomcat,Tomcat 则专注于运行…...
nvidia驱动更新,centos下安装openwebui+ollama(非docker)
查看centos内核版本 uname -a cat /etc/redhat-release下载对应的程序(这个是linux64位版本通用的) https://cn.download.nvidia.cn/tesla/550.144.03/NVIDIA-Linux-x86_64-550.144.03.run cudnn想办法自己下一下,我这里是12.x和11.x通用的…...

手机端抓包大麦网抢票协议:实现自动抢票与支付
🚀 手机端抓包大麦网抢票协议:实现自动抢票与支付 🚀 🔥 你是否还在为抢不到热门演出票而烦恼?本文将教你如何通过抓包技术获取大麦网抢票协议,并编写脚本实现自动化抢票与支付!🔥 …...

Vue3实现文件上传、下载及预览全流程详解(含完整接口调用)
文章目录 一、环境准备1.1 创建Vue3项目1.2 安装依赖1.3 配置Element Plus 二、文件上传实现2.1 基础上传组件2.2 自定义上传逻辑(Axios实现) 三、文件下载实现3.1 直接下载(已知文件URL)3.2 后端接口下载(二进制流&am…...
普通人高效使用DeepSeek指南?
李升伟 整理 DeepSeek(深度求索)作为一款智能搜索引擎或AI工具,普通人可以通过以下方式高效利用它,提升学习、工作和生活效率: --- ### **一、基础功能:精准搜索** 1. **明确需求提问** 用自然语言…...

基于JAVA+Spring+mysql_快递管理系统源码+设计文档
文末获取源码数据库文档 感兴趣的可以先收藏,有毕设问题,项目以及论文撰写等问题都可以和博主沟通,尽最大努力帮助更多的人! 摘 要 随着物流行业信息化的深入使得物流过程中货物的状态和变化透明化,现代信息化的接入使…...
《从0到1:用Python在鸿蒙系统开发安防图像分类AI功能》
在人工智能与移动应用深度融合的当下,类目标签AI功能成为众多行业提升效率和用户体验的关键技术。本文聚焦于HarmonyOS NEXT API 12及以上版本,以图像分类在智能家居安防领域的应用为例,为开发者详细阐述如何利用Python开发类目标签AI功能,助力鸿蒙技术在该领域的创新应用。…...

第十四届蓝桥杯大赛软件赛国赛C/C++大学C组
A 【跑步计划——日期问题】-CSDN博客 B 【残缺的数字】-CSDN博客 C 题目 代码 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…...

黑龙江省地标-DB31/T 862-2021 “一网通办”政务服务中心建设和运行规范
黑龙江省智慧政务服务:标准规范引领服务新篇章 1. 引言 在数字化转型的大潮中,智慧政务服务作为提升政府服务效能、优化营商环境、增强民众获得感的重要手段,正受到越来越多的关注。黑龙江省紧跟时代步伐,出台了一系列智慧政务服…...

基于SpringBoot的美妆购物网站系统设计与实现现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

如何评估所选择的PHP后端框架的性能?
大家在选择PHP后端框架的时候,如果想评估其性能如何,能不能扛得住你的项目?可以根据以下几点进行分析,帮助大家选择到更符合自己心目中的PHP后端框架。 1. 基准测试 基准测试是评估框架性能的基础方法,主要通过模拟高…...
快速搭建多语言网站的 FastAdmin 实践
快速搭建多语言网站的 FastAdmin 实践 引言 在全球化的背景下,越来越多的网站需要支持多种语言,以便满足不同用户的需求。FastAdmin 是一个基于 ThinkPHP 的快速后台开发框架,提供了丰富的功能和灵活的扩展性,非常适合用于快速搭…...

单片机中的flah和RAM
片机的 Flash 和 RAM 是两种关键的内存类型,分别用于存储程序代码和运行时数据。 Flash 存储器 用途:用于存储程序代码(如固件)和常量数据(如查找表、字符串等)。 特点: 非易失性:断…...

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.2典型应用场景:日志分析、实时搜索、推荐系统
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 为什么选择Elasticsearch?——典型应用场景深度解析1. 引言2. 日志分析:海量数据的实时洞察2.1 行业痛点2.2 ES解决方案关键技术实现: 2.…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...