Linux操作系统——理解软硬链接

news2024/12/23 17:57:58

1.引言

通过我们前面理解文件系统的基础上,我们来理解软硬链接,在我们学习文件的时候我们会见到各种链接文件,其中链接文件分为两种,一种叫软连接,一种叫硬链接。

下面我们新建一个log文件,要对log这个文件进行软链接我们该如何实现呢?

所以此时我们就用这一条命令

ln -s  log log.soft.link

使用后者链接前者。回车之后:

此时我们再执行这条指令

ll -li

我们发现log这个文件的inode没有发生变化,1054696和1054697是两个独立的文件,这个log.soft.link我们就称之为软链接。

下面我们再创建一个hello 文件,然后对这个文件进行硬链接:

此时我们就看到这两个文件进行硬链接之后inode是一样的。所以我们得出一个结论:软链接是一个独立的文件,硬链接没有独立的inode编号。

2.什么是软链接?什么是硬链接?及其软硬链接的应用场景

软链接其实就是类似于windows系统下的快捷方式,软链接内容是指向的目标文件的路径。

我们除了可以直接通过这个谷歌浏览器的快捷方式来打开它,同时也可以通过该快捷方式的目标文件的路径找到这个可执行程序双击之后打开它。

为什么要有快捷方式呢?因为我们平常要运行一个程序都是通过找到.exe这个程序双击之后运行起来,但是一般我们的可执行程序的路径可能都比较深,不方便用户进行查找,所以我们可以通过软链接的方式把这个可执行程序的路径作为软链接文件的内容,然后把这个软链接文件(其实就是快捷方式)放到我们经常使用的桌面上就可以快速找到它,那么在linux下也有这样的例子,下面我们可以进行一下简单的测试:

下面我们新建一个.c文件:

然后在myproc.c这个 文件里面写简单的测试代码:

下面我们对这些代码进行编译一下,然后运行:

未来我们做的一些项目,或者是企业做的一些项目,它不是把这个myproc.exe文件暴露在外部,它可能是把整个项目有一个特定的目录配置成的,比如说一般项目proj下都有bin目录,conf目录,log目录,一般可执行程序都是在bin目录下的。

所以项目一般都是这么打包的。

下面我们如果想访问这个项目的可执行程序,我们要执行可执行程序还得这么去运行:

如果我们用一个文件对这个可执行程序进行软链接:

这样就可以更方便的运行用户需要的可执行程序或者项目了。所以我们就可以通过在外部对可执行程序进行软连接进行快速定位指定的文件了。所以软链接的应用场景就是可以快速定位文件,这是其一。如何去理解软链接呢?类似于windows的快捷方式,独立文件,有独立的inode.软链接的内容是指向的目标文件的路径。

下面我们来谈谈硬链接:

硬链接不是一个独立的文件!硬链接是什么?

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

这里我们相当于是对同一个文件进行了不同的取名,所以这个数字2和1应该是对应的inode于文件名之间进行映射的数量 ,当我们删除hello之后数字2变成了1,所以一个文件什么时候会被删除呢?答案是没有文件名和inode进行映射时(也就是说没有人用这个文件了),那么在文件系统层面,目标文件怎么知道没有文件名指向我了呢?inode内部有引用计数,表明有几个文件名映射关系。

文件名在目录里面具有唯一性,其实我们可以把文件名看成一个指向inode的指针,一旦有新的文件名指向inode,那么inode对应的引用计数那个变量就可以++,直到该引用计数变为0的时候说明这个文件被删除了。我们把这个引用计数的变量叫做硬连接数。

下面我们再来对硬链接的一些使用场景进行测试:

我们新建了一个newfile文件,同时在新建一个目录newdir,那么我们发现,为什么新建一个文件的硬链接数是1,而我们新建一个目录的硬链接数是2。这个普通文件只有一个硬链接数其实我们很容易理解,因为这个inode只有这一个文件名与之建立映射,而这个新目录newdir的硬链接数为什么是2呢?

当我们进入newdir这个目录执行ll -lia这条命令,我们就可以看到两个隐藏文件,一个是.  , 另一个叫做 .. 。 而.是指的当前目录,另一个..指的是上级目录,而这个当前目录.其实就是指的newdir对应的inode这个文件,所以与inode建立映射关系的有newdir 和 .

