【Linux】深刻理解软硬链接

一.软硬链接操作

1.软连接

touch 创建一个文件file.txt ,对该文件创建对应的软链接改怎么做呢?

ln  -s  file.txt  file-soft.link .给对应文件创建软连接。

软连接本质就是一个独立的文件,因为我们对应的软连接有独立的inode,他和他指向的file.txt的inode是不同的。

如下图:

我们把字符串写入file.txt中,查看两个文件的内容,都能看到该字符串,说明实际在用户层使用我们的软连接,等同于我们的目标文件。软链接是通过名字引⽤另外⼀个⽂件,但实际上,新的⽂件和 被引⽤的⽂件的inode不同

2.硬链接

硬链接的使用方法,对文件file.txt怎么创建硬链接?

ln  file.txt  file-head.link.给对应的文件创建硬链接。

硬链接本质上不是一个独立的文件,没有独立的inode,而是相同的inode,不同的文件文件名。

在Linux中可以让多个文件名指向同一个inode。

如上面图片所示,权限后面这个数字是什么呢?没创建硬链接时,数字为1,创建硬链接后数字变成2,这个我们先引出来,后面说!!

Linux中搞懂操作是没什么用的,就跟之前创建进程,等待进程,说了操作,接口讲完没有用,最关键的是他在干什么?下面我们来认识如何理解软硬链接!!!

二.如何理解软硬链接

a.软硬链接有独立的inode,所以一定要有独立的属性和内容,软链接内容上,保存的是目标文件的路径,在Windows中,相当于一个软件在桌面上的快捷方式,所以平时用的这些快捷方式也是一个软连接文件,Linux中,软连接就是指向文件的快捷方式!!

b.硬链接,不是独立的文件,没有独立的inode,硬链接本质就是一组文件名和已经已经存在的文件的inode的映射关系!!!

c.所以当我们建立了软连接,就是相当于在当前目录下建立了一个软连接文件,快捷方式,而其中,我们建立一个硬链接,就是在我们当前所处的目录当中新增加一个文件名和要链接文件的inode的映射关系,所以最终,我们就会发现,这个硬链接文件,他所查到的inode和目标文件inode是一样的了,这个就是硬链接!!!

d.文件权限后面对应的数字是什么呢?创建硬链接文件前,目标文件数字为1,创建硬链接文件后,目标文件变成2?

根据前面讲的文件系统内容,知道了,一个目录也是文件,他的内容保存的是该目录下文件的文件名和inode的映射关系,所以在我们当前目录中,新建一个普通文件,题目文件名不在inode中保存,普通文件的文件名是在我们的文件所处的目录文件他的内容中保存的,创建一个硬链接文件,换句话说,就是在当前目录中有两个文件名,他们两个都会映射到同一个inode,这像什么呢?inode特别像一个指针一样的东西,所以当我们想使用文件名找文件的时候,我们都知道Linux下是通过inode找文件,两个文件的inode相同,所以本质上就是相当于有两个文件名指向同一个inode,换句话说,我作为一个inode,作为一个文件,什么时候在系统上算真正的删除呢?是不是要在整个系统里,没有任何文件名字符串和我这个文件inode的有映射关系时,也就是这个文件没有名字了,这个时候对应的文件就应该被删除了,可是我们怎么知道有多少个文件名通过ionde编号,来和我对应的文件的inode来产生关系呢?答案是在我们inode中,存在一个引用计数的东西,int ret_count,也就是说,今天在一个特定的目录下有一个文件名映射的inode是该文件,ret_count就会++,再有一个文件名和这个文件inode有映射关系,再++,所以我们对应的这个数字,称之为inode本身的引用计数,被称之为硬链接数!!!

e.如果我们对目标文件进行删除会怎么样?

对目标文件进行删除,硬链接还在,里面的内容还能打印出来,这个文件并没有被删除,所以这个删除做了一个什么工作?对目标文件进行重命名的工作,所有平时建立一个普通文件本质上都在不断进行建立硬链接,建立一个文件,本质就是硬链接文件,因为你的文件名和你的inode映射关系就相当于一份,所以删除,目标文件就减少一份,再把剩余的硬链接删除掉,引用计数变为0,文件系统中就会把你对应的这个inode直接删掉了。

删除目标文件,软链接就会变红,因为软链接文件中存的是目标文件的路径,目标文件找不到,软连接也就找不到了。

总结:

其实软链接说到底,其实就相当于,软链接就是一个普通文件,他的内容保存的是目标文件的路径,所以目标文件删除了变成红色,是因为这个软链接文件保存的目标文件的路径没有了,找不到了,而所谓的硬链接就相当于在当前目录下保存一下文件名和inode的映射关系,没有创建新的文件。

三.为什么要有软硬链接呢?各种应用场景

软链接:

 a.如果我们创建一个可执行程序code.exe,在命令行上要执行该文件是  ./code.exe 如果我们想要  ./code  就直接可以执行,我们该怎么办?

