Linux——软硬链接的理解

news2024/11/17 9:30:15

目录

那什么是链接?

链接命令的生成:

实验案例: 

硬链接概念:

软链接概念:

情况1:删除myfile.txt:

情况2:重新创建一个新的myfile.txt文件:

软链接作用:

软链接的作用:


今天我们来讲一讲Linux系统中对文件的链接:

那什么是链接?

        链接就是共享文件的一种方式。使用链接我们可以轻松快捷的跳转到该文件中。就好比在Windows系统中,下载了一个谷歌浏览器的软件,假设该软件的安装位置是在:

C:\Program Files\WindowsPowerShell\Modules\Pester\3.4.0\Examples\Validator\abca中,那么使用该浏览器就需要运行它的可执行文件程序,我们就需要一步一步的点开这么多的文件夹去找,不仅浪费时间,心态上也会崩溃。于是链接的好处就体现出来了,将该可执行文件进行路径链接——快捷方式,链接好后放在桌面,以后我们只需要在桌面打开该快捷方式即可,轻松又简单。而在Linux中,程序员们经常用链接去解决一些版本的问题。

链接命令的生成:

对文件使用链接有两种方式:一种是硬链接,一种是软链接。

硬链接指令:ln 文件名 链接名

软链接指令:ln -s 文件名 链接名

 

实验案例: 

        从上图的指令执行结果可知:通过创建一个文件,使用硬链接指令去生成后就像是一个普通的文件,使用软链接生成后是彩色链接名用箭头指向文件名。

硬链接概念:

        通过索引节点inode来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给该文件分配一个inode编号,多个文件名指向同一个inode是存在的,一般这种链接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删的功能”。因为对应该目录的索引节点inode有一个一个以上的链接,只删除一个并不影响文件的inode及其数据和其他对该inode的链接,只有当最后一个链接该inode的链接被删除后,文件的数据块才会被释放。文件真正被删除的条件是与之相关的所有硬链接均被删除。

软链接概念:

        类似于Windows的快捷方式,给文件创建一个快速的访问路径。它依赖于源文件,该软链接的inode会被系统重新分配一个,并不会与源文件的inode相同,这是与硬链接最大的区别之一!当源文件出现丢失、删除问题后,该链接不可用。

        

使用ls -li指令可以查看当前目录下的inode编号:

         从上图知:硬链接与文件的inode是同一个,表明硬链接并不是一个特有的文件,且其它的属性(文件权限、内容大小)也与文件相差无几,说明硬链接采用的全是myfile.txt的信息数据,就像是一个克隆体一样。

        而软链接的inode与文件不同,说明它是一个独立的文件,但软链接的其他属性有许多和文件差很多。

命令执行:向myfile.txt文件写入一行字符串内容 

        发现不仅仅是myfile.txt的内容大小从0变成了13,连硬链接的内容也变成了13,更加证明了硬链接采用的全是myfile.txt的信息数据,myfile.txt变成什么样,硬链接就变成了什么样。 

        反观软链接的大小从创建出来是10后,现在它仍是10。

        通过查看这两个链接的内容,我们发现,软连接的内容也有hello bit! 但是它的大小就是不变,这说明了软链接里面装的并不是myfile.txt的内容数据,其实装的是myfile.txt的绝对路径! 

 

 

情况1:删除myfile.txt:

        当我们删除了原本的文件后,对该文件进行链接后的两个链接文件会发生什么呢?是不是全都失效了?

         经看上图我们发现:软链接变红了,而且后面被删除的文件发红发闪,这是软连接发出的警告,表明它失效了,虽然失效了但软链接仍在,没有随着文件的删除而消失。

        但是我们使用cat命令查看软链接的内容时,发现该链接不存在!也就是说它处于半死不活的状态。

        但对比硬链接来说,硬链接并没有发现什么问题,没有发红,大小什么的也没变

        使用cat指令查看硬链接的内容时,它仍然显示着上一次myfile.txt输入的内容,也就是说myfile.txt文件的删除并没有影响到硬链接文件,它仍保留着myfile.txt被删除前的所有数据,包括inode。 

 

情况2:重新创建一个新的myfile.txt文件:

        重新创建一个同名字的文件时,这两个链接又会发生什么变化?

