linux入门---软硬链接

软链接

使用指令ln -s 被链接的文件 生成的软链接文件 便可以创建软连接文件,ln是link的简写表明当前要创建链接文件,s是soft的简写表明当前创建的链接文件为软链接文件,然后加上被链接的文件,最后写上生成的链接文件的文件名比如说下面的图片:

在这里插入图片描述
这里生成了一个软链接文件,并且使用ls -l指令显示文件时会将这个文件所链接的文件也显示出来,使用指令ls -li指令可以查看每个文件对应的inode
在这里插入图片描述
通过上面的图片可以看到软链接文件有一个属于自己的inode ,并且soft_mycode.link文件的属性也和源文件mycode不相同,比如说soft_mycode.link的权限为0777文件大小为6但是mycode文件的权限为0775大小为8360,那么这就说明当我们使用ln指令-s指令创建软连接文件时操作系统会给我们创建一个文件,这个文件有自己的属性和inode,虽然这个soft_mycode.link文件是新创建的,但是这个文件的执行结果却和源文件mycode是一样的比如说下面的图片:
在这里插入图片描述
那么这就是创建软链接的方法以及软连接的部分属性。

硬链接

单独使用ln不加选项就可以创建硬链接文件:ln 源文件 生成的硬链接文件比如说下面的图片:
在这里插入图片描述
使用ls -li指令查看inode可以看到下面的现象:
在这里插入图片描述
我们发现硬链接文件的inode和原文件是一样的,但是软链接创建出来的文件inode和源文件是不一样的,所以软硬链接最根本的区别是:是否具有独立额度inode。软链接具有独立的inode可以被当做独立的文件看待,硬连接没有独立的inode所以不能被当做独立的文件来看待,硬连接的文件的inode和各种属性都和源文件相同,往源文件里面输入内容时源文件的大小不仅会发生改变而且硬链接文件的大小也会发生改变,比如说下面的操作:

在这里插入图片描述
一开始mycode.c文件大小为146,hard_mycode.link文件的大小也为146,我们使用vim工具往mycode.c文件里面写入数据之后mycode.c文件的大小变成了263,但是hard_mycode.link文件的大小也变成了263,但是上述操作对软连接执行一遍的话是不会发生改变,因为软连接链接的是生成的可执行程序,mycode可执行程序的大小为8360,soft_mycode.link文件的大小为6,使用make指令生成一个新的mycode程序再看看这里的属性的话就可以看到mycode可执行程序的大小发生了变化,但是soft_mycode.link文件的大小却没有任何变化:
在这里插入图片描述
那么这就更加说明了一点使用ln指令创建硬链接文件时根本没有创建新文件(因为没有分配独立的inode并且文件的性质还和源文件一摸一样),既然没有创建文件那么硬链接文件一定没有自己的属性集合和内容集合,所以他用的是源文件的inode和内容,之前我们讲过目录的数据块里面记录着文件名和inode的映射关系,而创建硬链接文件本质上就是在目录的数据块里面添加一个新文件名,并把该文件名指向的inode填入源文件的inode,所以一个inode可能会被多个文件名指向,所以在inode里面有个计数器,如果有一个文件指向这个inode的话,这个计数器的值就会加1,我们把一个对象里面有一个变量,这个变量用来表示有多少文件指向我的变量称为引用计数,也可以把他称为硬连接数,比如说当前的有两个文件名指向inode为1181179的文件
在这里插入图片描述

那么这个文件的计数器的值就为2,当我们吧mycode.c文件删除再查看文件属性时可以发现hard_mycode.link文件的链接数就变成了1
在这里插入图片描述
但是硬连接文件的内容和大部分属性都和之前没有变化,说明之前删除文件的时候并没有真正删除,只是删除了指向inode的一个文件名,只有当一个文件的硬链接数变成0时才会真正的删除一个文件,上述的过程也可以看做成给文件换了一个名字。删除源文件硬连接文件可以正常使用,但是删除软链接的源文件,软连接便无法正常使用比如说下面的操作,给一个文件创建一个硬链接和软链接,然后删除源文件就可以看到下面的现象:
在这里插入图片描述

