【Linux】第二十六站:软硬链接

news2025/1/16 3:43:44

文章目录

  • 一、软链接
  • 二、硬链接
  • 三、ln命令
  • 四、该如何理解硬链接?
  • 五、如何理解软链接
  • 六、为什么要用软硬链接
    • 1.软链接的应用场景
    • 2.硬链接的应用场景

一、软链接

如下所示,我们创建一个文件以后,然后执行下面的指令

ln -s file.txt soft-link

image-20231203174337228

这时候我们看见了一个soft-link的文件,这个文件指向file.txt。这就是一个软连接

如果我们去查看inode,我们可以看到是两个inode,说明是两个不同的文件,因为一个文件一个inode

image-20231203175357395

所以软连接是一个独立的文件,因为具有独立的inode

二、硬链接

如果我们直接这样做

ln test.txt hard-link

image-20231203175808493

我们发现产生了一共hard-link文件,并且它和test.txt的第二个属性变为了2

也就是说这个数字其实叫做硬链接数

如果我们再去查看他们的inode

image-20231203180226943

我们会发现hard-link与test.txt的inode居然是一样的

所以,硬链接不是一个独立的文件,因为他没有独立的inode

三、ln命令

ln命令是链接命令,它如果带上-s选项代表是软连接,如果不带就是硬链接。

无论如何都是由后者指向前者

ln -s file.txt soft-link     //软链接
ln test.txt hard-link        //硬链接

四、该如何理解硬链接?

如下图所示

image-20231203181134294

因为我们一开始是先创建的test.txt,所以这个会献给test.txt分配一个inode

然后我们使用了硬链接,我们发现,出现了一共hard-link的文件,并且这两个文件的inode是一样的,这就说明了,他们的文件属性,文件内容一定是一样的

通过这里我们也可以再次印证,文件名并不在inode中存储,否则这两个文件名是一样的

所以我们建立一个硬链接,这个硬链接做了什么么?

所谓的建立硬链接,本质其实就是在特定目录的数据块中新增,文件名和指向的文件inode编号的映射关系!!

也就是说,像我们上面的例子中,就是在test_2023_12_03这个目录文件中,对应的数据块上写上一个文件名和inode的对应关系。

这样的话,假如我们将test.txt文件给删掉了,其实这个文件本质上还是存在的,因为inode为61的这个文件还是存在着的。不过引用计数由2变为1了

image-20231203182334267

所以上面的工作,我们成功的完成了一次取别名(因为inode在,这个文件就还在)

任意一共文件,无论是目录,还是普通文件,都有inode

每一个inode内部,都有一个叫做引用计数的计数器

目录里面保存的是文件名:inode编号的映射关系。

文件名1:inode1234

文件名2:inode1234

文件名3:inode1234

文件名4:inode1234

所以我们可以用不同的文件名映射同一个inode,所以因为inode本身的缘故,我们可以间接的认为每一个文件名都指向同一个文件

而这个就是我们以前类似的指针

所以这个引用计数表示的就是,有多少个文件名指向该文件

所以删除一个文件就是让引用计数减减,然后删除掉这个映射关系。

只有当减到0的时候,才会真正的删除掉这个inode文件

所以刚刚这个文件就没有被删除

所以我们建立的大多数普通文件他的硬连接数都是1。因为默认建立的文件只有一个文件名与inode对应。所以我们删除时候会直接删除到0,进而删除掉这个文件

五、如何理解软链接

我们知道,在我们前面使用软链接以后,他的引用计数没有发生变化

image-20231203184307622

并且软连接的文件和原来的文件有不同的inode,所以他们是不同的文件

所以这里就告诉了我们一个事实:我们的软连接是一个独立的文件,且不影响目标文件的引用计数

那么我们如何理解软链接呢?

由于软链接具有独立的inode和数据块,所以我们可以将这个软连接想象成一个独立的文件,该文件有自己的属性。

并且这个软连接文件里面放着的是所指向文件的路径

所以软链接是一个独立的文件,有独立的inode,也有独立的数据块,他的数据块里面保存的是指向的文件的路径

所以对于这个软链接,他可以有如下的场景

像file.txt中写入文件,但是我们可以用soft-link访问到对应的内容

image-20231203184924724

所以如果我们删除掉了这个soft-link文件,并不会影响到file.txt文件

但是一旦我们删除掉了file.txt文件,就会影响到soft-link文件,如下所示,因为它指向的文件已经不存在了

image-20231203185123389

其实这个软链接特别像windows中的快捷方式

删除这个软连接文件我们除了使用rm的方式,也可以使用unlink的方式

image-20231203185433138

六、为什么要用软硬链接

1.软链接的应用场景

当我们写了一个.c程序以后

image-20231203195221213

