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.…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...