硬链接和软链接以及inode的简述【Linux】

news2024/11/17 0:23:14

硬链接和软链接

  • inode是什么?
    • 面试题
  • 硬链接
  • 软链接

inode是什么?

  认识inode之前,先来看一下一个文件在磁盘里面是怎么存储的。
  首先一个物理的圆盘形状且多层的一个磁盘会被逻辑化成为一个数组,找到一个文件在这个数组里面叫做LBA寻址。
  这个数组会被划分为一个一个的block,所以磁盘也会被称为块设备。一个个的block的大小是在格式化的时候就确定好了的,并且不能更改。一般来说,初次使用磁盘的时候就会格式化磁盘。
  一个文件系统会包含多个block。
如下:
在这里插入图片描述
  上面这个图片叫做块组(Block group)。里面有一部分叫做inode Table.里面存放着一个个的inode,一个inode里面包含一个文件的属性,每一个inode都有一个inode编号。另外,Data blocks 里面有一部分叫做数据项,其中包含了 文件名和inode的一一对应的映射关系。并且,每一个文件独有一个自己的目录项
  所以同一个目录下不可以有相同的文件名,不同目录下可以有相同的文件名。

找文件的步骤:
  1. 读取根目录:首先,操作系统会读取磁盘的根目录。根目录是文件系统的顶层目录,它包含了文件系统中所有文件和目录的信息。

  2. 遍历目录结构:操作系统会通过根目录开始遍历文件系统的目录结构。它会逐级进入子目录,读取每个目录中的目录项信息。

  3. 匹配文件名:操作系统会比对目录项中的文件名与待查找文件的文件名是否匹配。如果匹配成功,则找到了目标文件的inode号码。

  4. 获取inode信息:根据inode号码,操作系统会通过inode表或其他数据结构获取与该inode相关联的元数据信息,如文件大小、权限、所有者等。

  5. 定位数据块:一旦获取了inode信息,操作系统就知道了文件实际存储在哪些数据块中。通过inode中的指针或引用,操作系统可以定位到文件的数据块。

  6. 读取文件内容:最后,操作系统会读取文件数据块中存储的实际文件内容,并将其提供给用户进行读取或处理。

面试题

问:系统里还有空间,为何创建文件或写入文件会失败?
答:因为inode和Data blocks的空间是固定的,不能保证两个同时有空间,若inode满了,Data blocks有空间,还是会失败。

硬链接

  我们看到,真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个inode。

  创建硬链接是在文件系统中创建一个指向目标文件的硬链接,硬链接与目标文件共享相同的 inode 和数据块,它们在文件系统中被视为同一实体,即使使用不同的文件名。硬链接就相当于给文件起别名
使用的命令如下:
         ln <目标文件> <链接名>

在这里插入图片描述
  可以看出来多个文件名共用一个inode
在这里插入图片描述
  上图可以看出来,使用任意一个文件名来改变文件内容,所有文件名中的内容都会改变。
在这里插入图片描述
  可以看出来,随着硬链接的增加,这个字段的数字大小也会增加。这个字段代表硬链接数。

  当创建出来一个文件时,这个硬链接数都是为1的。所以我们在删除文件时干了两件事情:

  1. 在目录中将对应的记录删除。
  2. 将硬连接数置为0,对应的磁盘释放。
  3. 需要注意的是,即使一个文件有多个硬链接,只要所有硬链接都被删除,文件的数据才会真正被删除。在最后一个硬链接被删除之前,其他硬链接仍然可以访问和使用文件的内容。

