(23)Linux的软硬连接

news2025/1/7 15:07:08

前言:上一章我们讲解了 inode,为文件系统收了尾,这几章我们充分地讲解完了文件系统的知识点,现在我们开始开始学习软硬链接了。

软硬链接

1、Linux 下的快捷方式:软链接 

上一章我们介绍完了 inode ,我们再回顾一下 元数据: 

 

总共有七列,分别是模式、软硬连接数、文件所有者、组、大小、最后修改时间和文件名。 

 

上图中,红色圈出的就是 软硬连接数 了,目录dir为2,文件mytest.c为1.

我们刚才说了,可以使用 stat 文件名查看更多: 

软硬链接的区别:

软链接:是一个独立文件,有自己独立的 inode 和 inode 编号。

特性:可以理解为:软连接的文件内容,是指向文件所对应的路径

应用:相当于windows对应的快捷方式。

硬链接:不是一个独立的文件,它和目标文件使用的是同一个 inode。硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增 文件名 和 inode 编号的映射关系!

 创建硬链接(有inode):不是真正的创建文件。

 我们可以通过如下命令,创建一个文件的软硬链接:

$ ln -s 文件名 链接文件名    # 创建软连接
$ ln 文件名 链接文件名       # 创建硬链接

2、创建软链接

我们创建一个软连接,可以使用下面的指令:

$ ln -s 文件名 链接文件名    # 创建软连接

 比如我们创建一个 my.txt 文件,我们像创建一个 my.txt 文件的软链接,我们可以:

 

这就是软连接,my.txt 和 my.txt.soft 的 inode 是不同的:        

                                        

 下面我们来举一个实际的例子来体验软链接有什么实际的用途:

我们创建三个文件夹,在最深的文件里进行

代码演示:vim mytest.c

运行结果如下:

程序正常运行,这里我们在 d1/d2/d3 下直接 ./mytest.exe 就可以运行。

但是,如果我们如果想在外面运行这个程序就会很累,因为它的路径有点深:

 太麻烦了,所以这里我们就可以给它建立一个软连接,解脱双手:

$ ln -s ./d1/d2/d3/mytest.exe my.exe

 我们来运行一下 :

是不是很舒服??

现在是不是能理解一些了

3、创建硬链接

对我们来说,硬链接是什么呢?硬链接其实非常简单!我们创建一个硬链接:

$ ln 文件名 链接文件名       # 创建硬链接

 

my.txt 和 my.txt.hard 映射的是同一个 inode:

 

硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增文件名和 inode 编号的映射关系!

4、软硬链接的删除 

删除的话可以直接 rm,但是我们还是建议使用专门的 取消链接 的指令:unlink 

$ unlink 链接文件名   # 取消链接

 这个 unlink 就是用来取消链接的,但它也可以用来删文件。

5、硬连接数 

我们先重新创建一个硬链接,然后我们重点观察一下下面的 "数字": 

 

我们可以再多建立几个硬链接,你可以看到这个数字的变化:

 

什么是硬链接数?

你看这个 inode 编号,是不是有点像指针的概念?

硬链接本质就是该文件 inode 属性中的一个计数器 count。用来标识就几个文件名和我的 inode 建立了映射关系。简而言之,就是有自己文件名指向我的 inode (文件本身) 。

既然是一个独立的文件,inode 是独立的,软连接的文件内容保存的是指向文件的所在路径。

思考一些问题 

 思考:为什么创建普通文件,硬链接数默认是 1 ?

因为 普通文件的文件名本身就和自己的 inode 具有映射关系,而且只有一个!

所以默认的硬链接数为 1。那为什么目录是 2 呢 ?

我们知道,任意一个目录一定存在一个点或两个点: .   ..

那么 ./ 为什么表示的是当前路径呢?因为 . 表示的就是 mydir,当前所处的路径!   

默认一个空目录创建一个 自己的名字 和 一个点,所以两个文件名指向它,所以是 2。

那么 .. 又是什么呢?.. 指向的是上级路径!

这就是为什么我们 cd .. 可以回到上级目录的原因,因为它可以指向上级目录。

感谢阅读!!!!!!!!!!!

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

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

相关文章

SpringCloudAlibaba微服务架构实战派上下册技术交流!

另外我的新书RocketMQ消息中间件实战派上下册,在京东已经上架啦,目前都是5折,非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

力扣最热一百题——只出现一次的数字

这个合集已经很久没有更新了,今天来更新更新~~~ 目录 力扣题号 题目 题目描述 示例 提示 题解 Java解法一:Map集合 Java解法二:位运算 C位运算代码 力扣题号 136. 只出现一次的数字 - 力扣(LeetCode) 下述题…

FS【1】:SSP

文章目录 前言1. Abstract2. Introduction2.1. Motivation2.1.1. Few-shot Segmentation (FSS) Task2.1.2. Few-shot Segmentation (FSS) Problem 2.2. Contribution 3. Methods3.1. Motivation3.2. Overview of the architecture4.3. Self-support Prototype4.4. Adaptive Sel…

