【Linux】深刻理解软硬链接

一.软硬链接操作

1.软连接

touch 创建一个文件file.txt ,对该文件创建对应的软链接改怎么做呢?

ln  -s  file.txt  file-soft.link .给对应文件创建软连接。

软连接本质就是一个独立的文件,因为我们对应的软连接有独立的inode,他和他指向的file.txt的inode是不同的。

如下图:

我们把字符串写入file.txt中,查看两个文件的内容,都能看到该字符串,说明实际在用户层使用我们的软连接,等同于我们的目标文件。软链接是通过名字引⽤另外⼀个⽂件,但实际上,新的⽂件和 被引⽤的⽂件的inode不同

2.硬链接

硬链接的使用方法,对文件file.txt怎么创建硬链接?

ln  file.txt  file-head.link.给对应的文件创建硬链接。

硬链接本质上不是一个独立的文件,没有独立的inode,而是相同的inode,不同的文件文件名。

在Linux中可以让多个文件名指向同一个inode。

如上面图片所示,权限后面这个数字是什么呢?没创建硬链接时,数字为1,创建硬链接后数字变成2,这个我们先引出来,后面说!!

Linux中搞懂操作是没什么用的,就跟之前创建进程,等待进程,说了操作,接口讲完没有用,最关键的是他在干什么?下面我们来认识如何理解软硬链接!!!

二.如何理解软硬链接

a.软硬链接有独立的inode,所以一定要有独立的属性和内容,软链接内容上,保存的是目标文件的路径,在Windows中,相当于一个软件在桌面上的快捷方式,所以平时用的这些快捷方式也是一个软连接文件,Linux中,软连接就是指向文件的快捷方式!!

b.硬链接,不是独立的文件,没有独立的inode,硬链接本质就是一组文件名和已经已经存在的文件的inode的映射关系!!!

c.所以当我们建立了软连接,就是相当于在当前目录下建立了一个软连接文件,快捷方式,而其中,我们建立一个硬链接,就是在我们当前所处的目录当中新增加一个文件名和要链接文件的inode的映射关系,所以最终,我们就会发现,这个硬链接文件,他所查到的inode和目标文件inode是一样的了,这个就是硬链接!!!

d.文件权限后面对应的数字是什么呢?创建硬链接文件前,目标文件数字为1,创建硬链接文件后,目标文件变成2?

根据前面讲的文件系统内容,知道了,一个目录也是文件,他的内容保存的是该目录下文件的文件名和inode的映射关系,所以在我们当前目录中,新建一个普通文件,题目文件名不在inode中保存,普通文件的文件名是在我们的文件所处的目录文件他的内容中保存的,创建一个硬链接文件,换句话说,就是在当前目录中有两个文件名,他们两个都会映射到同一个inode,这像什么呢?inode特别像一个指针一样的东西,所以当我们想使用文件名找文件的时候,我们都知道Linux下是通过inode找文件,两个文件的inode相同,所以本质上就是相当于有两个文件名指向同一个inode,换句话说,我作为一个inode,作为一个文件,什么时候在系统上算真正的删除呢?是不是要在整个系统里,没有任何文件名字符串和我这个文件inode的有映射关系时,也就是这个文件没有名字了,这个时候对应的文件就应该被删除了,可是我们怎么知道有多少个文件名通过ionde编号,来和我对应的文件的inode来产生关系呢?答案是在我们inode中,存在一个引用计数的东西,int ret_count,也就是说,今天在一个特定的目录下有一个文件名映射的inode是该文件,ret_count就会++,再有一个文件名和这个文件inode有映射关系,再++,所以我们对应的这个数字,称之为inode本身的引用计数,被称之为硬链接数!!!

e.如果我们对目标文件进行删除会怎么样?

对目标文件进行删除,硬链接还在,里面的内容还能打印出来,这个文件并没有被删除,所以这个删除做了一个什么工作?对目标文件进行重命名的工作,所有平时建立一个普通文件本质上都在不断进行建立硬链接,建立一个文件,本质就是硬链接文件,因为你的文件名和你的inode映射关系就相当于一份,所以删除,目标文件就减少一份,再把剩余的硬链接删除掉,引用计数变为0,文件系统中就会把你对应的这个inode直接删掉了。

删除目标文件,软链接就会变红,因为软链接文件中存的是目标文件的路径,目标文件找不到,软连接也就找不到了。

总结:

其实软链接说到底,其实就相当于,软链接就是一个普通文件,他的内容保存的是目标文件的路径,所以目标文件删除了变成红色,是因为这个软链接文件保存的目标文件的路径没有了,找不到了,而所谓的硬链接就相当于在当前目录下保存一下文件名和inode的映射关系,没有创建新的文件。

三.为什么要有软硬链接呢?各种应用场景

软链接:

 a.如果我们创建一个可执行程序code.exe,在命令行上要执行该文件是  ./code.exe 如果我们想要  ./code  就直接可以执行,我们该怎么办?

之前说过,可以把当前路径增加到环境变量或者把可执行文件拷贝到系统默认路径下,就可以不带  ./  直接执行。

