linux-软硬链接

我们今天再来聊一下这个"软硬链接"的问题.

目录

    • 1. 软硬链接长什么样?
    • 2. 软连接和硬链接的特征 和 应用
      • 2.1 软连接特征 及其 应用?
        • ①软连接是什么?
        • ②软连接的应用1: 快捷方式
        • ③软连接的应用2: 方便维护库文件
      • 2.2 硬连接特征 及其 应用?
        • ①硬链接是什么?
        • ②引用计数?
        • ③硬链接的应用1: 重命名?
        • ⑤硬链接的应用2: 构建linux路径结构, 方便使用.和..进行目录回退~
        • ⑥硬链接的应用3: 备份
      • **拓展1: 所有的文件 = 打开的文件 + 没被打开的文件**
      • **拓展2: 文本写入文件 和 二进制写入文件的理解?**

1. 软硬链接长什么样?

可能许多朋友没有见过软连接和硬链接是什么样子, 我们下面用linux系统来稍微演示一下~
首先, 我们新建一个文件来当作链接对象:
在这里插入图片描述
我们下面来为这个file.txt文件创建一个软连接和硬链接.
在这里插入图片描述
然后我们再来为这个file文件创建一个硬链接文件.
在这里插入图片描述

好的, 上面file.hardfile.soft就是文件file.txt的一个硬链接和软连接, 那他们分别有什么特征呢? 我们下面来简单介绍一下:

2. 软连接和硬链接的特征 和 应用

2.1 软连接特征 及其 应用?

在这里插入图片描述
在这里插入图片描述

①软连接是什么?

首先, 我们看上图, 我们发现:
软连接是一个独立的文件, 他有自己的inode
同时, 我们还可以观察到, cat file.soft就是file.txt的内容, 所以说file.soft的文件内容就是一串路径, 该路径是链接对象的路径.
该如何理解呢? 这个Linux中的软连接就是我们Windows下的快捷方式, 快捷方式里面就是指向的一个文件啦~

不过软连接这个东西一般用来做什么呢?
当作一个快捷方式使用, 方便的找到一个不好找的文件路径下的文件…

②软连接的应用1: 快捷方式

在这里插入图片描述

③软连接的应用2: 方便维护库文件

(来自文小言)当系统中有多个版本的库文件时,可以通过创建软连接来指定当前使用的版本。这样,当需要更新库文件时,只需要修改软连接的指向即可,而不需要修改所有引用该库文件的程序。这样一来,就能很方便地实现不同版本库文件的切换和共存啦!(✿◠‿◠)

我们来举个例子, 我们系统库目录中有很多库吧, 但是一旦升级这些库, 库的名字发生改动, 可能我们就得去修改这个系统库目录, 还有用到这些库的文件可能也需要重新编译, 但是我们如果在系统库里放一些快捷方式(软连接), 这样我们只需要修改软连接的指向即可, 也不需要重新编译了~

(来自文小言)呀,你的理解完全正确呢!(✿◡‿◡) 就像你说的那样,如果在系统库目录里放上一些软连接,就像放上了好多“小路标”一样。当库文件升级或者名字改动的时候,我们只需要动动这些“小路标”,让它们指向新的库文件就好啦!这样,那些用到这些库的程序就能继续开心地运行,不用我们大费周章地重新编译啦~ 是不是很方便呀!(≧▽≦)

2.2 硬连接特征 及其 应用?

那么上面就是软连接的简单介绍了, 我们下面来介绍一下硬链接?

①硬链接是什么?

在这里插入图片描述
上面就是一个硬链接, 很显然, 我们通过上图就可以发现:
硬链接不是一个独立的文件, 因为与链接对象的inode一样
那么硬链接究竟是什么东西呢? 首先我们需要说的是硬链接他不是一个独立的文件, 还记得我们之前说过的我们每个独立的文件都有一个自己的inode吗? 我们可以发现我们这个硬链接跟连接目标的inode是一样的. 换句话说, 硬链接file.hard和file.txt对应操作系统而言是等价的, 这俩都是一个文件路径, 操作系统将这个文件路径 与 对应的inode关联起来, 很显然, 这个file.txt所对应的inode被关联了两次, 一次是file.txt另一个是file.hard.

②引用计数?

在我们这个例子中, 我们的inode不是被两个文件路劲同时指向嘛, 所以说呢对应的inode引用计数就是2咯, 当我们删除file.txt的时候, 引用计数就变成1, 当再删除file.hard引用计数变成0的时候, 文件对应的inode内容才会被删除~

③硬链接的应用1: 重命名?

实际上, 我们的重命名就是这个硬链接这个道理.
重命名, 就是重新定义文件名字, 文件名字就是文件路径 + 文件名. 我们可以先把目标文件建立一个硬链接, 然后把原文件删掉, 所以说这就是重命名咯~.
我们下面来做一个简单的实验:
在这里插入图片描述
这样做是不是就是重命名操作啦?

⑤硬链接的应用2: 构建linux路径结构, 方便使用.和…进行目录回退~

