【Linux】认识文件(四):文件系统,inode,以及软硬连接

【Linux】认识文件(四):文件系统,inode,以及软硬连接

  • 一.磁盘(仅了解)
    • 1.组成
    • 2.CHS寻址
  • 二.抽象化磁盘(仅了解)
  • 三.文件系统
    • 1.什么是文件系统
    • 2.ext2文件系统的结构
      • i.Date blocks
      • ii.Block Bitmap
      • iii.inode
        • 1.inode Table
        • 2.inode Bitmap
      • iiiii.GDT
      • iiiiii.Super block
  • 四.文件的增删查改
    • 1.创建一个文件需要干什么
    • 2.删一个文件需要干什么
    • 3.查找一个文件需要干什么
    • 4.如何查找文件的inode
  • 五.文件的软硬链接
    • 1.什么是软链接
    • 2.软链接的应用
    • 3.什么是硬链接
    • 4.硬链接数
    • 5.硬链接的应用
    • 6.硬链接和软连接的区别

在文件(一)的博客中曾经提到过:
文件分成打开的文件 和 未打开的文件
前面我们讲了内存中被进程打开文件的管理方式
现在将要带来在未打开的文件管理方式

一.磁盘(仅了解)

这里我们就挑了硬盘作为存储器,来了解磁盘的工作方式。
硬磁盘就是我们常常听说的机械硬盘

虽然固态硬盘相比于机械硬盘,读取速度更快
但是架不住机械硬盘便宜啊
所以在服务器中,机械硬盘依旧是主流

所以这里也是选择磁盘来讲解

1.组成

磁盘结构:
在这里插入图片描述

磁盘的结构大致是这样。

其中:

  • 磁头:是专门用来读写数据
  • 磁盘面:是存储数据的地方

这里来看一下磁盘面的结构:
在这里插入图片描述

  • 磁道则可以理解成划分磁盘面的一个结构,一个磁道上有多个扇面
  • 扇区:可以理解为磁盘中最小的存储单元

2.CHS寻址

如果我们想要向磁盘中读取和写入数据,我们首先要干的是什么?
就是要定位,定位要读取的数据位置或者要写入数据的位置

上面我们知道了,扇区是存储数据的最小单元
所以我们要找到对应的存储数据其实就是找到正确的扇区位置

所以接下来的问题就变成了,在磁盘中定位一个扇区的方式

在这里插入图片描述

首先:
看到一个磁盘中有多个磁面,所以首先要定位到正确的磁面。
这里我们能注意到,一个磁头对应一个磁面
所以要找到正确的磁面只要找到对应的磁头就行

找到正确的磁面后
在这里插入图片描述
接下来就是要确认的就是对应的磁道

然后只要知道对应的扇区在对应磁道的第几个就行了

这就是CHS寻址方式
1.哪个磁头,2.哪个磁道(柱面),3.第几个扇区 确定这三个,就能定位数据

二.抽象化磁盘(仅了解)

说完了实体的磁盘,我们的目标是了解文件在系统中是怎么样
将磁盘进行管理的。
但是我们直接将磁头磁盘磁道搬进去肯定是不行的。

所以我们需要将磁盘进行抽象化,理解成计算机好管理的方式。

我们知道磁盘在物理上是圆形的
但是在逻辑上可以把一个盘面想象成线性结构

我们知道磁盘中有多个磁面
这里我们可以把磁面看做一个线性结构(通俗点就是顺序表)
这样子的话,磁盘中的多个磁面就变成了多个线性结构
这样我们就可以把磁盘看做一个大的线性结构

在这里插入图片描述

现在磁面中还有磁道扇面

我们知道扇面是最小的存储单元
一个磁道上有多个扇面

一个磁面中有多个磁道
所以和磁面一样,可以把磁道看做一个线性结构
这样多个

里面每个单位都是扇面

在这里插入图片描述
基本上大致就能分成这样。

可以说,扇面就是最小的存储单位