如下所示,当我们编译好软件以后,我们会将可执行程序放入到一些更深层的目录中

image-20231203195544522

如果我们要执行这个可执行程序,必须按照路径依次往里找

这对于客户来说太麻烦了

所以我们就可以形成一个软链接文件

image-20231203195745213

这样的话就可以直接运行这个程序了

所以我们就会发现在/lib64/这个目录下,存在着大量的软链接

image-20231203195945660

所以未来我们可以直接在下面的路径下建立一个可执行程序

sudo ln -s 可执行程序路径 /usr/bin/my.exe

如下所示

image-20231203201118667

所以未来我们要装软件的话,我们可以随意装,只需要在/usr/bin路径下安装一个软链接即可。

2.硬链接的应用场景

当我们建立一个普通文件的时候,它的硬链接数是1

image-20231203202222195

但是当我们创建一个目录文件的时候,它的硬链接数为2

image-20231203202253127

这是为什么呢?

首先这个dir它自己本身就有一组映射关系,所以这里已经有1了

但是当我们进入这个文件的时候,我们知道它有两个隐藏文件

我们会发现这个点也叫60,所以这个叫做当前目录

image-20231203202442299

现在我们就理解了什么叫做当前目录了,因为这个点就是dir的一个硬链接

而两个点表示这个上级路径

我们也可以注意到,这里确实是一个硬链接

image-20231203203143883

所以我们就理解了,为什么cd …会进入到上级目录了,因为这就是一个硬链接

当我们向这个dir文件里面继续创建了一个目录以后,我们会发现这个引用计数变为了3

image-20231203203405922

如下所示

就是因为存在这样一个点点目录

image-20231203203512767

如果我们去查看根目录的引用计数

image-20231203203857637

我们也就知道了,当前我们系统的有效的目录是16个

所以在我们的系统中硬链接必须存在,虽然它很少用,但是它要维持linux的目录结构

所以硬链接通常用于路径定位,采用硬链接,可以进行目录间切换

但是我们要注意,硬链接不允许对目录来进行定义,但是可以软链接

那么Linux系统不允许对目录建立硬链接,这是为什么呢?

如下图所示,这是一个Linux的一个目录,假设第一个是一个根目录,然后有一天我们在第三层的第一个文件中建立了一个硬链接,那么此时造成了闭环。

未来当我使用find / -name test.c命令的时候,会进入到环里面。

所以硬链接给目录很容易产生环路问题,引发系统级别的bug

image-20231203204756740

那么我们可能会好奇目录内部有点和点点这个不是目录的硬链接吗?

这其实是因为系统不相信我们,只相信自己,系统自己不会产生环路问题。

可是我们又会好奇,那既然系统自带点和点点,那在搜索时候不是已经自带环路问题了吗?

其实这是因为系统在搜索时默认不会搜索这两个文件

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

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

相关文章

Prime 2.0

信息收集 # Nmap 7.94 scan initiated Thu Nov 23 20:09:06 2023 as: nmap -sn -oN live.nmap 192.168.182.0/24 Nmap scan report for 192.168.182.1 Host is up (0.00018s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for 192.168.182.2 Host is u…

P-Tuning v2论文概述

P-Tuning v2论文概述 P-Tuning v2论文概述前言微调的限制性P-Tuning的缺陷P-Tuning v2 摘要论文十问NLU任务优化点实验数据集预训练模型实验结果消融实验 结论 P-Tuning v2论文概述 前言 微调的限制性 微调(fine-tuning)是一种在预训练模型基础上进行目…

使用 Kettle 完成数据 ETL

文章目录 使用 Kettle 完成数据 ETL数据清洗数据处理 使用 Kettle 完成数据 ETL 现在我们有一份网站的日志数据集,准备使用Kettle进行数据ETL。先将数据集加载到Hadoop集群中,然后对数据进行清洗,最后加载到Hive中。 在本地新建一个数据集文…

Active Stereo Without Pattern Projector论文精读

1.背景补充 主动立体相机和被动立体相机的主要区别在于它们获取立体视觉信息的方式 主动立体相机12: 主动立体视觉是指寻找最佳的视角去重建目标或者场景1。主动视觉的实现方式通常有:改变环境中的光照条件、改变相机的视角、移动相机自身位置等&…

大模型中幂律缩放法则和涌现能力

幂律缩放法则是一种用于描述两个变量之间关系的数学模型。 根据幂律缩放法则,当一个变量的值变化时,另一个变量的值以指数方式变化。具体而言,幂律缩放法则可以表示为Y a * X^b,其中Y表示一个变量的值,X表示另一个变…

国民技术N32_MCU ADC如何获取高精度采样数据