现在我们学了软链接,就可以在当前路径下直接创建软链接:
ln -s code.exe code

这样就创建了一个软链接,就直接可以  ./code  直接执行该可执行程序。

如果想不加  ./  呢?

可以在 /usr/bin/ 路径下建立软链接,/usr/bin/ 是系统存放可执行文件的默认路径,这样就直接进行code就可以执行,创建快捷方式,直接建立软链接,就可以指向目标程序了。

删除一个软链接文件:一个rm  一个unlink

b.如果可以执行程序藏在一个比较深的路径下,比如 ./dir1/dir2/dir3/ 里,我们要在当前所处的路径使用可执行程序,就必须带一串路径,所以我们可以在当前路径下创建软链接。

c.我们也可以给一个目录形成一个软链接,比如  /usr/inlude/  我想查看头文件,就可以给这个目录创建一个软链接。

d.软链接就是为了快速定位文件,以最简单的方式进入!!!

e.作用:快捷方式

   最主要用途:快速找到指令,快速找到对应的库

 硬链接:

 a.在一个目录里创建一个普通文件和一个目录,普通文件的引用计数是1,是因为在当前目录中只有一个文件名与该inode有映射关系,那为什么新建一个目录,他的引用计数是2呢?进入这个目录中,再新建一个目录,引用计数为什么变成3了呢?

因为在目录里面有一个  .  文件和  ..  文件,之前说过,一个点表示当前目录,两个点表示上级目录,那么一个点凭什么表示当前目录他自己,一个点他是一个文件名,他所映射的inode和当前所处的目录的映射的inode是一样的!!文件名不同但指向的文件是一样的,所以一个点就表示当前工作路径,所以再在新建的目录中创建一个新目录,里面有两个点的文件名,他映射的inode与上级目录映射的inode相同,所以此时就有三个文件名指向同一个文件,所以,引用计数是3,所以我们在Linux中,在每一个目录下都要有一个  .  和  ..  呢?就是为了进行路径切换!!!

b.创建一个文件,在一个目录比如 /tmp/ 下,给这个文件创建一个硬链接,这时,如果误操作,把原本文件进行了删除,但是没关系,因为我们在特定的路径下,有一个该文件的硬链接文件,我们照样可以通过该硬链接文件拿到该文件的内容,这意味着什么?这意味着,在Linux下,对文件做备份,只需要建立硬链接文件就可以了,不需要拷贝了!!! 

c.我们现在可以对普通文件做硬链接,那么我们可不可以对目录进行建立硬链接呢?

Linux中,不允许对目录新建硬链接文件,因为主要怕,新建硬链接形成一些环状路径,进而导致系统出现问题,但是目录里面  .  和 ..  不都是当前目录和上级目录的硬链接文件吗?这该怎么理解呢?不怎么理解,因为这是Linux特殊进行处理的!!! 

目录创建硬链接形成环状路径的危害

  • 文件系统遍历异常:文件系统的遍历算法通常是基于树形结构进行的,假设可以对目录创建硬链接形成环状路径,当系统或应用程序尝试遍历目录树时,就可能陷入无限循环,无法正常完成遍历操作,导致程序挂起甚至系统崩溃。
  • 元数据更新混乱:目录的硬链接会使得目录的元数据(如目录的链接数、修改时间等)管理变得极为复杂且容易出现混乱。例如,当通过一个硬链接对目录进行修改时,很难确定应该如何正确更新其他硬链接所指向的同一目录的元数据,可能导致文件系统的元数据不一致,进而影响文件系统的稳定性和可靠性。
  • 权限管理复杂:在 Linux 中,权限是基于文件和目录的 inode 进行管理的。如果存在目录硬链接形成的环状结构,权限的继承和传播会变得非常复杂,可能导致权限漏洞或错误的权限设置,威胁系统安全。

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

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

相关文章

施耐德M241与MR30-FBS-MT 在Machine Expert V2.0的组态过程

一、系统概述 MR30分布式IO是一个高度灵活的可扩展分布式 I/O 系统,MR30-FBC-MT用于通过 Modbus TCP 总线将过程信号连接到上一级控制器。 具有以下特点: 结构紧凑 PUSH IN端子,易于安装,布线简单 灵活性高:开关量模…

大数据技术在服饰行业的应用

大数据技术的快速发展为各行各业带来了深刻的变革,本文将详细探讨大数据技术的发展脉络,大数据技术推动服饰企业的数字化转型,旨在为相关领域的研究和实践提供参考。 什么是大数据大数据技术的发展历程大数据在服饰行业的应用总结 1&#xff…