如果我们想要在磁盘中进行存储和删除和修改内容时:
都要找到对应的扇面位置进行操作

所以首先就是要找到存储位置对应的扇面

经过上面将磁盘进行抽象化,我们能清楚的发现:
通过第几个盘面,第几个磁道,第几个扇面
我们就能准确得定位一个扇面的位置

在这里插入图片描述

我们上面讲了这么多,只是把一整个磁盘进行了抽象化了

在实际使用磁盘的时候,我们会将磁盘进行分区:

在这里插入图片描述
一块分成不同分区了以后,肯定要进行管理

接下来就轮到文件系统的登场了。

三.文件系统

在这里插入图片描述

1.什么是文件系统

上面我们是把磁盘进行了线性化,发现对应的内容进行存储的扇面进行定位,然后就能进行增删查改

但是我们在日常使用的时候,我们用户只是创建和删除文件而已,计算机甚至没有提到过扇面磁道磁面的概念

这就是文件系统作用了:

文件系统在用户层为用户提供了文件的增删查改的功能,在底层将用户的操作转化成对磁盘的操作

所以上面的磁盘只是了解一下,因为真正和磁盘打交道的是文件系统,不是用户
我们要做的是了解文件系统的操作和它的结构

不同系统的不同版本的文件系统可能都不用一样
所以这里就挑一个经典的文件系统进行讲解:Linux ext2文件系统

2.ext2文件系统的结构

结构大图:

在这里插入图片描述

这里能看到一个磁盘进行分区以后,一个大区中:
BootBlock和多个Block group
Boot Block主要功能是:在计算机启动时负责引导操作系统的加载和启动过程

一个大区中有多个Block group,我们主要讲的就是它的构成。

在这里插入图片描述
接下来讲分别讲解各个部分对应的作用

i.Date blocks

这算是Block group中最大的一个部分了
主要存储的是文件的内容
因为在linux中,文件的内容和文件的属性是分开来存储的
在这里插入图片描述

这里面的一个个块就是文件系统块
一般大小是4kb,一般都是磁盘格式化时定义好的

从底层看,一个快就是由一个个扇区组合而成的,可以说一个块就是一部分扇区的集合

一个文件可能由多个文件系统块组成

这里我们假设一个文件系统块是4kb,但如果一个文件实际内容大小就只有1kb

那这个文件依旧还是占据一个文件系统块

ii.Block Bitmap

听这个名字就知道,它是block的位图
最主要的作用是判断datablock中的用于存储的比特位分配情况

如果想要在Date block中写入数据,首先要通过Block的位图
找出没有被使用的区块号,然后返回给文件系统,对空闲的区块号进行数据写入

iii.inode

这里我们来了解什么是inode
还记得前面说过的:Linux中文件内容和文件属性是分开来存放的

inode就是一个结构体,描述的就是文件的属性
在这里插入图片描述
这里是随便列举的几个属性

但是其中有一个比较重要的:int blocks[nums]

这个是为了找到Blocks中存储的文件内容的对应的区块号
这里就通过图片让大家认识更清晰一点

这里用的是直接索引,对应的区块号存储的就是文件的实际内容
在这里插入图片描述

接下来就是间接索引
在这里插入图片描述

就比如这里的7,8,9区块号存储的是存储这个文件的内容的其他区块号

这种就叫做二级索引
要注意:可能不止有二级索引,还有可能有三级,四级索引

这种方法可以增加记录文件区块号的大小,只依赖block[nums]太少了

不光如此
每个文件都有一个单独的inode编号,系统中不是通过文件名来区分文件的, 而是通过inode编号区分的
文件名不属于inode中的属性
inode 编号是按照在该对应组的存储的顺序进行分配的
每个组都有自己对应的inode表和inode存储区域

1.inode Table

inode Table听名字就能大概知道:存储inode的地方

这里要注意,inode是有编号的。

磁盘分区后,不同区的inode是完全分隔的,没有关系。