而如果我再从newdir目录下建立一个新的目录dir,然后我们就会发现,这三个文件的inode都是一样的,所以自然该inode的硬链接数就是3了。

3.软硬链接之间的区别是什么?

区别就是软链接是一个真正的文件,有自己的文件名,inode和属性,内容。而硬链接就是文件名与inode建立的一个映射关系。而用户无法对目录建立硬链接。

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

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

相关文章

搭建一个简单的Spring Demo

要学习Spring 源码&#xff0c;一个是从Spring GitHub 上去down源码&#xff0c;然后倒入IDEA编译&#xff0c;但这种方法费时费力&#xff0c;如果你不需要对Spring 源码进行修改后&#xff0c;再编译的话&#xff0c;直接搭建一个Spring Demo 的Maven项目&#xff0c;引入Spr…

Linux操作系统——理解文件系统

预备知识 到目前为止&#xff0c;我们所学习到的关于文件的操作&#xff0c;全部都是基于文件被打开&#xff0c;被访问&#xff0c;访问期间比较重要的有重定向&#xff0c;缓冲区&#xff0c;一切皆文件&#xff0c;当我们访问完毕的时候需要将文件关闭&#xff0c;关闭时那…

关于事务的最常见的十道面试题

面试题一&#xff1a;什么是事务&#xff1f;为什么需要事务&#xff1f; 事务(Transaction)是保证数据库可靠性和稳定性的一种机制&#xff0c;单个逻辑工作单元执行的一系列操作&#xff0c;这些操作要么全部完成&#xff0c;要么全部不完成&#xff0c;是数据库环境中的最小…

Aria2 WebUI控制台 任意文件读取漏洞复现(CVE-2023-39141)

0x01 产品简介 Aria2 WebUI控制台是用于下载文件的实用程序。它支持 HTTP(S)/FTP/SFTP/BitTorrent 和 Metalink 协议。aria2可以从多个来源/协议下载文件,并尝试利用您的最大下载带宽。它支持同时从HTTP(S)/FTP/SFTP和BitTorrent下载文件,而从HTTP(S)/FTP/SFTP下载的数据上…

《WebKit 技术内幕》学习之八(1):硬件加速机制

《WebKit 技术内幕》之八&#xff08;1&#xff09;&#xff1a;硬件加速机制 1 硬件加速基础 1.1 概念 这里说的硬件加速技术是指使用GPU的硬件能力来帮助渲染网页&#xff0c;因为GPU的作用主要是用来绘制3D图形并且性能特别好&#xff0c;这是它的专长所在&#xff0c;它…

深入了解WPF控件:常用属性与用法(六)

掌握WPF控件&#xff1a;熟练常用属性&#xff08;六&#xff09; ListView 用于展示数据项集合的列表控件。它提供了丰富的功能和灵活的定制性&#xff0c;可以轻松地展示和编辑大量的数据。 常用属性描述ItemsSource用于设置ListView的数据源。可以是一个集合、数组或列表…

架构师考试相关信息

文章目录 去年考试安排官网通知&#xff1a; 中国计算机技术职业资格网&#xff08;今年的安排估计2月份放出&#xff0c;结果大约12月&#xff09; 1&#xff0e;系统架构的考试要求&#xff1a; &#xff08;1&#xff09;掌握计算机硬软件与网络的基础知识&#xff1b; &…

模板方法模式介绍

目录 一、模板方法模式介绍 1.1 模板方法模式的定义 1.2 模板方法模式的原理 1.2.1 模板方法模式类图 1.2.2 类图角色说明 1.2.3 示例代码 二、模板方法模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 账户抽象类 2.2.2 借款一个月 2.2.3 借款7天 2.2.4 测试类 三、…

helm---自动化一键部署

什么是helm?? 在没有这个helm之前&#xff0c;deployment service ingress helm的作用就是通过打包的方式&#xff0c;把deployment service ingress 这些打包在一块&#xff0c;一键式部署服务&#xff0c;类似于yum 官方提供的一个类似于安装仓库的功能&#xff0c;可以实…

