Linux--文件链接

news2024/10/2 8:36:03

目录

1.建立软连接

2.建立硬链接

3.什么是软链接

Linux中软链接的应用场景

4.什么是硬链接

5.文件与目录的硬链接数

6.软链接与硬链接的区别

用户无法对目录建立硬链接,可以建立软连接。


在Linux中文件的链接有两种:1.软连接  2.硬链接

1.建立软连接

建立软链接指令:

ln -s 被链接文件名 建立链接名

举例:为log文件建立一个软链接,名字为log.soft.link

这里log.soft.link这个软链接指向了log这个文件。

同时我们通过指令:

ll -li

这里我们可以发现log文件与软链接的inode编号是不一样的。说明log与软链接是两个互相独立的文件

2.建立硬链接

建立硬链接指令:

ln 被链接文件 链接名

举例:为hello文件建立一个硬链接,链接名为hello.hard.link

还是指令 ll -li 查看文件inode编号

我们发现hello文件与对应的硬链接的inode编号是一样的,数字由1变成了2,但是软连接并没有改变数字。

 通过对比,我们可以得出结论:

软链接是一个独立的文件,硬链接不是,因为他没有独立的inode编号。

3.什么是软链接

Linux中的软链接与windows系统里桌面的快捷方式是相似的。

这里我们点击桌面快捷方式与在D盘的路径下点击Xshell.exe的效果是一样的,都是打开Xshell这个软件。

这里既然点击快捷方式与运行.exe文件的效果相似那么为什么要有快捷方式呢?

这是因为软件的.exe文件一般都会藏在较深的目录当中,不方便用户查找,因此才有文件的的快捷方式。

这里Linux使用软链接也是因为这个原因。

Linux中软链接的应用场景

这里我们创建一个myproc.c文件,并编写代码,用gcc编译生成可执行文件,这里我们可以直接执行可执行文件。但是在未来公司里做一个项目,并不是一个.exe文件直接暴露出来,他可能把项目以特定的目录文件组织起来的,里面有各种目录与文件。当我们每一次执行可执行程序时,我们还得把他的整体路径全部打出来才可以执行。这里他太挫了,因此这里我们可以直接给.exe文件建立一个软链接,放到与项目目录同一个目录中,这样我们每次执行.exe文件,只需 ./软链接名 即可。

因此我们可以说软链接快速的帮我们定位到了文件。

如:执行test1/test2目录里的myproc。

因此软连接我们可以理解为:

是一个独立的文件,有独立的indoe,软链接内容是指向目标文件的路径。

4.什么是硬链接

这里我们解释硬链接,以inode为切入口。

从上面的实验看:硬链接不是一个独立的文件(没有独立的inode)。这意味着访问硬链接与被链接文件时,访问的是同一个文件。

硬链接的本质是 在指定目录内部的一组映射关系:文件名<->inode的映射关系

以上面创建硬链接为例,这里我们删除hello

 这里我们可以发现:

我们发现数字由2变为了1。

当我们为一个文件创建一个硬链接,再把这个文件删掉,相当于给这个文件重命名。

这里文件并没有并删除(inode还存在),那么什么时候一个文件才会被真正的删除呢?

没有文件名与inode的映射关系。(没有人用)

我们知道文件是保存在磁盘上的,那么对于文件系统来说,他又是怎么知道这个文件没有人用的呢(文件怎么知道没有文件名指向自己)?

这里inode结构体里,有一个int ref_count 成员,用作引用计数:表明有几个文件名映射关系。当我们建立一个硬链接时,不仅会在当前目录里新增一个文件名与inode的映射关系,还会将inode里的引用计数加1。删掉一个文件时,会将文件inode里的引用计数减1,当引用计数为0时,就会将文件真正的删掉。

(注:新建一个文件时,文件inode里的引用计数为1)

同时这里我们还可以解释变化的那个数字是什么:

这里的数字是,硬链接数,记录了有多少个文件名指向对应的inode。

所以硬链接的本质是:

增加一个文件名与inode的映射关系。

5.文件与目录的硬链接数

这里我们新创建一个文件proj,一个新目录newdir,然后查看详细信息:

那么这里为什么新建文件的硬连接数是1,而目录的却是2呢?

这是因为文件就有一个文件名与inode的映射关系。

而对于目录,我们知道目录里有两个隐藏文件:  .  当前目录  ..  上一级目录(注:这里的  .  与  ..  是硬链接)