就比如:
A区的inode编号100对应的可能是文件A
B区的inode编号100对应的可能是文件B

但是相同区的不同组inode虽然是分隔的,但是还是有关系的
比如A组的inode范围是0-100
那么B组的inode就要从101开始

这里要注意特殊情况
有可能会出现inode table存储完了,但是Dateblock 还没有用光
同样也会有可能inode table还有,但是Data Block用光了

2.inode Bitmap

这个和Block Bitmap一致,存储的就是inode table中的分配情况

iiiii.GDT

GDT记录了Block group内其他所有区域(inode bitmap,Block Bitmap等)的信息

包含了块组的相关信息,包括块位图的位置。通过读取块组描述符中的块位图位置,可以获得块组的分配情况。

iiiiii.Super block

SuperBlock是:
每个Block group的大小,每个Block group的inode数量,每个Block group的block数量,每个Block group的起始inode
这个SuperBlock不用每个组都有,因为它描述的是所有组的分类情况
但是也不能只有一个,因为一个如果挂掉了,整个磁盘的分类情况都要毁了

四.文件的增删查改

这里我们通过文件系统,来看看想要对文件进行增删查改,文件系统都进行了哪些操作?

1.创建一个文件需要干什么

1.创建文件一定是在一个路径下进行创建的,路径就能确定文件在哪个分区和哪个分组里面

2.找到对应分区和分组后,就是分配inode:

对应组的GDT会查看它记录的inode TableDataBlock占用的情况
如果空间足够,则会通过inodebitmap将最近一个没有被占用的inode编号,作为你的inode

如果还需要写入文件内容的话
3.写入数据
首先告诉写入了多少大小的数据,到GDT中查看是块使用情况,判断空间是否大小充足
在block bitmap中找到没有被使用的块号
将它传给对应的inode并写入Block[nums]中,之后到对应的data block中进行数据写入。

2.删一个文件需要干什么

1.找到文件对应的inode,在对应的inode中找到存储的对应的区块号
2.在block bitmap将对应的区块置0,表示该区块允许被覆盖
这里要注意不会去动data block中的内容
所以计算机中的删除相当于允许被覆盖

这就是为什么计算机中的拷贝复制很慢
因为需要动Data Block的内容
但是删除却很快,因为只是动了Bitmap将对应的区块置0,没有动 DataBlock

3.查找一个文件需要干什么

1,找到文件的inode,然后通过inode bitmap判断inode是否有效,
2.通过inode中的block,通过block bitmap判断内容是否有效
3.data block中进行读取内容

4.如何查找文件的inode

这里我们能发现:
这里面的每一步都是要找到文件的先找到文件对应的inode

在讲如何找到inode之前, 首先来聊一下目录:

如何理解目录?

目录也是文件,通过文件=内容+属性
所以目录也有内容,放的是该目录下所有的文件名字,和文件名对应的inode映射关系

所以想找到文件对应的inode:
就要找到自己所在的目录的文件内容中的自己的文件名和inode的映射关系

所以通过上面,我们可以想到以前没想到的几个问题:

1.为什么同一个目录下不能有同名文件
因为要通过文件名找到自己的inode

2.目录下没有w,我们无法创建文件
就算创建了文件夹,也无法将(没有权限)文件名和inode的映射关系写进目录中的内容中
3.目录下没有r,无法查看文件
因为想要读文件内容,也需要读目录中的文件名和inode映射关系,没有权限读不了

所以想找到文件对应的inode:就要找到自己所在的目录的文件内容中的自己的文件名和inode的映射关系
那也就是说要找到文件的名字,首先要找到目录的内容

需要找到目录的内容,就要找到目录的inode
要找到目录的inode,就要找到目录的目录的文件内容
这样不就无限查找上去了吗,确实是这样
但是查找到根目录就行了。

所以要访问文件,都需要一路向上递归,找到根目录,然后再一路返回,找到对应目录的inode,最后找到本文件的inode