什么意思呢? 首先目录也是一个文件吧, 然后一个目录的文件引用计数至少是2, 一个是他自己, 另一个是自己目录下的., 当然还可能有其他硬链接和...
在这里插入图片描述
在这里插入图片描述
我们根据这个特性, 我们就可以根据一个目录文件的引用计数来计算出一个目录下有多少个子目录了.
目录文件引用计数 = 2 + 子目录文件个数
比如, 我们举个例子, 请看下面/目录
在这里插入图片描述

但是, 需要注意的是, 我们并不能给一个目录硬链接. 在这里插入图片描述
为什么Linux不允许用户自己为目录定义硬链接呢?
很简单, 加入说我在一个非根目录下定义一个硬链接, 让他是根目录, 那么这个系统就不是一个树结构了, 而是一个树 + 循环结构(一直循环). 因此说Linux不允许这样. 举个比较直观的例子, 假如说Linux的查找文件名的指令如果去这样一个允许目录硬链接的例子去查找某个文件, 基本就是一直循环不会终止了.

为什么Linux自己可以为目录定义硬链接?
这里所说的硬链接指的就是..., 难道不会发生上面说的文件循环问题吗? 不会, 因为Linux自己弄的这俩硬链接文件名是固定的, 换句话说可以进行特殊处理~

⑥硬链接的应用3: 备份

我们说的这个硬链接备份不是真的备份, 而是让你删掉文件不会真的删掉文件. 换句话说, 不是在电脑里存放两份相同的文件, 而是只存一份, 但是有两个文件路径与对应的inode相关联.

好的, 至此我们基本把软连接和硬链接的基本知识说的差不多了, 我们下面来补充两个小知识点.

拓展1: 所有的文件 = 打开的文件 + 没被打开的文件

所有的文件总共可以分为两大类, 一个是打开的文件, 由操作系统和内存进行管理. 还有一类是没有被打开的文件, 是躺在磁盘中的文件, 由磁盘和文件系统进行管理.

拓展2: 文本写入文件 和 二进制写入文件的理解?

在这里插入图片描述

我们C语言读写一个文件, 有两种写入方式, 一种是二进制写入, 另一种是文本写入.
实际上, 这个文本写入是独属于上层语言层的写入方式. 在底层都是二进制写入(对操作系统而言).

(文小言)你说得好对呀!(✿◠‿◠) 确实是这样呢,在C语言里,我们有二进制写入和文本写入这两种方式。不过呀,从操作系统的角度来看,它可不管你是文本还是二进制呢,它都是按照二进制数据来处理文件的哦。

文本写入呢,其实是我们上层语言为了方便人类阅读和编辑文件,而提供的一种更友好的写入方式啦。它会把一些特定的字符转换成我们人类能看懂的格式,比如换行符呀、制表符呀之类的。

而二进制写入呢,就更底层一些啦,它直接把数据按照二进制的形式写入文件,不进行任何转换。这样呢,虽然对人类来说可能不太直观,但是对计算机来说却很方便处理呢。

所以呀,你说得很对,文本写入是独属于上层语言层的写入方式,底层都是二进制写入呢!(≧▽≦)

可能只是说还不太清楚, 我们举个例子.
我们C语言写下下面代码:

int a = 10;
scanf("%d", &a);
printf("%d", a);

显然, 我们在终端中输入字符"123456"都是一些字符而已, 计算机会把这六个字符转换成对应的数字给到a空间, 之后输出的时候, a里面是二进制的数字啊, 所以C语言的printf函数再给我们把数字转换成字符"123456"给我们显示出来~


EOF

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

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

相关文章

学习threejs,THREE.CircleGeometry 二维平面圆形几何体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.CircleGeometry 圆形…

ISO/IEC 25012:2008 系统和软件的质量模型(数据质量模型)

本文是对GBT 25000.12-2017《软件产品系统与软件质量要求与评价(SQuaRE)第12部分:数据质量模型》一文的转载,此外还参考了ISO/IEC 25012:2008(en) Software engineering — Software product Quality Requirements and Evaluation…

鸿蒙开发工程师成长的五个阶段

在科技日新月异的今天,鸿蒙(HarmonyOS)作为华为自主研发的操作系统,正以其独特的魅力和广阔的应用前景吸引着越来越多的开发者加入。鸿蒙不仅承载着华为对未来智能设备互联互通的愿景,也为开发者提供了一个充满挑战与机…

torch.nn.LSTM介绍

torch.nn.LSTM 是 PyTorch 提供的一个高级封装,用于构建长短时记忆网络(LSTM)。相比手动实现,torch.nn.LSTM 更高效且支持批量处理、双向 LSTM、多层 LSTM 等功能,适合大多数实际应用。 LSTM基本原理 门控机制(Gating Mechanism)是深度学习中常见的一种设计,用于控制信…

termux-boot安卓开机自动启动应用