这里我们发现   .  的inode与newdir的inode是一样,因此对于1446001这个inode编号对应的inode来说有两个文件名与inode的映射关系,所以新建目录的硬链接数为2。同时也说明了为什么  表示当前目录(inode一样)

这里当我们在newdir里再新建一个目录dir:

我们发现硬链接数变为了3.那这是因为什么呢?

这里还是因为目录里的两个隐藏文件:

这里我们可以发现在新建的dir目录里  ..  的inode与newdir的一样,因此,在一个目录(newdir)里新建一个目录(dir),导致多了一个文件名与inode的映射关系,所以该目录(newdir)的硬链接数加1。同时也说明了为什么  ..   是上一级目录(inode一样)   

6.软链接与硬链接的区别

软链接是一个独立的文件,有自己的inode,属性与内用。

而硬链接只是一个文件名与inode的映射关系保存在目录里。

用户无法对目录建立硬链接,可以建立软连接

实验证明:

对根目录建立软链接:

可以看出可以对目录建立链接,里面内容与根目录一样。

对根目录建立硬链接:

建立链接失败。

为什么不能对目录进行建立硬链接:
 

这里我们知道Linux的目录结构是一个多叉树的样子,

如果我们在结尾创建一个硬链接指向根目录。

这里硬链接的所在的目录就多了一个新文件名与根目录inode的映射关系。如果他允许这样子做,那么我们在使用find命令时,我们都要指定路径的,然后会对路径里的文件名与inode进行对应查找,如果当路径中出现硬链接时,就会从硬链接所在目录直接查找到根目录的位置,从而可能形成一个环形结构,导致一直循环的进行查找。因此目录不能进行硬链接。

(注:目录里的  .    ..    是由操作系统设置的指向目录的硬链接,是一个特殊情况。这里是为例方便用户切换到当前目录与上一级目录)

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

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

相关文章

3656A/B/D矢量网络分析仪

3656A/B/D矢量网络分析仪 3656A/B/D矢量网络分析仪适用于无线通信、有线电视、教育及汽车电子等领域&#xff0c;可用于对滤波器、放大器、天线、电缆、有线电视分接头等射频元件的性能测量。该产品采用WINDOWS操作系统;具有误差校准功能、时域功能、夹具仿真器功能;具有对数幅…

【Linux】Linux进度条小程序(包含色块实现)

我们再将Linux常用工具与命令都学会了之后&#xff0c; 设计进度条这个小程序可以比较好的帮助我们进行一定程度练习与巩固 目录 预备知识&#xff1a;回车换行&#xff1a;缓冲区&#xff1a; 进度条&#xff1a;准备工作&#xff1a;主题思路&#xff1a;代码实现&#xff1a…

理想架构的Doherty功率放大器理论与仿真

Doherty理论—理想架构的Doherty功率放大器理论与仿真 参考&#xff1a; 三路Doherty设计 01 射频基础知识–基础概念 ADS仿真工程文件链接&#xff1a;理想架构的Doherty功率放大器理论与仿真 目录 Doherty理论---理想架构的Doherty功率放大器理论与仿真0、Doherty架构的作用…

Open CASCADE学习|圆柱螺旋线绘制原理探究

1、圆柱螺旋线绘制原理 在OCC中&#xff0c;圆柱面的参数方程为&#xff1a; 设P为&#xff08;x0,y0,z0&#xff09;,则 xx0r*cos(u) yy0r*sin(u) zz0v 但u、v之间有关系时&#xff0c;此方程表达为圆柱螺旋线&#xff0c;u、v之间为线性关系时是等螺距螺旋线&#xff0…

unity 装饰器模式(实例详解)

文章目录 简介1. **组件装饰器&#xff08;Component Decorators&#xff09;**:2. **游戏对象特效装饰器&#xff08;GameObject Effects Decorator&#xff09;**:3. **输入处理装饰器&#xff08;Input Handling Decorators&#xff09;**:4. **性能优化装饰器&#xff08;P…

蓝牙----蓝牙协议栈Host层

蓝牙协议栈----Host层 蓝牙物理层基本信息链路层的状态机进入连接态的步骤主动扫描与被动扫描链路层通信模式 蓝牙地址蓝牙设备地址蓝牙标识地址蓝牙接入地址 蓝牙广播信道管理蓝牙数据信道跳频 蓝牙协议栈Host层包括PHY、LL、HCL层&#xff0c;注重关注PHY物理层和LL链路层。 …

微服务入门篇:Eureka注册中心(作用,搭建Eureka客户端和服务端)