这样确实效率很低,所以系统一般会将你经常访问的目录通过dentry缓存进行记录

通过这里我们就知道了
要查找文件就需要目录中有文件名和inode的映射关系

五.文件的软硬链接

1.什么是软链接

软链接:

ln 	      -s      file.txt    soft-link
         (soft)	   目标文件	  创建的软链接名

在这里插入图片描述

在这里插入图片描述
从这里的inode我们能看到
软链接是一个独立的文件,有独立的inode

所以:
软链接是一个独立的文件,有独立的inode有独立的数据块,里面存储的是指向的文件的路径
将软连接指向的文件进行删除后软链接就会失效
在这里插入图片描述

软链接就类似于win中的快捷方式

2.软链接的应用

软链接的应用就可以看做是windows中的快捷方式
快捷方式有啥作用应该也不用多讲了吧
应该大伙基本上都用过

3.什么是硬链接

硬链接:

ln 			test.txt    hard-link
             目标文件	创建的软链接名

在这里插入图片描述

从这里能看到:
硬链接不是一个独立的文件,没有独立的inode

所谓建立硬链接的本质其实是:
在特定目录的数据块中新增另一个硬链接文件名和指向被链接文件的inode编号的映射关系
类似于C++中的取别名

4.硬链接数

不知道大伙有没有发现:
在这里插入图片描述
在这里插入图片描述
创建一个 文件的硬链接后,这个数字发生了增加

相反的是软连接就不会有这个功能。

在这里插入图片描述

这个数字就叫做硬链接数

从名字上看:就是一个文件被硬链接的数量

但是我们回顾硬链接的本质:在特定目录的数据块中新增另一个硬链接文件名和指向被链接文件的inode编号的映射关系

所以说硬链接数就是有多少个文件名和这个inode建立了映射关系。

任意一个文件都有inode,每一个inode内部,都有一个叫做引用计数的计数器(表明有多少个文件指向我)
如果当计数器变成0的时候文件才会被删除,因为没有一个文件名能访问到这个inode了

这就是为什么硬链接的源文件被删除后,硬链接没有失效,因为引用计数没有变成0,还有文件名能访问到这个inode

5.硬链接的应用

硬链接有什么用
这里可以在回头看看目录
**加粗样式**
这里我们能发现
空的目录文件比常规文件的硬链接数多一个
空的目录文件多了两个文件:“.“”和 “…“

这里应该不难猜出: “.”其实是目录文件的硬链接

那也可以推出:"…"其实是父目录的硬链接

所以虽然硬链接的使用场景很少,但是是不可缺少的

6.硬链接和软连接的区别

这里来提两个问题:
1.软链接能连接目录吗?
2.硬链接能连接目录吗?

这个问题其实我们根据两个链接的原理其实就能猜出来
软链接存储的是链接目标的路径,是一个独立的文件

所以这里肯定是可以的

在这里插入图片描述
至于硬链接

硬链接的原理是:将硬链接创建的文件名和目标文件的inode产生依赖关系
相当于C语言中的取别名
这里我们来想想硬链接如果链接目录的问题:
如果一个A目录中塞进了一个硬链接B
同时这个硬链接B指向了A目录
但是硬链接只是类似于取别名,文件名不同,但是对应的inode是相同的
那么根据牛顿相对论,B硬链接A的同时,B也是被A硬链接的
这种情况就叫做循环链接

第二个问题:
1.软连接能跨系统吗
2.硬链接能跨系统吗

这其实也是想想原理就能理解的问题:
软链接只是记录了文件的路径,所以和文件啥系统没啥关系
但是硬链接就不一样了,它记录了文件名和inode的映射关系
先不说不同系统的文件系统不一致
inode在同一个盘中,不同分区的inode都不能通用,更别说跨系统了,跨区都难(在ext2中)

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

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

相关文章

使用 Python 进行图像验证码识别训练及调用