前言 国民技术微控制器内置最多四个高级 12 位 ADC (取决于产品系列) ,具有校准功能,用于提高环境条件 变化时的 ADC 精度。 在涉及模数转换的应用中, ADC 精度会影响整体的系统质量和效率。为了提高此精度,必须了解与 ADC 相关…

鸿蒙开发学习笔记

快速入门 配置网络权限 1.打开项目的 module.json5 文件 2.在module 里面写下面代码 3.这样就可以使用网络图片了 4.模拟器上就可以正常显示网络图片了 5.官方文档有相关说明 6. 华为官方编辑工具使用技巧(内置文档),鼠标移动到标签上&…

JVM内存结构:StringTable与常量池关系

首先看一道题 这就涉及到StringTable和常量池,答案在文末,全做对就不用看了 而StringTable的位置在不同版本也有变化 , 我们只探讨jdk1.8版本 与StringTable 串池对应的是常量池 案例一、常量池和串池联系 引用所指肯定不会是常量池中的字…

实验6 二叉树操作

0x01 实验目的 掌握二叉树的基本概念,二叉树的存储结构使用链表。 0x02 实验内容 输入一个完全二叉树的层次遍历字符串,创建这个二叉树,输出这个二叉树的前序遍历字符串、中序遍历字符串、后序遍历字符串、结点数目、二叉树高度(上述每一个…

基于Java SSM框架+Vue实现旅游资源网站项目【项目源码+论文说明】

基于java的SSM框架Vue实现旅游资源网站演示 摘要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述旅游…

notepad ++ 用法大全【程序员必会高级用法】

目录 1:notepad 介绍 2: 快捷键 3: notepad 实用插件 1:notepad 介绍 notepad是一款免费且开源的文本编辑器,可运行在Windows系统上。它支持多种编程语言,包括C、C、Java、Python等等。Notepad具有许多实…

Qt国际化翻译Linguist使用

QT的国际化是非常方便的,简单的说就是QT有自带的翻译工具把我们源代码中的字符串翻译成任何语言文件,再把这个语言文件加载到项目中就可以显示不同的语言。下面直接上手: 步骤一:打开pro文件,添加:TRANSLA…

Mysql安全之基础合规配置

一、背景 某次某平台进行安全性符合型评估时,列出了数据库相关安全选项,本文特对此记录,以供备忘参考。 二、安全配置 2.1、数据库系统登录时的用户进行身份标识和鉴别; 1)对登录Mysql系统用户的密码复杂度是否有要…

MYSQL报错 [ERROR] InnoDB: Unable to create temporary file; errno: 0

起因 服务器的mysql不支持远程访问,在修改完相关配置后重启服务出错。 2023-12-03T10:12:23.895459Z 0 [Note] C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe (mysqld 5.7.22-log) starting as process 15684 ... 2023-12-03T10:12:23.908886Z 0 [Note…

TimiGP细胞互作算法

介绍: 通过推断细胞间相互作用和免疫细胞预后价值来研究时间的计算方法。我们的方法将存活统计数据与批量转录组学图谱相结合,以构建免疫细胞-细胞相互作用网络,其中边缘(例如,X → Y)表明高 X/Y 比值与良…

unity学习笔记17

一、动画组件 Animation Animation组件是一种更传统的动画系统,它使用关键帧动画。你可以通过手动录制物体在时间轴上的变换来创建动画。 一些重要的属性: 1. 动画(Animation): 类型: Animation组件允许…

React如何检查组件性能

可以使用Profiler来查看组件的渲染速度 Profiler的基本使用 需要将<Profiler>标签包裹在需要检查渲染速度的组件外部需要绑定id属性&#xff0c;该属性是唯一标识&#xff0c;用于区分其他Profiler需要onRender函数&#xff0c;该函数一共有六个参数&#xff0c;分别为…

海德汉(HEIDENHAIN)CNC数据采集(可免授权)

一&#xff0c;概述 海德汉 常见的系统一般有530、640系统&#xff0c;采集一般有两种方法&#xff1a; &#xff08;1&#xff09;购买海德汉官方的SDK&#xff0c;HeidenhainDNC COM Component&#xff0c;安装之后有相应的demo&#xff0c;支持的语言有C#、C/C。此方法还需…

蓝桥杯物联网竞赛_STM32L071_8_ADC扩展模块

原理图&#xff1a; 扩展模块原理图&#xff1a; RP1和RP2分别对应着AIN1和AIN2&#xff0c;扭动它们&#xff0c;其对应滑动变阻器阻值也会变化 实验板接口原理图&#xff1a; 对应实验板接口PB1和PB0 即AN1对应PB1, AN2对应PB0 CubMx配置&#xff1a; ADC通道IN8和IN9才对…

牛客在线编程(SQL大厂面试真题)

1.各个视频的平均完播率_牛客题霸_牛客网 ROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time d…