Unity学习之坦克游戏制作(1)开始场景的制作

文章目录 1. 实现效果2. 场景装饰2.1 创建场景2.2 拖入场景地板 3 开始界面3.1 导入UI3.2 创建面板基类3.2.1 开始按钮 4 设置界面5 音效数据逻辑5.1 音效数据可持久化5.2 声明音效管理的主要变量5.3 声明数据管理器5.4 在设置面板的数据初始化5.5 提供API给外部 6 排行榜界面6…

​WordPress顶部管理工具栏怎么添加一二级自定义菜单?

默认情况下&#xff0c;WordPress前端和后台页面顶部都有一个“管理工具栏”&#xff0c;左侧一般就是站点名称、评论、新建&#xff0c;右侧就是您好&#xff0c;用户名称和头像。那么我们是否可以在这个管理工具栏中添加一些一二级自定义菜单呢&#xff1f; 其实&#xff0c…

JavaScript库jquery的使用方法

"写更少&#xff0c;做更多"是jquery的设计理念&#xff0c;jquery是一个兼容多浏览器的JavaScript库&#xff0c;利用jquery的语法设计能使开发更便捷。 网页添加jquery的方法:1.从jquery.com下载库&#xff1b;2.从CDN中载入库&#xff08;示例使用&#xff09;&a…

线性代数:矩阵运算(加减、数乘、乘法、幂、除、转置)

目录 加减 数乘 矩阵与矩阵相乘 矩阵的幂 矩阵转置 方阵的行列式 方阵的行列式&#xff0c;证明&#xff1a;|AB| |A| |B| 加减 数乘 矩阵与矩阵相乘 矩阵的幂 矩阵转置 方阵的行列式 方阵的行列式&#xff0c;证明&#xff1a;|AB| |A| |B|

项目管理中如何有效沟通?项目管理有效沟通指南

无论是少数人的小型企业还是拥有数十名员工的大公司&#xff0c;有效的沟通对于确保每个人都参与并准备好在项目中实现相同的目标至关重要。 然而&#xff0c;由于沟通不畅&#xff0c;似乎在翻译中总是丢失一些东西。事实上&#xff0c;根据布兰迪斯大学的一项研究&#xff0c…

k8s集群加入一个master2--kubeadm方式

已经有一个集群&#xff1a; 192.168.206.138 master 192.168.206.136 k8s-node1 192.168.206.137 k8s-node2 kubectl get nodes -o wide 新加入一个master2节点 192.168.206.139 master2 一、初始化系统参数 139 master2 上 #在136、137、138上添加hosts“” echo "…

MSG3D

论文在stgcn与sta-lstm基础上做的。下面讲一下里面的方法&#xff1a; 1.准备工作 符号。这里是对符号进行解释。 一个人体骨骼图被记为G(v,E) 图卷积&#xff1a; 图卷积定义 考虑一种常用于处理图像的标准卷积神经网络 (CNN)。输入是像素网格。每个像素都有一个数据值向…

protobuf 之诡异的文件流与压缩

只接上干货&#xff0c;内容较干。文章大概需要花费5分钟简单了解下。 1、Gzip 直接看源码头文件如上图。压缩对象 GzipOutputStream &#xff0c;通过函数操作可以看到整个文件流是比较完整并清晰。 因为它显示清晰包含了 从初始化 到 flush 到 close 的显示调用 2、Ostream…

同样是IT行业,测试和开发薪资真就差这么大吗?

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

ESP32-TCP服务端(Arduino)

将ESP32设置为TCP服务器 介绍 TCP&#xff08;Transmission Control Protocol&#xff09;传输控制协议&#xff0c;是一种面向连接的&#xff08;一个客户端对应一个服务端&#xff09;、可靠的传输层协议。在TCP的工作原理中&#xff0c;它会将消息或文件分解为更小的片段&a…

c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)

文章目录 1.把字符串转换成整数题目详情代码思路 2. 344.反转字符串题目详情代码1思路1代码2思路 3. 387. 字符串中的第一个唯一字符题目详情代码思路 4. 917. 仅仅反转字母题目详情代码思路 1.把字符串转换成整数 传送门 题目详情 代码 class Solution { public:int StrToI…