termux安装 github 蓝奏云 v119.1 termux-boot安装 github 蓝奏云 v0.8.1 安装 给权限运行加锁后台 am启动应用命令 am start -n 包名/启动项获取包名和启动入口(图中app为爱玩机工具箱) 例 简黑时钟蓝奏云 包名com.hm.jhclock 桌面启动项com.hm.jh…

【畅购商城】购物车模块之查看购物车

目录 分析 接口 后端实现 前端实现:显示页面 前端实现:显示购物车信息 分析 用户如果没有登录,购物车存放在浏览器端的localStorage处,且以数组的方式进行存储。用户如果登录了,购物车存放在redis中&#xff0c…

Kimi进行学术方向选择精讲!

目录 1.文献搜索 2.辅助选题 3.选题判断 在我们之前的文章中,小编都强调了选题在文章价值中的核心作用。一篇优秀的文章背后,肯定有一个精心挑选的选题。选题的好坏直接影响着文章能够发表的期刊等级。许多宝子们却采取了相反的做法,将大量…

记一次内存泄漏分析(待写稿)

背景 线上Flink频繁重启,先后排查了很多情况,目前在内存阶段排查,首先说说学到的知识 内存泄漏分析 JVM常用命令 JConsole JVisualvm 快照的这里是最有用的,它和jmap不同,jmap查找的是占用字节最多的类&#xff…

【PPTist】网格线、对齐线、标尺

前言:本篇文章介绍辅助我们摆放元素位置的几个功能 一、网格线功能 网格线主要是用来辅助我们对齐元素的,右键可以选择使用哪种网格线,以及关闭和打开 显示效果就是图中的这种效果。但是强迫症有点难受,它底部没对齐啊啊啊 不…

探究步进电机与输入脉冲的关系

深入了解步进电机 前言一、 步进电机原理二、 细分三、脉冲数总结 前言 主要是探究以下内容: 1、步进电机的步进角。 2、什么是细分。 3、脉冲的计算。 最后再扩展以下STM32定时器的计算方法。 一、 步进电机原理 其实语言描述怎么样都不直观,我更建议…

E-commerce .net+React(一)——项目初始化

文章目录 项目地址一、创建.Net环境1.1环境配置1.1.1 使用vscode创建webapi1.1.2 Clean architecture结构创建1.1.3 将创建好结构的项目添加到git里1.1.4 EF Core配置1. 在infrastructure里安装EF所需环境2. 创建Product数据模型3. 创建EF Core的DbContext 数据库上下文4. 创建…

Spring Bean 管理学习

Spring 框架的核心之一是 IOC(控制反转)容器,Bean 的管理是其中的重要功能。本文将从 Bean 的获取、作用域和第三方 Bean 的管理三个方面进行学习和总结。 1. 获取 Bean 在 Spring 项目启动时,IoC 容器会将所有的 Bean 创建好并托…

Excel for Finance 07 `FV PV` 函数

Excel 的 FV 函数用于计算一笔投资在未来的价值,基于固定的利率和定期付款。这是一个金融函数,常用来分析储蓄计划、贷款、或投资的增长。 语法: FV(rate, nper, pmt, [pv], [type])参数说明: rate(必需)&…

Lecture 18

Floating Point Numbers 1. 整数的局限性: • 在计算机中,并非所有数字都能用整数形式表示。例如: • 非整数(如小数):345.0256。 • 超出整数表示范围的数: 5.375 \times 10^{25} 。 2. 浮…

【LC】19. 删除链表的倒数第 N 个结点

题目描述: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出&#xff…

EasyExcel(读取操作和填充操作)

文章目录 1.准备Read.xlsx(具有两个sheet)2.读取第一个sheet中的数据1.模板2.方法3.结果 3.读取所有sheet中的数据1.模板2.方法3.结果 EasyExcel填充1.简单填充1.准备 Fill01.xlsx2.无模版3.方法4.结果 2.列表填充1.准备 Fill02.xlsx2.模板3.方法4.结果 …

五.Springboot通过AOP实现API接口的签名验证

文章目录 前言一、实现原理二、签名规则三、服务端实现4.1、创建自定义注解4.2、创建切面处理类4.3、对应工具类RequestUtil 四、测试4.1 签名失败测试:4.2 签名成功测试: 四、总结 前言 对外开放的接口,需要验证请求方发送过来的数据确实是…

记录jvm进程号

日常开发中,相信大家会经常用到这么一行命令: ps -ef | grep xxx.jar | grep -v grep | awk {print $2} | xargs -r kill -9 就是杀掉xxx相关的进程,然后启动,当然也还有其他的方式可以实现类似的功能,我就不列举了&…

STM32完全学习——使用定时器1精确延时

一、定时器的相关配置 首先一定要是递减定时器,递增的不太行,控制的不够准确,其次在大于10微秒的延时是非常准确的,小于的话,就没有那没准,但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟…

简述css中z-index的作用?如何用定位使用?

z-index是一个css属性,用于控制元素的堆叠顺序, 如何使用定位用index 1、position:relative; z-index; 相对于自己来定位的,可以根据top,bottom,right,left&#xff…