本文介绍: 文件=文件内容+文件属性Linux中文内容与属性是分开存储的。文件内容:在数据块中存着文件属性:在inode中存着Block Groupext2文件系统会根据分区大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子超级块(Super Block):存放文件系统本身的结构信息


前言

一、 简单理解文件系统

我们接下来磁盘举例:
文件=文件内容+文件属性
Linux中文件内容与属性是分开存储的。
文件内容:在数据块中存着
文件属性:在inode中存着

在这里插入图片描述

在这里插入图片描述

Block Groupext2文件系统会根据分区大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子

超级块(Super Block):存放文件系统本身的结构信息记录信息主要有:bolckinode的总量,未使用blockinode的数量,一个blockinode大小,最近一次挂载时间,最近一次写入数据时间,最近一次检验磁盘时间等其他文件系统的相关信息。 Super Block信息被破坏,可以说整个文件系统结构就被破坏了

GDT,Group Descriptor Table:块组描述符,描述块组属性信息

块位图(Block Bitmap):Block Bitmap记录着Data Block中哪个数据块已经被占用,哪个数据块没有占用

inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。

i节点表:存放文件属性 如文件大小,所有者,最近修改时间

数据区:存放文件内容

Linux系统中,一个文件,一个inode,每一个inode都有自己的inode编号唯一的(inode设置是以分区为单位的,也就是1号分区inode编号从1到500,2号分区也是1到500,分区之间编号互不影响),inode一个结构体,里面存着文件的所有属性,文件名并不属于inode属性

格式化
一个分区在被使用之前,都必须提前先将部分文件系统的属性信息提前设置进对应的分区当中(也就是划分好Block Group ,GDT,inode位图等),方便我们后续使用这个分区或者分组

二、文件操作具体步骤

在这里插入图片描述

1.新建文件

首先会分配到一个空余的分组中,在分组中通过GDT来判断是否有剩余的位置放入,在inodeBitmap查找最近的没有使用下标,将其从0置为1,之后用这个inode编号去inodeTable中这到这个位置,将自己信息大小修改时间之类的)写入到struct inode结构体中,文件就完成了创建

如果要写入数据,首先判断要写入数据大小需要个数据块大小,之后根据BlockBitmap在位图中找到未使用的数据块,之后将其置为1,把块号填到inode中block数组对应位置,之后到DataBlock中写入数据

删除=允许被覆盖可以提高系统效率

2.删除文件

我们根据我们当前文件所处的目录确定我们属于哪个分区的,根据文件inode大小确定我们是哪个分组的,通过inode编号找到我们对应inode的属性,根据属性中blocks数组的内容,去BlockBitmap中将对应位置的置为0,之后再将inode编号的位置在inodeBitmap中置为0

3.查找文件

我们根据我们当前文件所处的目录确定我们属于哪个分区的,根据文件inode大小确定我们是哪个分组的,通过inode编号在inodeTable中找到我们对应inode的属性,根据inode结构体里面block数组去对应的位置DataBlock找数据,将对应块载入内存,虽然我们载入了整个块大小的数据,但我会根据我当前文件大小来在块中读取对应字节的数据

三、目录的重新理解

文件那些操作的前提都是基于我们有文件的inode编号,但我怎么获得我们inode编号呢?我们平时都是直接用文件名进行操作的。

在这里插入图片描述

首先目录也是文件,Linux系统下一切且文件,所以我目录也有自己的属性+内容,也需要数据块来存储数据。
问:目录里存放的是什么?
答:存放的是文件名文件名其inode编号的映射关系。

问:既然这样那我又是怎么获得目录的inode编号呢?我们得先知道目录的inode编号读取其数据内容才能获得文件名与inode编号啊!!!
答:我们会一路向上递归根目录根目录的位置是确定的,inode编号也是确定的,我们根据根目录中存的数据,找到目录和inode的对应关系

1.目录下没有w权限,无法对其下的文件进行创建删除

因为即便我们把文件创建出来,文件名与inode的映射关系,我们没有w权限,我们就无法将这个关系存入目录的数据当中。

2.目录下没有r权限,无法对其下的文件进行查看

我们要先获得文件的inode编号,才能去对应数据块中找文件的数据,但现在目录都不让我读啊!我都没办法获取到文件的inode编号,拿什么去读文件?

3.目录下没有x权限,无法进入这个目录

进入目录,就是cd进去, 将系统环境变量更新,给当前路径更新,并给目录信息更新,但没有x权限我们就无法执行这一操作

四、软链接

链接是一个独立的文件,有一个独立的inode,也有独立的数据块,他的数据块中保存的是指向文件的路径(相当于windows中的快捷方式

命令ln -s 要链接的文件名 创建的软链接文件名
在这里插入图片描述
因为软链接中存着链接文件的路径,所以我们可以选择将我们的软链接文件放入可执行文件的目录/usr/bin

这样我们就可以以直接执行我们自己写的可执行程序
在这里插入图片描述
在这里插入图片描述

五、硬链接

硬链接不是一个独立的文件,因为其没有独立的inode编号,所谓建立硬链接,本质其实是在特定目录的数据块中新增文件名和指向文件名inode编号的映射关系(相当于取别名

命令ln 要链接的文件名 创建的硬链接文件名

每个inode内部都有一个引用计数器记录有多少个文件指向我)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.Linux不允许目录建立硬链接,会造成闭环问题

在这里插入图片描述

我们假设可以创建目录硬链接
在这里插入图片描述

原文地址:https://blog.csdn.net/m0_74774759/article/details/134408304

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_12901.html

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注