之前说过,可以把当前路径增加到环境变量或者把可执行文件拷贝到系统默认路径下,就可以不带  ./  直接执行。

现在我们学了软链接,就可以在当前路径下直接创建软链接:
ln -s code.exe code

这样就创建了一个软链接,就直接可以  ./code  直接执行该可执行程序。

如果想不加  ./  呢?

可以在 /usr/bin/ 路径下建立软链接,/usr/bin/ 是系统存放可执行文件的默认路径,这样就直接进行code就可以执行,创建快捷方式,直接建立软链接,就可以指向目标程序了。

删除一个软链接文件:一个rm  一个unlink

b.如果可以执行程序藏在一个比较深的路径下,比如 ./dir1/dir2/dir3/ 里,我们要在当前所处的路径使用可执行程序,就必须带一串路径,所以我们可以在当前路径下创建软链接。

c.我们也可以给一个目录形成一个软链接,比如  /usr/inlude/  我想查看头文件,就可以给这个目录创建一个软链接。

d.软链接就是为了快速定位文件,以最简单的方式进入!!!

e.作用:快捷方式

   最主要用途:快速找到指令,快速找到对应的库

 硬链接:

 a.在一个目录里创建一个普通文件和一个目录,普通文件的引用计数是1,是因为在当前目录中只有一个文件名与该inode有映射关系,那为什么新建一个目录,他的引用计数是2呢?进入这个目录中,再新建一个目录,引用计数为什么变成3了呢?

因为在目录里面有一个  .  文件和  ..  文件,之前说过,一个点表示当前目录,两个点表示上级目录,那么一个点凭什么表示当前目录他自己,一个点他是一个文件名,他所映射的inode和当前所处的目录的映射的inode是一样的!!文件名不同但指向的文件是一样的,所以一个点就表示当前工作路径,所以再在新建的目录中创建一个新目录,里面有两个点的文件名,他映射的inode与上级目录映射的inode相同,所以此时就有三个文件名指向同一个文件,所以,引用计数是3,所以我们在Linux中,在每一个目录下都要有一个  .  和  ..  呢?就是为了进行路径切换!!!

b.创建一个文件,在一个目录比如 /tmp/ 下,给这个文件创建一个硬链接,这时,如果误操作,把原本文件进行了删除,但是没关系,因为我们在特定的路径下,有一个该文件的硬链接文件,我们照样可以通过该硬链接文件拿到该文件的内容,这意味着什么?这意味着,在Linux下,对文件做备份,只需要建立硬链接文件就可以了,不需要拷贝了!!! 

c.我们现在可以对普通文件做硬链接,那么我们可不可以对目录进行建立硬链接呢?

Linux中,不允许对目录新建硬链接文件,因为主要怕,新建硬链接形成一些环状路径,进而导致系统出现问题,但是目录里面  .  和 ..  不都是当前目录和上级目录的硬链接文件吗?这该怎么理解呢?不怎么理解,因为这是Linux特殊进行处理的!!! 

目录创建硬链接形成环状路径的危害

  • 文件系统遍历异常:文件系统的遍历算法通常是基于树形结构进行的,假设可以对目录创建硬链接形成环状路径,当系统或应用程序尝试遍历目录树时,就可能陷入无限循环,无法正常完成遍历操作,导致程序挂起甚至系统崩溃。
  • 元数据更新混乱:目录的硬链接会使得目录的元数据(如目录的链接数、修改时间等)管理变得极为复杂且容易出现混乱。例如,当通过一个硬链接对目录进行修改时,很难确定应该如何正确更新其他硬链接所指向的同一目录的元数据,可能导致文件系统的元数据不一致,进而影响文件系统的稳定性和可靠性。
  • 权限管理复杂:在 Linux 中,权限是基于文件和目录的 inode 进行管理的。如果存在目录硬链接形成的环状结构,权限的继承和传播会变得非常复杂,可能导致权限漏洞或错误的权限设置,威胁系统安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux下MySQL的数据存放

在 Linux 下安装的 MySQL,数据表的数据默认存放在 My晓SQL 数据库的**数据目录**(Data Directory)中。具体来说,MySQL 会将所有数据库的数据存储在一个由 MySQL 配置文件中指定的目录里。该目录包含了所有数据库的表、索引、日志等…

第三十六章 Spring之假如让你来写MVC——拦截器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…

快速上手 HarmonyOS 应用开发

一、DevEco Studio 安装与配置 1. DevEco Studio 简介 DevEco Studio 是 HarmonyOS 的一站式集成开发环境(IDE),提供了丰富的工具和功能,支持 HarmonyOS 应用开发的全流程。 2. DevEco Studio 下载与安装 下载地址&#xff1a…

Java Web开发进阶——错误处理与日志管理

错误处理和日志管理是任何生产环境中不可或缺的一部分。在 Spring Boot 中,合理的错误处理机制不仅能够提升用户体验,还能帮助开发者快速定位问题;而有效的日志管理能够帮助团队监控应用运行状态,及时发现和解决问题。 1. 常见错误…