通过显示出来的结果,我们发现有多处地方不同:

        1.创建出来的myfile.txt拥有了新的indoe编号1048614,那么说明myfile.txt不再是原来的myfile.txt了。

        2.软链接又活过来了!!!,软链接在生无可恋的生活中又遇到了和之前长得一模一样的容貌和名字的女孩,他从绝望的泥潭深渊中又飞到了希望的湖边稻田中。

        3.在往新文件myfile.txt中输入新内容“xixixi”后,查看软链接的内容,发现变了;查看硬链接的内容,发现没变,更加佐证了硬链接和这个新myfile.txt不再有任何关系。硬链接也遇到了和之前长得一模一样容貌和名字的女孩后,但对其显得很冷漠,压根不理人家,与软链接形成了天差地别的影响。

        总结:虽然旧文件myfile.txt被删除了,又产生了与旧文件相同名称的新文件myfile.txt,虽说是狸猫换太子,但狸猫和太子的出生地(绝对路径)是一样的;而对于硬链接来说,狸猫终究不是真正的太子!


软链接作用:

        在实际情况中,软链接的使用率是远远高于硬链接的,接下来我通过Linux来展示软链接的实际作用:

         通过创建一个多重递归型目录后,在该目录的最后一层进行代码的编写并生成可执行文件,将做好的这个可执行文件执行的话只能是进入一层又一层的目录下去找该文件,这种方式有些搓,即使在目录外面,也需要输入繁琐的指令去执行,如下:

为可执行文件main.exe产生软链接: 

 这样,直接执行软链接即可。

 


软链接的作用:

 

        案例说明: 

        由上图可知:在当前目录下,有个子目录bin,该目录的inode编号为1317147。接下来我将会在bin目录里面再创建一个子目录empty: 

 

         创建出empty后,该目录的inode编号为1317147,进入empty目录里面,使用ls -ali指令,该指令的作用是显示当前目录下所有的文件的详细属性及其inode编号。

        这里做个知识点解析:倒数第三行及倒数第二行的.和..文件是属于隐藏文件,.表明是当前路径,..表明是上一级路径。

        通过图片可知bin目录的inode编号和/bin目录下的.文件inode编号相同。我在上面讲到过硬链接链接某个文件时,它们的inode是相同的,所以.是bin目录的硬链接。

继续举例:

         总结:bin目录下的.文件和bin目录下的empty目录下的..文件inode也相同,说明/bin/empty/..是/bin/.的硬链接,它俩也都是bin目录的硬链接。

         所以在文件属性栏中的第3列中的数字表示的就是该文件的硬链接数目,由上可知bin目录文件包括它自己共有3个相同的inode编号1317147,所以为硬链接数目为3。

        定义硬链接数目的方式就是:该文件本身+链接它自己的多个硬链接!

                 我们平常使用的cd ..,./main.exe等命令全是使用硬链接进行的。

                 默认情况下:新创建一个文件的硬链接数为1——它本身

                                    新建一个目录的硬链接数为2——它本身和它内部的.文件

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

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

相关文章

推特引流:社交引流的技巧与方法

推特是一个广泛使用的社交媒体平台,可以用于引流和推广您的品牌、产品或服务。以下是一些社交引流的技巧和方法,可以帮助您在推特上获得更多的关注和流量: 优化个人资料:确保您的推特个人资料完整并具有吸引力。包括一个清晰的头…

yolov8-02 训练自己的数据集

1. 准备数据集 数据集格式跟yolov5一样,关于如何准备数据集可见之前的文章。 2. 创建 mydata.yaml 格式参考coco128.yaml,主要是 train / validate文件的存放路径,可以是同一个。 在ultralytics-main/ultralytics/datasets中,…

【Linux】ubuntu20.04安装ansys2023r1教程--超详细

一、安装包及其和谐文件 双击挂载 二、在ubuntu上安装依赖项 执行命令sudo apt install build-essential xterm libmotif-dev libxtst-dev libxt-dev libzip-dev libxmu-dev tcl tk lsb csh xfonts-75dpi xfonts-100dpi wine 弹出一个提示,需要去下载一个171MB的压…

Simulink 中基于 FPGA 的波束成形:算法设计(附源码)

一、前言 本示例显示了在 Simulink中开发适用于在硬件(如现场可编程门阵列 (FPGA))上实现的波束成形器的工作流程的前半部分。它还演示如何将实现模型的结果与行为模型的结果进行比较。 示例 Simulink 中基于 FPGA 的波束成形&…

shell 数组 ${array[@]} ${array[*]}的使用及区别

数组定义 shell中用括号来表示数组,数组元素间使用空格隔开。 例如: a(1 2 3 4) 表示a数组且有元素为1,2,3,4 也可单个元素逐步来赋值 b[1]"a" b[2]"b" b[3]"c" echo ${b[]} # a b c 关联数组 定义关联数组&#xf…

论文翻译:Segment Anything

论文地址:https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresearch/segment-anything 数据集地址:https://ai.facebook.com/datasets/segment-anything/ “Segment Anything"项目旨在通过引入新的任务、数据集…