硬链接可以正常使用,但是软链接已经发出警告无法正常使用了,而上面的删除并不是真正的删除文件名虽然不存在了但是文件的inode依然是存在的,那么这就说明软连接在查找源文件时根本不是通过文件的inode查找文件而是通过文件名来查找的文件,而在树状结构中查找一个文件名的方式就是通过绝对路径或者相对路径的方式进行查找,软连接也是一个文件他也有对应的数据块,所以在软连接文件的数据块里面就只保存着原文件的路径,这就是为什么删除源文件的文件名但是不删除inode软连接会失效的原因。

软连接的作用:

软链接的作用就是快速的执行另外一个路径的程序建立快捷方式。比如说当前的路径为:
在这里插入图片描述
我们可以创建一个mycode.c文件并往这个文件里面写入一些代码使其能够生成一个可执行程序,比如说下面的代码:
在这里插入图片描述
然后我们就可以前往一个其他路径比如说在当前路径下再创建一连串的目录,并前往最深处的目录,比如说当前的路径如下:
在这里插入图片描述
我们可以在这个路径下创建一个软链接,这个链接指向的是上面生成的那个程序:
在这里插入图片描述
那么我们就可以在当前路径中执行其他路径的程序,执行的结果如下:
在这里插入图片描述
这就是软连接的作用:创建其他路径的快捷方式。

硬链接的问题

为什么普通文件的硬连接的数是1?因为一个普通文件本身有一个文件名和自己的inode具有一个映射关系。那为什么新创建的目录文件的硬连接数是2呢?比如说下面的图片:

在这里插入图片描述

因为目录里面有两个隐藏文件 .和.. 其中.文件的inode和当前目录的inode是一样的都是1181184
在这里插入图片描述

..文件的inode又和上级目录的inode也是一样的都是1181178

在这里插入图片描述

所以这也是为什么.可以表示当前目录,而cd ..可以回到上级目录的原因。但是用户不能给目录创建软硬链接因为操作系统不相信用户。但是操作系统相信自己所以...就是给目录创建的硬连接。那么这就是本篇文章的全部内容希望大家能够理解。

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

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

相关文章

使用 ArcGIS Pro 进行土地利用分类的机器学习和深度学习

随着技术进步,尤其是地理信息系统 (GIS)工具的进步,可以更有效地对土地利用进行分类。分类的使用可用于识别植被覆盖变化、非法采矿区和植被抑制区域,这些只是土地利用分类的众多示例中的一部分。 分类的一大困难是确定要解决的问题的级别。我分类的目的是什么?分类是否需…

【科普知识】电机的10种工作制说明:S1~S10

如今,在我们的生活中,电机几乎无处不在,从国防、工农、运输、临床器械、通讯到生活中的洗衣机、风扇、吸尘器、电动机器人等,都在应用着各式各样的电动机。 电机作为一种能够将电能转换成机械能的装置,是现代工业生产和…

【搭建私有云盘】无公网IP,在外远程访问本地微力同步

文章目录 1.前言2. 微力同步网站搭建2.1 微力同步下载和安装2.2 微力同步网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 私有云盘作为云存储概念的延伸,虽然谈不上多么新颖,但是其…

快速上手非关系型数据库Redis

一、Redis介绍 1.非关系型数据库,纯内存操作,key-value存储,性能很高,可持久化(内存---->保存到硬盘上) 2.缓存,计数器,验证码,geo地理位置信息,发布订阅…

RocketMq windows 安装

RocketMq安装步骤: 1、直接在官网下载。也可以从这里自取 https://rocketmq.apache.org/download/ 2、修改bin目录下的文件 runserver.cmd 和 runbroker.cmd文件。主要修改所占用内存的大小。 runserver.cmd 修改如下: runbroker.cmd 修改如下&#xff…