golang并发安全-select

前面说了golang的channel, 今天我们看看golang select 是怎么实现的。 数据结构 type scase struct {c *hchan // chanelem unsafe.Pointer // 数据 } select 非默认的case 中都是处理channel 的 接受和发送,所有scase 结构体中c是用来存储…

UCF101 数据集介绍与下载

一、介绍 UCF101 是一个现实动作视频的动作识别数据集,收集自YouTube,提供了来自101个动作类别的13320个视频。官方:https://www.crcv.ucf.edu/research/data-sets/ucf101/ 数据集名称:UCF-101(2012) 总视…

mapboxGL中区域掩膜的实现

概述 区域掩膜的功能也是比较常见的功能呢,本文分享在mapboxGL中结合canvas如何实现。 效果 实现 1. 创建画布 先创建一个map大小的canvas,设置其大小与样式,并添加到地图画布容器中。 const {width, height} map.getCanvas() canvas …

Vue入门三(表单控制|购物车案例|v-model进阶|与后端交互|计算属性|监听属性|Vue生命周期)

文章目录 一、表单控制二、购物车案例三、v-model进阶四、与后端交互跨域问题解决,三种交互方法跨域问题详解1-CORS:后端代码控制,上面案例采用的方式1) 方式一:后端添加请求头2) 方式二:编写中间件3) 方式三&#xff…

什么是线程?

线程 1. 线程概述 线程是计算机科学中的基本概念,指的是在一个进程中执行的独立指令流。通常,一个进程可以包含多个线程,它们共享进程的资源,如内存空间、文件句柄等,但每个线程有自己的独立执行流。线程是操作系统进…

Python图片格式转换与文字识别:技术与实践

目录 一、引言 二、Python图片格式转换 PIL库介绍 代码示例 质量优化 三、文字识别技术 四、Python实现文字识别 1、安装与配置OCR工具 2. 读取图片并提取文字 3. 优化与提高识别准确率 五、实践与应用案例 六、结论 一、引言 随着数字化时代的到来,图…

SOLIDWORKS 2024新功能之SOLIDWORKS PDM篇

SOLIDWORKS 2024 新功能 PDM篇目录概述 • 装配体直观 • 在 Web2 中下载文件的特定版本 • 文件类型图标 • “更改状态”命令中的签出选项 • 复制树对话框 • 查看检出事件详细信息 • 系统变量 • 查看许可证使用 • 数据安全增强功能 • SOLIDWORKS PDM 性能改进…

软件架构之事件驱动架构

一、定义 事件驱动的架构是围绕事件的发布、捕获、处理和存储(或持久化)而构建的集成模型。 某个应用或服务执行一项操作或经历另一个应用或服务可能想知道的更改时,就会发布一个事件(也就是对该操作或更改的记录)&am…

msckf_vio在ubuntu20.04中的编译

1.新建catkin workspace文件夹,并在其中新建src文件夹,并将源码clone至src内。 源码地址:https://github.com/KumarRobotics/msckf_vio 目录层级示意如下,build和devel不必新建,后续指令会自动新建。 2. 在编译之前…

虹科技术丨PCAN网关设备:打通通信壁垒,LED指示灯编程示例

来源:虹科汽车智能互联 虹科技术丨PCAN网关设备:打通通信壁垒,LED指示灯编程示例 原文链接:https://mp.weixin.qq.com/s/hpxssnDeD-43x3tyHJbAtA 欢迎关注虹科,为您提供最新资讯! 导读 在工业自动化、汽…

python 文本内容随机生成器

这段代码是一个用于生成指定长度的随机文本的函数。主要包括两个函数:generate_text()和generate_other_content()。 generate_text(original_text, length)函数接受两个参数:原始文本和生成文本的长度。该函数的作用是根据原始文本生成指定长度的文本。…

竞赛保研 基于深度学习的人脸识别系统

前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/…

【SpringCloud】之网关应用(进阶使用)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringCloud开发之网关应用》。🎯&a…

基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模

022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其在…

python——数字精度控制

num1 11 num2 11.345 print("数字11宽度限制为5,结果%5d" % num1) print("数字11宽度限制为1,结果%1d" % num1) print("数字11.345宽度限制为7,小数精度为2结果%7.2f" % num2) print("数字11.345不限制…

课堂纪律差如何整治

在教育的世界里,有时候课堂纪律会成为一种挑战。那些在教室里大声喧哗、无视规则的学生,常常让老师们头疼不已。那么,面对课堂纪律差的问题,我们应该如何有效整治呢?下面就让我来为你揭晓这个问题的答案。 一、建立明确…

比特币惊现“天地针”!ETF终局将至,美证监会账号被盗!谁该对市场波动负责?

就在投资者神经紧绷时刻,万众期待的ETF批准事件再次闹出“假新闻”大乌龙,而这次的主角竟是美证监会。 美国东部时间周二下午4:11,美国证券交易委员会(SEC)官方X账户发布帖子称:“今天,美国证券…