目录 1、验证码识别原理1.1 Tensorflow 介绍1.2 Tensorflow 运行原理1.3 卷积神经网络 CNN(Convolutional Neural Networks) 2、验证码识别实现步骤2.1 安装第三方模块2.1.1 安装 TensorFlow 模块2.2.2 安装 cuda2.2.3 下载 cudnn 2.2 读取验证码样本形成…

[源码安装]

1 pangolin安装 在Linux上常用的一个3D绘图库是Pangolin,它是基于OpenGL完成的,它不但支持OpenGL的基本操作,还提供了一些GUI的功能。 1.1 版本: pangolin —— v0.6 libpng —— 16 eigen —— 3.4 使用libpng12遇到下面的问…

网络编程套接字(一) 【简单的Udp网络程序】

网络编程套接字<一> 理解源端口号和目的端口号PORT VS PID认识TCP协议和UDP协议网络字节序socket编程接口sockaddr结构简单的UDP网络程序服务端创建套接字服务端绑定运行服务器客户端创建套接字关于客户端的绑定问题启动客户端启动客户端本地测试INADDR_ANY 理解源端口号…

【技术分享】 OPC UA安全策略证书简述

那什么是OPC UA证书&#xff1f;用途是什么&#xff1f; 简单来说它是身份验证和权限识别。 OPC UA使用X.509证书标准&#xff0c;该标准定义了标准的公钥格式。建立UA会话的时候&#xff0c;客户端和服务器应用程序会协商一个安全通信通道。数字证书&#xff08;X.509&#x…

图片压缩工具,这三款软件简单好用!

在数字化时代&#xff0c;图片已成为我们生活和工作中不可或缺的一部分。无论是社交媒体上的分享&#xff0c;还是工作中的文件传输&#xff0c;图片都扮演着重要的角色。然而&#xff0c;随着图片质量的提高&#xff0c;其占用的存储空间也越来越大&#xff0c;这给我们的存储…

英语词汇-Obsoleted

英语词汇&#xff0d;Obsoleted Obsoleted 废弃的&#xff0c;不用的&#xff0c;过时的。 Automation has obsoleted many unskilled workers. 自动化技术&#xff0c;已淘汰了很多低技能工人。 微信公众号&#xff1a; 常青柏 淘宝店铺名&#xff1a; 漫乐之家、梅兰竹菊…

企业管理咨询公司不会选?一文带你避开“坑人”陷阱

近年来&#xff0c;企业管理咨询公司如雨后春笋般涌现&#xff0c;数量之多令人眼花缭乱。所以&#xff0c;面对这么多的企业管理咨询公司&#xff0c;企业该选谁&#xff1f;又该如何选择&#xff1f;本文将从以下几个方面为大家解析。 首先&#xff0c;我们要明确自己的需求和…

代码随想录 打卡day23,24,25

1 二叉搜索树的最小绝对差 注意审题&#xff0c;题目当值说到是一个二叉搜索树&#xff0c;因此我们只需进行中序遍历即可&#xff0c;然后得到一个有序数组之后进行编辑&#xff0c;统计出来最小差。 class solution{ private:vector<int> vec;void traversal(TreeNode…

namenode启动失败 org.apache.hadoop.hdfs.server.common.InconsistentFSStateException:

小白的Hadoop学习笔记 2024/5/14 18:26 文章目录 问题解决报错浅浅分析一下core-ste.xml 问题 namenode启动失败 读日志 安装目录下 vim /usr/local/hadoop/logs/hadoop-tangseng-namenode-hadoop102.log2024-05-14 00:22:46,262 ERROR org.apache.hadoop.hdfs.server.namen…

位图(c++)

文章目录 1.位图概念2.位图的实现3.应用&#xff08;解决整形存在或次数问题&#xff09;3.1存在问题3.2次数问题 5.搜索的方法对比&#xff1a; 1.位图概念 和哈希一样&#xff0c;都是一个表来记录某个元素的个数或者存在与否&#xff1b;不同的是哈希使用的计算机定义的完整…