目录 1.提供者与消费者2.Eureka的作用3.搭建EurekaServer1.配置服务端2.配置客户端3.复制实例操作4.服务拉取 1.提供者与消费者 ①服务提供者:一次业务中&#xff0c;被其它微服务调用的服务。&#xff08;提供接口给其它微服务) ②服务消费者:一次业务中&#xff0c;调用其它微…

嵌入式学习-C++-Day3

嵌入式学习-CDay3 一、思维导图 二、作业 1.设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #inclu…

UBUNTU中NGINX的负载均衡和环境搭建

1.准备三台ubuntu版本的虚拟机 2.开始安装&#xff0c;下载&#xff0c;解压&#xff0c;以及编译nginx所需的环境依赖 这里需要注意我们创建了一个新的目录 /home/nginx,所以在编译中记得更改 然后再编译过程中我们会发现提示无法编译&#xff0c;原因是缺少c语言的插件&…

Java 字符串 06 练习-字符串拼接、反转、金额转换(黑马)

代码&#xff1a; //import java.util.Scanner; public class practice{public static void main(String[] args) {int arr [] {1,2,3,4};String str arrToString(arr);System.out.println(str);}public static String arrToString(int [] arr){if(arrnull){return "&q…

让B端管理软件既美观又实用的解决方案来了

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 让B端管理软件既美观又实用的解决方案来了 在当今数字化时代&#xff0c;B端管理软件已…

每日一题——LeetCode2859.计算K置位下标对应元素的和

方法一 枚举法&#xff1a; 通过不断地将目标数值与 1 进行按位与操作&#xff0c;并根据结果判断最低位是否为 1&#xff0c;从而统计其中包含的 1 的个数。 如果1的个数等于K就加上该值。 var sumIndicesWithKSetBits function(nums, k) {function countOnes(num) {let cou…

谷歌企业开发者如何申请邓白氏码?

邓白氏编码是具有唯一性的9位数标识符&#xff0c;由 Dun & Bradstreet 分配给各组织&#xff0c;用于验 证商家&#xff0c;一个公司可免费申请一个。没有邓白氏编码&#xff0c;则不能注册单位开发者账号。 申请和接收邓白氏码是无需支付任何费用的&#xff0c;全程免费…

09.Elasticsearch应用(九)

Elasticsearch应用&#xff08;九&#xff09; 1.搜索结果处理包括什么 排序分页高亮返回指定字段 2.排序 介绍 Elasticsearch支持对搜索结果排序&#xff0c;默认是根据相关度算分来排序 支持排序的字段 keyword数值地理坐标日期类型 排序语法 GET /[索引名称]/_sear…

MVC架构模式与三层架构

提示&#xff1a;博客中的图片来源于动力节点在B站的视频讲解。 MVC架构模式与三层架构 一、三层架构二、MVC&#xff08;model view controller&#xff09;1.MVC 框架的工作流程&#xff08;1&#xff09;JSP Servlet javabean实现MVC。&#xff08;2&#xff09;SSM&#…

力扣1035. 不相交的线

动态规划 思路&#xff1a; 思路同 力扣1143. 最长公共子序列假设 dp[i][j] 为 nums1 长度 i 和 nums2 长度 j 能够组成不想交线的个数&#xff1b;可知 dp[0][j] 0&#xff08;nums1 长度为 0 不能组成线&#xff09;&#xff1b;同理 dp[i][j] 0&#xff1b;转移方程&…

python就业如何?和C++相比该选择哪个更好?

python就业如何&#xff1f;和C相比该选择哪个更好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff…

202410读书笔记|《半小时漫画青春期》——成为自己世界的星星,这才是最要紧的事儿

202410读书笔记|《半小时漫画青春期&#xff1a;心理篇》——成为自己世界的星星&#xff0c;这才是最要紧的事儿 一、一到考试就焦虑&#xff0c;怎么办&#xff1f;二、以前情绪挺淡定&#xff0c;现在咋动不动就爆发&#xff1f;三、追星那么开心&#xff0c;为啥还要我小心…

CHS_07.2.2.4_3+调度算法:多级队列调度算法

CHS_07.2.2.4_3调度算法&#xff1a;多级队列调度算法 多级对列调度算法 接下来 多级对列调度算法 看一个图你就明白了 如果一个系统采用多级对列调度算法 那么 这个系统会按照进程的类型设置多个对列 并且给不同的对列设置不同的优先级 举个例子 分为系统进程 交互式进程以…

力扣算法-Day19

344.反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的…