决定AI大模型胜负的关键:解读数据在未来竞争中的角色

随着人工智能的迅猛发展,高质量数据的重要性已愈发明显。以大型语言模型为例,近年来的飞跃式进展在很大程度上依赖于高质量和丰富的训练数据集。相比于GPT-2,GPT-3在模型架构上的改变微乎其微,更大的精力是投入到了收集更大、更高…

声卡设备无法正常工作或初始化的原因和解决方法

先来一个小科普,声卡设备是电脑中负责处理音频信号的硬件部件,它需要与相应的声卡驱动程序配合使用,才能让电脑发出或录制声音。 不过,自带声卡的设备或是自行匹配的声卡设备,也经常出现声卡设备无法正常工作或初始化…

通过Jenkins实现Unity多平台自动打包以及相关问题解决

简介 通过本文可以了解到如何在windows和mac上部署Jenkins。并且通过Jenkins实现Unity在IOS,安卓和PC等多平台自动打包的功能,并且可以将打包结果通过飞书机器人同步到飞书群内。优化工作流,提高团队的开发效率。文末记录了实际使用Jenkins时遇到的各种问…

Leetcode44 通配符匹配

给你一个输入字符串 (s) 和一个字符模式 (p) ,请你实现一个支持 ? 和 * 匹配规则的通配符匹配: ? 可以匹配任何单个字符。 * 可以匹配任意字符序列(包括空字符序列)。 判定匹配成功的充要条件是:字符模式必须能够 完…

真心靠谱 Ubuntu18.04 换源 国内阿里云私服

本篇 blog 真心靠谱 1、备份原来的默认源 cp /etc/apt/sources.list{,.bak} 2、换阿里云的源(需要稍作修改) 直接使用阿里云的会报错 https://developer.aliyun.com/mirror/ubuntu 以上报错:是https证书问题,网上有人说安装证…

基于改进ISODATA算法的负荷场景曲线聚类MATLAB程序

参考文献: 基于机器学习的短期电力负荷预测和负荷曲线聚类研究_张辰睿(硕士论文) 参考其第三章 主要内容: 主要包含四种聚类算法,K-means聚类、ISODATA聚类、L-ISODATA聚类及K-L-ISODATA聚类,并且包含了…

JSch登录sftp时发现需要Kerberos身份验证

本问记录使用JSch登录sftps时遇到的Kerberos验证问题并记录了解决方法 项目场景: 项目开发中使用了SFTP,debug调试程序时发现了每次都需要手动输入 Kerberos的口令信息。这就很奇怪了难道每次连接SFTP时候都需要手动输入吗? 日志如下&#x…

RPC核心原理详解

什么是RPC? RPC的全称是Remote Procedure Call,即远程过程调用。简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现,但是不是只要通过网络通信访问到另一台机器的应用程序&#xff0c…

基于Dubbo分布式学校信息管理系统设计与实现

一、引言 1.1 课题背景 随着时代的发展与进步,计算机网络也随之日益完善,渐渐覆盖了我们生活的各个方面。在信息化和数字化的时代背景下,使用计算机管理学校信息来提升教育工作的质量和效率,是大势所趋,所以近年来,随着网络技术的不断发展,使用信息管理系统的学校越来…

云原生时代数据治理的变革与创新

随着数字化进程的深入,企业对数据的依赖日益加深,数据资源的重要性愈发凸显。如何管好、用好数据,做好数据治理工作,发挥数据资源价值,成为企业提质增效过程中的重要议题。 在本次直播中,我们介绍了数据治…

leetcode:191. 位1的个数

难度:简单 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 1 的个数(也被称为汉明重量)。 提示: 请注意,在某些语言(…

qt 最小文件系统 交叉编译qt源码

busybox qt源码下载后,需要交叉编译,在开发板上生成相应的库,才能在开发板上使用 我用qt制作了一个计时器,有相应的按钮功能。在windows上我大概知道鼠标点击按钮能够触发相应事件。把该程序移植到linux开发板上,开发…

Qt QSqlTableModel详解

背景知识: Qt SQL的API分为不同层: 驱动层 驱动层 对于QT是基于C来实现的框架,该层主要包括QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorbase、QSqlDriverPlugin and QSqlResult。这一层提供了特定数据库和SQL API层之间的底层桥梁…

AutoSAR系列讲解(入门篇)3.2-RTE对Runnables的运行支撑

目录 一、作为运行环境的主要功能点 二、Runnables的触发条件 一、作为运行环境的主要功能点 通过RTE给runnable提供触发事件。 之前说过了runnable是可以被触发的,就是需要通过RTE来实现这个触发和调用runnable,具体在下面讲解 通过RTE给runnable提供…