Qt5 互动地图,实现无人机地面站效果

一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库&#xff0c;可选择谷歌地图&#xff0c;必应地图&#xff0c; 雅虎地图&#xff0c;GIS等。可直接使用源码&#xff0c;也可以编译生成库进行调用。实现效果…

技艺高超的魔法师:Java运算符

在Java编程的世界里&#xff0c;运算符是连接变量和表达式的关键纽带&#xff0c;它们使得程序能够执行计算、比较、赋值等一系列操作。 一&#xff0c;基本概念 1&#xff0c;运算符是什么&#xff1f; 运算符是操作变量的符号。 2&#xff0c;分类 Java中的主要运算符类…

openlayer实现ImageStatic扩展支持平铺Wrapx

地图平铺&#xff08;Tiling&#xff09;是地图服务中常见的技术&#xff0c;用于将大尺寸的地图数据分割成许多小块&#xff08;瓦片&#xff09;&#xff0c;便于高效加载和展示。这种技术特别适用于网络环境&#xff0c;因为它允许浏览器只加载当前视图窗口内所需的地图瓦片…

摸鱼大数据——Linux搭建大数据环境(集群免密码登录和安装Hadoop)二

集群设置免密登录 克隆node1虚拟机的前置条件&#xff1a;node1虚拟机存在且处于关闭状态 1.克隆出node2虚拟机 1.node1虚拟机: 右键 -> "管理" -> "克隆" 2.图形化弹窗中: "下一页"->"下一页"->选择"创建完整克隆&…

蓝鹏测控:扩大出口,勇拓海外市场

蓝鹏测控自2012年成立以来&#xff0c;始终专注于工业测量仪器的研发、生产与销售。公司坚持经验与创新并存&#xff0c;长期与华北电力大学、河北大学等多所知名院校深度合作&#xff0c;拥有一支技术力量雄厚的研发团队。经过多年的努力&#xff0c;蓝鹏测控已研发出多款具有…

使用C++实时读取串口数据(window使用已编译LibModbus库并用QT实现一个实时读取串口数据)

先看这篇文章&#xff0c;写得很详细: QT应用篇 四、window编译LibModbus库并用QT编写一个Modbus主机 手把手教学 编译好的LibModbus库可以在上面文章里下载&#xff0c;也可以在我的链接里下载&#xff1a; 为了在Qt Creator中创建新项目并嵌入上述C代码&#xff0c;请执行以…

算法-卡尔曼滤波之卡尔曼滤波的第二个方程:预测方程(状态外推方程)

在上一节中&#xff0c;使用了静态模型&#xff0c;我们推导出了卡尔曼滤波的状态更新方程&#xff0c;但是在实际情况下&#xff0c;系统都是动态&#xff0c;预测阶段&#xff0c;前后时刻的状态是改变的&#xff0c;此时我们引入预测方程&#xff0c;也叫状态外推方程&#…

冯喜运:5.14今日黄金原油涨跌走势分析操作建议

【黄金消息面分析】&#xff1a;本周黄金市场将迎来关键的美国通胀数据&#xff0c;包括周二的生产者价格指数(PPI)和周三的消费者物价指数(CPI)。这些数据对美联储的政策路径至关重要&#xff0c;可能会影响市场对利率调整的预期。目前&#xff0c;现货黄金价格小幅上涨&#…

Redis知识总结

文章目录 1. NoSQL2. Redis介绍3. Redis的下载与安装3.1 Windows版3.2 Linux版 4. Redis的数据类型5. Redis常用命令5.1 操作字符串的命令5.2 操作哈希结构的命令5.3 操作列表的命令5.4 操作set集合的命令5.5 操作zset集合的命令5.6 Redis通用命令5.7 其他命令 6. 在Java中操作…

【Python |基础入门】入门必备知识(基础各方面全覆盖)

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; &#x1f388;丠丠64-CSDN博客&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起…