软链接

  • 软链接(Symbolic Link),也被称为符号链接或软连接,是一种特殊类型的文件,它指向另一个文件或目录。
  • 软链接是通过路径名来引用的,类似于一个快捷方式或别名。它允许将一个文件或目录链接到另一个位置,而无需复制或移动实际的数据。
  • 软链接与硬链接不同,软链接是一个独立的文件,它包含了指向目标文件或目录的路径信息。这意味着当访问软链接时,操作系统会解析软链接并跟踪到目标文件或目录,然后访问真正的数据。
    使用这个命令来建立软链接:
          ln -s <目标文件或目录> <链接名>
    在这里插入图片描述
      可以看出来,硬链接数还是1,因为软链接拥有独立的一个inode,每一个文件都是独立的,所以u和t是两个文件,只不过u指向了t,且u的文件大小也不是t的文件大小。
      需要注意的是,软链接有可能形成循环链接,即链接链条上存在循环引用。这种情况下,操作系统可能无法正确解析链接关系,导致访问错误或死循环。因此,在创建软链接时应注意避免循环链接。

    😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄

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

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

相关文章

进程控制-操作系统

1. 进程概述 进程和程序的区别:程序和进程是两个不同的概念&#xff0c;他们的状态&#xff0c;占用的系统资源都是不同的。 程序&#xff1a;就是磁盘上的可执行文件文件, 并且只占用磁盘上的空间&#xff0c;是一个静态的概念。进程&#xff1a;被执行之后的程序叫做进程&a…

Zabbix自定义监控内容实验(带自动报警)

实验前准备 zabbix服务端&#xff1a;192.168.188.17 zabbix客户端&#xff1a;192.168.188.11 部署zabbix服务端&#xff08;192.168.188.17&#xff09; zabbix-server 内存至少2G&#xff0c;推荐4G (1) 关闭防火墙 systemctl stop firewalld setenforce 0 (2)获取zabbix下…

python基础语法(一)变量

目录 使用变量 变量的类型 整数 浮点数 字符串 布尔 其他 使用变量 读取变量的值 a 10 print(a) 修改变量的值 a20 print(a) 在Python中&#xff0c;需要注意的是&#xff0c;修改变量也是使用运算&#xff0c;看起来和定义变量没有明显区别 当然&#xff0c;也可…

git 本地仓库

本地仓库 start.bat 启动

C#上位机与欧姆龙PLC的通信09----开发专用的通讯工具软件(Winform版)

1、介绍 上节文章已经完成了通讯库的开发&#xff0c;可以看到库还是蛮厉害的&#xff0c;在项目中就可以直接拿来应用&#xff0c;这节要做的就是做一个工具软件&#xff0c;形成自己专业的通讯工具&#xff0c;也是对通讯库的直接利用&#xff0c;本节要写的工具软件是一个w…

数据采集:获取有价值信息的关键步骤

在当今数据驱动的时代&#xff0c;数据已成为企业、组织和个人做出明智决策的重要依据。而数据采集作为数据分析和应用的第一步&#xff0c;其重要性不言而喻。本文将探讨数据采集的概念意义、方法工具、面临的挑战和应对策略以及注意事项。 一、数据采集的定义和重要性 &…

【docker】一文讲完docker搭建私有仓库

一、docker搭建私有仓库方法总结 搭建Docker私有仓库主要有以下几种方式&#xff1a; 使用Docker官方提供的Registry镜像&#xff1a;Docker官方提供了一个用于构建私有镜像仓库的Registry镜像&#xff0c;只需将镜像下载并运行容器&#xff0c;然后暴露5000端口即可使用。可以…

【mysql】报错1349 - View‘s SELECT contains a subquery in the FROM clause

操作 创建视图的sql语句中有不支持子查询 mysql创建视图 select * from (select name,age from table_name where 11 and namea ) tb where 11 and type1问题 报错1349 - View’s SELECT contains a subquery in the FROM clause 原因 原因创建视图的sql语句中有不支持子查…

2023 | 美团技术团队热门技术文章汇总

新年好&#xff01;时光飞逝&#xff0c;我们告别了难忘的2023&#xff0c;迎来了充满希望的2024。再次感谢大家的一路相伴~~ 今天&#xff0c;我们整理了2023年公众号阅读量靠前的10篇技术文章&#xff0c;欢迎大家品阅。祝愿大家在新的一年里&#xff0c;幸福平安&#xff0…

LLM 中的长文本问题

