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

文章目录

  • 一、软链接
  • 二、硬链接
  • 三、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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DDOS攻击为何永不过时?

文章目录 一、DOS二、DDOS三、如何防范DDOS 1.可以过滤IP地址2.增加设备3.在骨干节点配置防火墙4.开启过滤5.配置DNS抗攻击6.白帽团队 四、白帽子 为什么二十年前中国红客们就在用的DDOS攻击直到现在还依然是黑客们最爱的攻击方法?二十年前的攻击技术为什么还不过…

总结react中css的使用

1、css in js css in js有很多库,这里介绍styled-components styled-components 下载【vscode可以安装vscode-styled-components 插件,有代码提示】 npm i styled-components 1、然后为某个组件新建style.js文件,然后写一些样式。 impo…

字符串冲刺题

关卡名 字符串冲刺题 我会了✔️ 内容 1.掌握最长公共前缀问题 ✔️ 2.掌握字符串压缩问题 ✔️ 3.如果想挑战一下就研究:表示数值的字符串 ✔️ 1 最长公共前缀 这是一道经典的字符串问题,LeetCode14 先看题目要求:编写一个函数来查找…

如何通过K线发现短线机会?

一、K线的含义 股票一天之内有4个最关键的价格,开盘价、收盘价、最高价和最低价,把这个价格显示在图上就是K线图。 以金斗云智投电脑版为例,打开软件,任意搜索一支个股,就可以看到这支股票的K线。 股市新手看到这儿多…

tomcat运行项目时,前端页面中文乱码

如图&#xff1a; 解决办法&#xff1a; 在前端页面添加下面代码 <%page language"java" pageEncoding"utf-8"%>再次运行

「Swift」取消UITableView起始位置在状态栏下方开始

前言&#xff1a;在写页面UI时发现&#xff0c;当隐藏了NavigationBar时&#xff0c;即使UITableView是从(0,0)进行布局&#xff0c;也会一直在手机状态栏下方进行展示布局&#xff0c;而我的想法是希望UITableView可以从状态栏处就进行展示布局 当前页面展示&#xff1a; 问题…

Docker快速入门(docker加速,镜像,容器,数据卷常见命令操作整理)

Docker本质是将代码所需的环境依赖进行打包运行,而在Docker中最重要的是镜像和容器 镜像:可以简单地理解为每启动一个docker镜像就会占用计算机一个进程,这个进程和另外起的docker镜像的进程是相互独立的,以数据库为例,每个镜像都会copy一份数据库,在他所在的进程中.别的镜像在…

qt-C++笔记之QStringList

qt-C笔记之QStringList —— 杭州 2023-12-03 code review! 文章目录 qt-C笔记之QStringList1.1.《Qt官方文档》第一部分翻译&#xff1a;继承自QList\<QString\>-初始化-添加字符串1.2.迭代字符串1.3.join()和split()1.4.filter()1.5.lastIndexOf()1.6.indexOf()1.7.…

设置WPF启动画面

WPF启动时间比较长&#xff0c;总让人觉得程序好像没有启动起来&#xff0c;所以想设置一个启动画面 发现WPF设置启动画面竟然如此的简单 第一步将图片放置在主工程目录下&#xff0c;如下图 第二步 将图片生成属性设置为SplashScreen即可 第三步 启动项目你就看到效果了

C++:异常

文章目录 传统的处理错误的方式C异常C异常的使用抛异常的举例异常的重新抛出异常规范 自定义异常体系C标准库中的异常体系异常的优缺点 本篇总结的是C中关于异常的内容 传统的处理错误的方式 在C语言中&#xff0c;对于传统的错误方式有 终止程序&#xff1a;例如assert&…

linux创建分区

6.2.4 创建分区&#xff1a;MBR 将房子分成小房间&#xff0c;如卧室等。 6.2.4.1 fdisk 创建和维护分区表的程序。 fdisk命令的基本语法如下&#xff1a; fdisk [必要参数][选择参数] 参数说明&#xff1a; 必要参数 -l 列出素所有分区表 -u 与 -l搭配使用&#xff0c…

什么?居然可以免费使用Jetbrains?!

JetBrains是一家捷克的软件开发公司&#xff0c;该公司位于捷克的布拉格&#xff0c;并在俄罗斯的圣彼得堡及美国麻州波士顿都设有办公室&#xff0c;该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境&#xff1a;IntelliJ IDEA。 如下是jetbrains旗下的产…

销帮帮如何和金蝶云星空对接

销帮帮介绍 销帮帮平台是一款以客户关系管理为基础&#xff0c;集团队协作、营销推广、数据分析于一体的SAAS型企业管理平台。其开放API接口包括用户认证、客户信息、用户任务、销售记录、事务记录等&#xff0c;可方便企业对平台的二次开发和集成。在应用方面&#xff0c;销帮…

设计简单高效的短链系统

目录 引言 1. 短链系统的原理 1.1 长链接生成短码 1.2 短码映射到长链接 1.3 短码重定向 1.4 过期短 URL 清理 2. 设计与实现 2.1 数据存储 2.2 短码生成 2.3 接口设计 2.4 安全性考虑 2.5 访问性能优化 引言 在当今数字化时代&#xff0c;人们对信息的分享需求不断…

树_完全二叉树的节点个数

//给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 // // 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位…

Windows下安全认证机制

NTLM&#xff08;NT LAN Manager&#xff09; NTLM协议是在Microsoft环境中使用的一种身份验证协议&#xff0c;它允许用户向服务器证明自己是谁&#xff08;挑战&#xff08;Chalenge&#xff09;/响应&#xff08;Response&#xff09;认证机制&#xff09;&#xff0c;以便…

解密Android动态权限:保护用户隐私与应用安全的关键一步

解密Android动态权限&#xff1a;保护用户隐私与应用安全的关键一步 引言 在Android系统中&#xff0c;权限机制是保护用户隐私和应用安全的重要组成部分。Android应用需要获取一些敏感信息或执行某些敏感操作时&#xff0c;必须先获取相应的权限。例如&#xff0c;应用需要访…

普通策略梯度算法原理及PyTorch实现【VPG】

有没有想过强化学习 (RL) 是如何工作的&#xff1f; 在本文中&#xff0c;我们将从头开始构建最简单的强化学习形式之一 —普通策略梯度&#xff08;VPG&#xff09;算法。 然后&#xff0c;我们将训练它完成著名的 CartPole 挑战 — 学习从左向右移动购物车以平衡杆子。 在此…

正则表达式从放弃到入门(2):grep命令详解

正则表达式从放弃到入门&#xff08;2&#xff09;&#xff1a;grep命令详解 总结 本博文转载自 这是一篇”正则表达式”扫盲贴&#xff0c;如果你还不理解什么是正则表达式&#xff0c;看这篇文章就对了。 如果你是一个新手&#xff0c;请从头阅读这篇文章&#xff0c;如果你…

苹果配件妙控鼠标、键盘、触控板值得入手吗

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xff1a;https://t.zsxq.com/0aiNxERDq 苹果的优质和成功绝…