【人脸检测】——Sample and Computation Redistribution for Efficient Face Detection论文简读

人脸检测 摘要 在非受控人脸检测方面已经取得了巨大的进步,但低计算成本和高精度的高效人脸检测仍然是一个开放的挑战。作者提出了两种简单而有效的方法:样本再分配(SR)和计算再分配(CR)。在WIDER FACE上进…

AI失业潮来袭,某些部门裁员过半

历史的车轮滚滚向前,每次生产力的大幅跃进,都会造成一批失业潮。想当年,纺纱机的出现让无数手工作坊的织布师傅失业。如今,在AI技术的催化下,同样的事正在互联网行业的各个领域重演。 疯狂的裁员浪潮 “AI15秒做的&am…

np.convolve(x,h, mode=‘##‘)的使用

用法: np.convolve(a,v,mode) a代表卷积数据,v卷积核大小,mode卷积方式,mode卷积方式有三种 same full valid mode可能的三种取值情况: full’ 默认值,返回每一个卷积值,长度是NM-1,在卷积的…

【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 策略模式(Strategy Pattern)属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中,根据需要来绑定策略,使得具体实现和策略解耦。 当你想使用对象中各种不同的算法变体,使用if...else 所带来的复杂和…

Python入门教程+项目实战-11.5节: 程序实战-选择排序算法

目录 11.5.1 排序算法简介 11.5.2 选择排序算法 11.5.3 系统学习python 11.5.1 排序算法简介 所谓排序,是指将数据集合中的元素按从小到大的顺序进行排列,或按从大到小的顺序进行排列。前者称为升序排序,后者称为降序排序。在数据结构与算…

【Java笔试强训 7】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥Fibona…

( 哈希表) 594. 最长和谐子序列 ——【Leetcode每日一题】

❓594. 最长和谐子序列 难度:简单 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列&am…

AWSFireLens轻松实现容器日志处理

applog应用程序和fluent-bit共享磁盘,日志内容是json格式数据,输出到S3也是JSON格式 applog应用部分在applog目录: Dockerfile文件内容 FROM alpine RUN mkdir -p /data/logs/ COPY testlog.sh /bin/ RUN chmod 777 /bin/testlog.sh ENTRYP…

MySQL知识学习01

1、什么是关系型数据库? 顾名思义,关系型数据库(RDBMS,Relational Database Management System)就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多&am…

宏基因组组装 | 就现在!做出改变!!

微生态研究的核心难点是什么! 基因组组装! 从宏基因组数据中组装获得细菌的完整基因组(complete MAGs)是微生物组研究的长期目标,但基于NGS的宏基因组测序和组装方法是无法实现完整的细菌基因组组装的。即便是红极一…

【五一创作】Apollo(入门)

Apollo(入门) Quick Start 配置中心是一种统一管理各种应用配置的基础服务组件 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且…

使用pands.rolling方法实现移动窗口的聚合计算

一个问题举例 假设有一个5天的收益数据,需要每3天求出一次平均值来达成某个需求: daterevenue2023-05-01102023-05-02202023-05-03302023-05-04402023-05-0550 1号、2号和3号的数据求一次平均值,2号、3号和4号的数据求一次平均值&#xff…

5.4.1树的存储结构 5.4.2树和森林的遍历

回忆一下树的逻辑结构: 双亲表示法(顺序存储) 如果增加一个结点M,L。毋须按照逻辑上的次序存储。 如果是删除元素: 方案一:比如说删除元素为G,设置其双亲结点为-1。 方案二: 把尾部的结点提上…

Sybase使用sp_helptext查看系统存储过程的源码

sp_helptext存储过程用于显示已编译对象的源代码。 sp_helptext是Sybase ASE内置的存储过程,可从任何位置调用。 但实际上,如果直接使用,常常会得到(令人头大的)错误提示: Msg 17461 Object does not exi…

基于JavaSpringboot+vue国风汉服文化交流宣传系统

基于JavaSpringbootvue国风汉服文化交流宣传系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…