Vue2+OpenLayers添加/删除点、点击事件功能实现(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、安装Element-UI 四、代码实现 4.1、添加一个点 4.2、删除所有点 4.3、根据经纬度删除点 4.4、给点添加点击事件 4.5、完整代码 五、Gitee源码 一、案例截图 可以新增/删除标记点,点击标记点可以获取到当前标…

Windows 10 ARM工控主板连接I2S音频芯片

在Windows工控主板应用中,音频功能是一项基本的需求,USB声卡在x86/x64 Windows系统上就可直接免驱使用,但这些USB声卡通常不提供ARM上的Windows系统驱动。本文将介绍如何利用安装在ARM上的Windows工控主板——ESM8400的I2S接口、连接WM8960音…

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误(Recoverable Errors) 2.2 不可恢复错误(Unrecoverable Errors) 三、Rust 的错误处理机制 3…

提升租赁效率的租赁小程序全解析

内容概要 在如今快节奏的生活中,租赁小程序俨然成为了提升租赁效率的一把利器。无论是个人还是企业,都会因其便捷的功能而受益。简单来说,租赁小程序能让繁琐的租赁流程变得轻松、高效。在这里,我们将带您畅游租赁小程序的海洋&a…

SSM商城设计与实现

摘 要 本文的主要工作是对基于B/S模式及JSP技术的基于智能推荐的b2c销售网站进行了研究与设计。本文首先介绍了基于智能推荐的b2c销售网站的背景,分析比较了国内外相关基于智能推荐的b2c销售网站的运行模式、系统特点与开发技术。然后分析了目前热点的各种Web应用开…

drawDB docker部属

docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/

CentOS7下Hadoop集群分布式安装详细图文教程

1、集群规划 主机 角色 DSS20 NameNode DataNode ResourceManager NodeManager DSS21 SecondaryNameNode NameNode NodeManager DSS22 DataNode NodeManager 1.1、环境准备 1.1.1 关闭防火墙 #查看防火墙状态 firewall-cmd --state #停止…

计算机网络——网络层-IPV4相关技术

一、网络地址转换NAT • 网络地址转换 NAT 方法于1994年提出。 • 需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IPG。 • 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将…

postgresql|数据库|利用sqlparse和psycopg2库批量按顺序执行SQL语句(psyconpg2新优化版本)

一、 旧版批量执行SQL脚本的python文件缺点,优点,以及更新内容 书接上回,postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)_python sql psycopg2-CSDN博客 这个python脚本写了很久了,最近开始…

Node.js——http 模块(二)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

基于element UI el-dropdown打造表格操作列的“更多⌵”上下文关联菜单

<template><div :class"$options.name"><el-table :data"tableData"><el-table-column type"index" label"序号" width"60" /><!-- 主要列 BEGIN---------------------------------------- --&g…

javascrip基础语法

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门&#xff1a; HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 1. JavaScript 输出 1.1 console.log()&#xff1a;用于将信息输出到浏览器控制台&#xff0c;例如con…

大语言模型预训练、微调、RLHF

转发&#xff0c;如有侵权&#xff0c;请联系删除&#xff1a; 1.【LLM】3&#xff1a;从零开始训练大语言模型&#xff08;预训练、微调、RLHF&#xff09; 2.老婆饼里没有老婆&#xff0c;RLHF里也没有真正的RL 3.【大模型微调】一文掌握7种大模型微调的方法 4.基于 Qwen2.…

django基于Python的校园个人闲置物品换购平台

Django 基于 Python 的校园个人闲置物品换购平台 一、平台概述 Django 基于 Python 的校园个人闲置物品换购平台是专为校园师生打造的一个便捷、环保且充满活力的线上交易场所。它借助 Django 这一强大的 Python Web 开发框架&#xff0c;整合了校园内丰富的闲置物品资源&…

abap安装cl_json类

文章来自 SAP根据源码导入/ui2/cl_json类 - pikeduo - 博客园 新建一个se38程序&#xff0c;把源码放到里&#xff0c;源码如下 *----------------------------------------------------------------------* * CLASS zcl_json DEFINITION *----------------------------…

[OPEN SQL] ORDER BY排序数据

本次操作使用的数据库表为SFLIGHT&#xff0c;其字段内容如下所示 航班(SFLIGHT) 该数据库表中的部分值如下所示 OPEN SQL中的ORDER BY语句用于对数据库表中的数据进行排序 在查询数据的时候使用ORDER BY语句&#xff0c;则查询出来的结果会按照ORDER BY指定的字段进行排序 排序…

STM32F103ZET6战舰版单片机开发板PCB文件 电路原理图

资料下载地址&#xff1a;STM32战舰版单片机开发板PCB文件 电路原理图 1、原理图 2、PCB 3、板子介绍 一、核心芯片与性能 核心芯片&#xff1a;STM32F103ZET6&#xff0c;这是一款基于ARM Cortex-M3内核的高性能单片机。处理器频率&#xff1a;高达72MHz&#xff0c;确保了…

An FPGA-based SoC System——RISC-V On PYNQ项目复现

本文参考&#xff1a; &#x1f449; 1️⃣ 原始工程 &#x1f449; 2️⃣ 原始工程复现教程 &#x1f449; 3️⃣ RISCV工具链安装教程 1.准备工作 &#x1f447;下面以LOCATION代表本地源存储库的安装目录&#xff0c;以home/xilinx代表在PYNQ-Z2开发板上的目录 ❗ 下载Vivad…