图解Git——分支的新建与合并《Pro Git》

⭐分支的新建与合并 先引入一个实际开发的工作流: 开发某个网站。为实现某个新的需求,创建一个分支。在这个分支上开展工作。 正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理: 切换到你…

C#使用实体类Entity Framework Core操作mysql入门:从数据库反向生成模型2 处理连接字符串

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

【数据可视化-12】数据分析岗位招聘分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

LeetCode 977 题:有序数组的平方

LeetCode 977 题&#xff1a;有序数组的平方 (Squares of a Sorted Array) LeetCode 第977题要求给定一个按非降序排列的整数数组 nums&#xff0c;返回每个数字的平方并按升序排列。 题目描述 给定一个整数数组 nums&#xff0c;它按非降序排列&#xff08;即 nums[i] < …

excel仅复制可见单元格,仅复制筛选后内容

背景 我们经常需要将内容分给不同的人&#xff0c;做完后需要合并 遇到情况如下 那是因为直接选择了整列&#xff0c;当然不可以了。 下面提供几种方法&#xff0c;应该都可以 直接选中要复制区域然后复制&#xff0c;不要选中最上面的列alt;选中可见单元格正常复制&#xff…

微信小程序实现拖拽盒子效果

要实现一个当前盒子高度由里面的盒子进行支配高度拖拽的效果 // wxml<view class"exmation-item" wx:elif"{{type4}}"> <view class"exmation-item-drag-box" id"drag-box"> <!-- 内容 --><view class"exm…

支持向量回归(SVR:Support Vector Regression)用于A股数据分析、预测

简单说明 支持向量回归是一种用来做预测的数学方法,属于「机器学习」的一种。 它的目标是找到一条「最合适的线」,能够大致描述数据点的趋势,并允许数据点离这条线有一定的误差(不要求所有点都完全落在这条线上)。 可以把它想象成:找到一条「宽带」或「隧道」,大部分…

透明部署、旁路逻辑串联的区别

背景 需讨论防火墙到底是串联&#xff0c;还是旁挂。 通常串联指的就是“透明部署”&#xff0c;旁挂指的就是“逻辑串联”。 透明部署&#xff08;串联&#xff09; 也称为透明模式或桥接模式&#xff0c;是一种安全设备的部署方式。在这种模式下&#xff0c;安全设备被串联…

LabVIEW水位监控系统

LabVIEW开发智能水位监控系统通过集成先进的传感技术与控制算法&#xff0c;为工业液体存储提供精确的水位调控&#xff0c;保证了生产过程的连续性与安全性。 项目背景 在化工和饮料生产等行业中&#xff0c;水位控制的准确性对保证生产安全和提高产品质量至关重要。传统的水…

深入浅出 Android AES 加密解密:从理论到实战

深入浅出 Android AES 加密解密&#xff1a;从理论到实战 在现代移动应用中&#xff0c;数据安全是不可忽视的一环。无论是用户隐私保护&#xff0c;还是敏感信息的存储与传输&#xff0c;加密技术都扮演着重要角色。本文将以 AES&#xff08;Advanced Encryption Standard&am…

hadoop-yarn常用命令

一、YARN命令介绍 1. YARN命令简介 YARN提供了一组命令行工具&#xff0c;用于管理和监控YARN应用程序和集群。 2. yarn application命令 (1) yarn application命令的基本语法 yarn application命令的基本语法如下&#xff1a; yarn application [genericOptions] [comma…

R语言的语法糖

R语言的语法糖 引言 在编程语言中&#xff0c;所谓的“语法糖”是指那些使得程序员能够以更简洁、直观的方式书写代码的语法形式。R语言作为一种用于统计分析和数据可视化的编程语言&#xff0c;具有丰富的功能和灵活的语法。本文将深入探讨R语言中的语法糖&#xff0c;帮助读…

React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)

触发渲染过程——renderRoot renderRoot 是一个函数&#xff0c;用于触发渲染工作。它通常会调用并递归地执行一系列的渲染任务&#xff0c;直到完成整个更新过程。这个过程包括执行 Fiber 树中的 beginWork 和 completeWork&#xff0c;以及渲染新状态或 DOM。 function ren…

【优先算法】思还故里闾,欲归道无因 - 前缀和

本篇博客给大家带来的是前缀和算法的知识点, 也是一样通过OJ题理解,掌握,应用该算法. &#x1f40e;文章专栏: 算法 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&…

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…

SOME/IP 协议详解——服务发现

文章目录 1. Introduction &#xff08;引言&#xff09;2. SOME/IP Service Discovery (SOME/IP-SD)2.1 General&#xff08;概述)2.2 SOME/IP-SD Message Format2.2.1 通用要求2.2.2 SOME/IP-SD Header2.2.3 Entry Format2.2.4 Options Format2.2.4.1 配置选项&#xff08;Co…