近期,随着大模型技术的发展,长文本问题逐渐成为热门且关键的问题,不妨简单梳理一下近期出现的典型的长文本模型: 10 月上旬,Moonshot AI 的 Kimi Chat 问世,这是首个支持 20 万汉字输入的智能助手产品; 10 月下旬,百川智能发布 Baichuan2-192K 长窗口大模型,相当于一次…

arr.prototype 数组的方法

1.forEach 作用:遍历这个数组 代码&#xff1a; let arr [10, 20, 30, 40, 50];arr.forEach((item) > {console.log(item);}); 返回值:没有返回值 2.fiflter 作用:过滤数组 代码&#xff1a; let arr [10, 20, 30, 40, 50];let newArr arr.filter((item) > {retu…

Go语言中的HTTP请求和响应处理

在Web开发中&#xff0c;HTTP请求和响应是核心的交互方式。Go语言&#xff0c;作为一种高效且现代的编程语言&#xff0c;为开发者提供了简洁、强大的工具来处理HTTP请求和响应。本文将简要介绍在Go语言中如何处理HTTP请求和响应。 在Go语言中&#xff0c;HTTP请求和响应的处理…

Dart调用JS对10000条定位数据滤波

使用Dart调用JS&#xff0c;还是为了练习跨语言调用&#xff1b; 一、编写对应的JS代码 平时在开发时不推荐将算法放在JS里&#xff0c;我这里是简单的做一下数据过滤&#xff1b; 首先生成一些随机定位数据&#xff0c;在实际开发中可以使用真实数据&#xff1b; // 随机定…

ROS学习笔记(9)进一步深入了解ROS第三步

0.前提 1. (C)Why did you include the header file of the message file instead of the message file itself?&#xff08;为包含消息的头文件而不是消息本身&#xff1f;&#xff09; 回答&#xff1a;msg文件是描述ROS消息字段的文本文件&#xff0c;用于生成不同语言消息…

【亚马逊云科技】自家的AI助手 - Amazon Q

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

生活中的物理3——神奇陷阱(随机倒下的抽屉柜门)

1实验 材料&#xff1a;大自然&#xff08;风&#xff09;、抽屉门松掉的抽屉 实验 1、找一个大风的日子&#xff0c;打开窗户&#xff08;不要找下雨天&#xff0c;不然你会被你亲爱的嫲嫲KO&#xff09; 2、让风在抽屉面前刮过 3、你发现了什么&#xff1f;&#xff1f;&…

毛戈平公司上市终止:产品依赖代工,研发投入低,毛戈平夫妇套现

时隔一年&#xff0c;毛戈平化妆品股份有限公司&#xff08;下称“毛戈平”或“毛戈平公司”&#xff09;在A股的上市之旅再次宣告终止。 据贝多财经了解&#xff0c;毛戈平公司最早于2016年12月预披露招股书&#xff0c;准备在上海证券交易所上市&#xff0c;原计划募资5.12亿…

防火安全球阀,到2027年市场增长至68亿美元

防火安全球阀是一种在火灾、爆炸等危险环境下仍能正常使用的阀门。它被广泛用于石化、化工、船舶、电力等领域&#xff0c;以保障生产和人员安全。下面我们将从全球市场和中国市场两个方面对其发展趋势进行分析。全球市场分析&#xff1a; 从全球市场的角度来看&#xff0c;防火…

【linux】更改infiniband卡在Debian系统的网络接口名

在Debian或任何其他基于Linux的系统中&#xff0c;网络接口的名称由udev系统管理。通过创建udev规则&#xff0c;可以修改网络接口名称。以下是更改InfiniBand卡接口名称的一般步骤&#xff1a; 1. 找到网络接口的属性&#xff0c;以编写匹配的udev规则 可以使用udevadm命令查…

[每周一更]-(第55期):Go的interface

参考地址 https://juejin.cn/post/6978322067775029261https://gobyexample.com/interfaceshttps://go.dev/tour/methods/9 介绍下Go的interface 在Go语言中&#xff0c;interface是一种特殊的数据类型&#xff0c;用于定义一组方法的规范。它描述了一个对象可以具备的行为&…