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

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.mzph.cn/news/639867.shtml

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

相关文章

【SpringCloud Alibaba】 介绍及微服务模块搭建

文章目录 SpringCloud Alibaba 介绍主要功能组件 微服务环境搭建案例准备技术选型模块设计微服务调用 创建父工程创建基础模块1、创建 shop-common 模块2、创建实体类 创建用户微服务1、创建pom.xml2、编写主类3、创建配置文件 创建商品微服务1、创建一个名为 shop-product 的模…

理解PCIE设备透传

PCIE设备透传解决的是使虚拟机直接访问PCIE设备的技术&#xff0c;通常情况下&#xff0c;为了使虚拟机能够访问Hypervisor上的资源&#xff0c;QEMU&#xff0c;KVMTOOL等虚拟机工具提供了"trap and emulate"&#xff0c; Virtio半虚拟化等机制实现。但是这些实现都…

websocket实现聊天室(vue2 + node)

通过websocket实现简单的聊天室功能 需求分析如图&#xff1a; 搭建的项目结构如图&#xff1a; 前端步骤&#xff1a; vue create socket_demo (创建项目)views下面建立Home , Login组件路由里面配置路径Home组件内部开启websocket连接 前端相关组件代码&#xff1a; Login…

【操作系统】实验二 Proc文件系统

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

使用Rancher管理Kubernetes集群

部署前规划 整个部署包括2个部分&#xff0c;一是管理集群部署&#xff0c;二是k8s集群部署。管理集群功能主要提供web界面方式管理k8s集群。正常情况&#xff0c;管理集群3个节点即可&#xff0c;k8s集群至少3个。本文以3节点管理集群&#xff0c;3节点k8s集群为例 说明部署过…

vivado JTAG链、连接、IP关联规则

JTAG链 这列出了定义板上可用的不同JTAG链。每个链都列在下面<jtag_chain>以及链的名称&#xff0c;以及定义名称和链中组件的位置&#xff1a; <jtag_chains> <jtag_chain name"chain1"> <position name"0" component"part0…

ELK 分离式日志(1)

目录 一.ELK组件 ElasticSearch&#xff1a; Kiabana&#xff1a; Logstash&#xff1a; 可以添加的其它组件&#xff1a; ELK 的工作原理&#xff1a; 二.部署ELK 节点都设置Java环境: 每台都可以部署 Elasticsearch 软件&#xff1a; 修改elasticsearch主配置文件&…

计算机视觉工程师就业前景如何?

计算机视觉作为一门快速发展的技术领域&#xff0c;其就业前景非常广阔。以下是对计算机视觉就业前景的分析&#xff1a; 市场规模&#xff1a;计算机视觉行业的市场规模正在持续扩大。根据行业分析报告&#xff0c;预计全球计算机视觉市场规模将在2025年达到530亿美元&#xf…

【Web实操10】定位实操_图片上面定位文字

参考实现的效果是这样的&#xff1a; 目前还没有学到渐变色&#xff0c;所以标签效果的渐变色没有实现&#xff0c;只是利用radius设置了圆角图形&#xff0c;辅之以背景色和设置其中文本文字的颜色和居中对齐。 在自己写的过程中&#xff0c;对于标签的定位写成了相对定位&a…

RabbitMQ的安装使用

RabbitMQ是什么&#xff1f; MQ全称为Message Queue&#xff0c;消息队列&#xff0c;在程序之间发送消息来通信&#xff0c;而不是通过彼此调用通信。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时&#xff0c;消费者无法快速消费&#xff0c;…

打开json文件,读取里边的每一行数据,每一行数据是一个字典,使用matplotlib画图

这段代码的目的是读取 JSON 文件&#xff0c;提取关键信息&#xff0c;然后使用 Matplotlib 绘制四个子图&#xff0c;分别显示不同的指标随着 iter 变化的情况。这种图形化分析有助于直观地了解模型的性能。 画图结果如下&#xff1a; json文件格式如下&#xff1a;下面只粘贴…

计算机网络学习The next day

在计算机网络first day中&#xff0c;我们了解了计算机网络这个科目要学习什么&#xff0c;因特网的概述&#xff0c;三种信息交换方式等&#xff0c;在今天&#xff0c;我们就来一起学习一下计算机网络的定义和分类&#xff0c;以及计算机网络中常见的几个性能指标。 废话不多…

yarn集群datanode无法启动问题排查

一、问题场景 hdfs无法访问&#xff0c;通过jps命令查看进程&#xff0c;发现namenode启动成功&#xff0c;但是所有datanode都没有启动&#xff0c;重启集群&#xff08;start-dfs.sh&#xff09;后仍然一样 二、原因分析 先看下启动的日志有无报错。打开Hadoop的日志目录 …

C#,入门教程(24)——类索引器(this)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(23)——数据类型转换的一点基础知识https://blog.csdn.net/beijinghorn/article/details/124187182 工业软件首先要求高可靠性、高可维护性。 作为工业软件的开发者&#xff0c;我们对语言重载的需求是&#xff1a;“不可或缺”。 …

Gitee Reward让开源作者不再为爱发电

一、什么是Gitee Reward&#xff1f; Gitee Reward是Gitee为改善开源开发生命周期提出的新策略。开源项目的支持者们可以更轻松地为其喜爱的项目提供资金&#xff0c;贡献者们也可以因为其不懈的开源贡献得到奖励。 二、Gitee Reward上允许哪些类型的项目&#xff1f; 允许任…

stable diffuison的安装和使用

stable diffuison的安装和使用 简单介绍 Stable Diffusion是一个深度学习文本到图像的生成模型&#xff0c;它可以根据文本描述生成详细的图像。这个模型主要应用于文本生成图像的场景中&#xff0c;通过给定的文本提示词&#xff0c;模型会输出一张与提示词相匹配的图片。 S…

Cadence——布局部分相关教程

本文章基于【凡亿】Cadence Allegro 17.4零基础入门66讲PCB Layout设计实战加个人理解写出 &#xff08;一&#xff09;中英文切换 注意&#xff1a;只是将选项卡部分切换中文 1&#xff0c;设置中文 a,打开PCB Editor 17.4以后&#xff0c;点击Help和About b,可以看到与下…

服务器或服务器主板中的BIOS更新详解

BIOS更新总共有三种方式&#xff1a;DOS、UEFI Shell以及BMC网页更新&#xff0c;而其中&#xff0c;DOS与Shell的更新方式类似&#xff0c;因此以下为统一描述。 一、UEFI Shell或DOS下更新 当我们下载了官网的BIOS更新包并解压后可以获得一些更新文件&#xff0c;在更新文件…

Python基础第七篇(Python的文件操作)

文章目录 一、文件编码二、文件的读取操作1.操作代码2.读出结果 三、文件的写出操作1.源代码2.读出结果 四、文件的追加操作1.源代码2.读出结果 这篇文章旨在深入浅出地介绍Python在文件操作上的能力&#xff0c;包括文件的编码、读取和写入等基本操作。内容丰富、易于理解&…

公网环境调试本地配置的Java支付宝沙箱环境模拟支付场景

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境…