我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Linux】文件系统

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Linux】文件系统

​🌠 作者:@阿亮joy.
🎆专栏:《学会Linux》
🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根
在这里插入图片描述

目录

👉前言👈

之前我们所谈论的文件都是被打开的文件,但是磁盘上还有非常多没有被打开的文件,操作系统是如何管理这些文件的呢?这一部分就是文件系统的内容了,为了更好了解文件系统,我们先来认识一下磁盘。

👉磁盘👈

磁盘的物理结构

磁盘是计算机中唯一的一个机械结构,又因为磁盘是外设,所以磁盘访问会很慢!(CPU 是纳秒级别,内存是微秒级别,磁盘是毫秒级别的)我们目前是很少见到磁盘了,但是在企业里,磁盘存储依旧是主流。

在这里插入图片描述

注:一片盘片有两面,两面都能够读写数据,每一面都有一个磁头,磁头是悬浮在盘片上。磁盘的盘面是充满磁的,其上面存在着许多非常细小的 N、S级,磁盘是通过 N、S级来表示 0 和 1。通过充磁和消磁技术,来调转 N、S 级,从而达到 0 和 1 的写入,那么就可以表示数据了。

磁盘的存储结构

在这里插入图片描述

磁盘的逻辑结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

👉文件系统👈

在这里插入图片描述
Linux ext2 文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同)。磁盘是典型的块设备,硬盘分区被划分为一个个的 block,一个block的大小是由格式化的时候确定的,并且不可以更改。例如:mke2fs 的 -b 选项可以设定 block 大小为1024、2048或4096字节,而上图中启动块(Boot Block)的大小是确定的。

  • Block Group:ext2 文件系统会根据分区的大小划分为数个 Block Group,而每个 Block Group 都有着相同的结构组成。
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode 的总量、 未使用的 block 和 inode 的数量、一个 block 和 inode 的大小、最近一次挂载的时间、最近一次写入数据的时间和最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block 的信息被破坏,可以说整个文件系统结构就被破坏了。
  • Group Descriptor Table(GDT):块组描述符,描述块组属性信息。
  • 块位图(Block Bitmap):Block Bitmap 中记录着 Data Block 中哪个数据块已经被占用,哪个数据块没 有被占用。
  • inode 位图(inode Bitmap):每个比特位表示一个 inode 是否空闲可用。
  • i 节点表:存放文件属性 如文件大小、所有者和最近修改时间等。
  • 数据区:存放文件内容。

inode 和 data block

我们知道:文件等于文件内容加文件属性,而文件内容和文件属性是分开存储的。文件属性是保存在 inode 中的, inode 是固定大小的(通常是128字节,视具体文件系统而定)。一般情况下,有一个文件就会有一个 inode。文件几乎所有属性都储存在 inode 中,文件名并不在 inode 中存储!文件内容存储在 data block 中,其大小随着应用类型的变化而变化。

inode 为了进行区分彼此,每个 inode 都会有自己的 ID 编号。

在这里插入图片描述

inode Table 中保存了分组内部所有可用的 inode,可用的 inode 是包括已经使用的和未被使用的。 Data blocks 中保存的是分组内部所有文件的数据块,以4KB为基本单位。创建文件时,先在 inode Table 中找到没有被使用的 inode 将文件的属性写进去;内容也是找到没有被使用的数据块,然后再将数据写入数据块中。查找 inode 位图和数据块位图就可以知道哪些 inode 和数据块没有被使用。位图结构用比特位来代表有没有被使用,1 代表被使用,0 代表没有被使用。inode 位图比特位的位置和当前文件对应的 inode 的位置是一一对应的,数据块位图中的比特位和文件对应的数据块位置也是一一对应的。

块组描述表(Group Descriptor Table)保存的是对应分组的宏观的属性信息,如:该块组有多少 inode 和数据块,inode 被用了多少等等。

同一个分区的 inode 编号是不会重复的,是统一编号的。查找一个文件的时候,统一使用的是 inode 编号。有了文件的 inode 编号,先确定其在哪一个分组,再去 inode Bitmap 中查找对应的比特位是不是 1。是 1 则有效,再去 inode Table 中查找指定的 inode 编号,就可以找到文件的属性信息了。inode 本质是一个结构体,其中包含了一个数据块数组。该数据块数组中存储的就是文件的数据块编号。

如果想要查看一个文件,就可以通过 inode 编号找到该文件的数据块数组 blocks[15],进而找到该文件的数据块,组合成整个文件。从 blocks[12] 开始,其指向的是一个数据块。该数据块中保存的是其他的数据块编号,这些块也可以存储别的数据块编号,进而 blocks[15] 表示的就不止 15 个数据块了,可以是很多个。也就是说一个文件的数据块可以很多,文件的大小可以很大。

在这里插入图片描述

删除文件只需要找到 inode 在 inode Bitmap 中的比特位和 Block Bitmap 的比特位,将这两个比特位改成 0,文件就算删除了。恢复文件则与该过程相反,知道删除文件的 inode,再将 inode Bitmap 和 block Bitmap 中对应的比特位改成 1 即可恢复文件。删除文件的 inode 可以通过日志来查到。误删文件后,千万不要新建文件。以防误删文件的 inode 编号和数据块被占用,无法恢复误删文件!

而我们查看文件使用的是文件名,并没有使用 inode 来查看文件。其实文件名和 inode 存在一一映射的关系,目录的数据块放的就是当前目录文件名和 inode 的映射关系。所以同一个目录下,不可以存在同名的文件。因为文件名就是一个 key 值,通过该 key 值找到对应的 inode 编号,进而找到该文件!!!所以在一个目录里创建文件,必须要有该目录的写入权限。因为要将文件名和 inode 的映射关系写入到目录的数据块中。

软硬链接

我们知道,真正找到磁盘上文件的并不是文件名,而是inode。 其实在 Linux 中可以让多个文件名对应于同一个 inode。硬链接是通过 inode 引用另外一个文件,软链接是通过名字引用另外一个文件。

ln -s 现有文件 目标文件 #将目标文件与现有文件进行软链接ln 现有文件 目标文件 #将目标文件与现有文件进行硬链接unlink 文件名 #删除软链接文件

在这里插入图片描述

  • 指令ll -i从左到右依次罗列的信息是:inode 编号、文件类型和文件权限、引用计数、文件拥有者、所属组、文件大小(单位是字节)、最后修改时间、文件名。
  • 软链接和硬链接的区别是是否有独立的 inode!软链接生成的文件具有独立的 inode,可以被当做独立文件来看待。而硬链接形成的文件并没有独立的 inode,其 inode 是原来文件的 inode。也就是说,建立硬链接并没有创建新文件。因为没有给硬链接生成的文件分配独立的 inode。既然没人创建新文件,那么其一定没有自己的属性集合和内容集合,用的一定是别的文件的 inode 和内容。硬链接的本质是让 inode 中的引用计数count++,因此引用计数也被称作硬链接数。

在这里插入图片描述

  • 当一个文件的引用计数(硬链接数)变成 0 时,该文件才算真正被删除。注:同一个 inode 的文件就算是同一个文件。

在这里插入图片描述

硬链接就是相当于给原有文件取别名,硬链接生成的文件和原有文件对应的 inode 是相同的。原有文件删除,并不会影响硬链接生成的文件,只是 inode 中的引用计数减去了 1。但软链接却不同,软链接并不是使用 inode 编号来表示的,而是通过文件名来标识的。软链接生成的文件有独立的 inode,也就有自己的数据块,其数据块中保存了原有文件的路径。如果删除了原有文件,那么软链接就失效了。但是如果在新建相同名字的文件,软链接会再次生效。但文件的内容肯定是不一样的,这相当于偷梁换柱。

在这里插入图片描述

软链接的优势:软链接就相当于 Windows 系统下的快捷方式,它能够帮助我们快速地找到指定路径的文件。

在这里插入图片描述

理解创建普通文件和目录文件的默认硬链接数

在这里插入图片描述
为什么创建一个普通文件的默认硬链接数是 1 呢?因为一个普通文件,自身就和该普通文件的 inode 建立一个映射关系,所以创建一个普通文件的默认硬链接数就是 1 了。

那为什么创建一个目录文件的默认链接数是 2 呢?其实是当前路径 lesson21 的目录文件 empty 的 inode 编号为790346,目录文件 empty 中的当前目录.的 inode 编号也是790346。所以,创建一个目录文件的默认链接数就是 2 了。如果在 empty 中再创建一个目录 Test,那么790346的引用计数(硬链接数)又会增加一。因为 Test 中的上级目录.. 的 inode 编号也是790346

在这里插入图片描述

Linux 是不允许普通用户给目录建立硬链接的。原因是引入了对目录的硬连接就有可能在目录中引入循环,在目录遍历的时候系统就会陷入无限循环当中,这样导致无法定位到访问目录。Linux 的目录结构是一棵以 “/” 为根节点的树,如果允许自定义硬连接,则很有可能会破坏这个结构,甚至形成循环;而一旦形成循环,对于需要遍历目录树的命令,是致命的。所以为了避免对目录树结构的破坏,Linux 不允许用户自定义硬连接在目录上。

在这里插入图片描述

但是可以为目录建立软链接,因为软链接生成的文件会有独立的 inode 且该文件的类型为l注:... 是操作系统给目录建立的硬链接。

ACM 时间

  • A(Access):最后一次访问文件的时间。这个时间并不是访问一次就会更新,而是达到一定的访问次数或者最近两次访问时间的间隔比较长才会更新该时间。因为访问文件的概率比修改文件的概率要大得多,所以如果该时间被频繁更改会降低 Linux 系统的效率。
  • C(Change):最后一次修改文件属性的时间。一般文件内容被修改,文件属性的修改时间也会更新,因为文件的大小也会方式变化。
  • M(Modify):最后一次修改文件内容的时间。
  • touch指令可以将以上三个时间全部更新为当前时间。
  • 细节:所有文件的属性和位图结构需要先被加载到内存中,才能进行更改数据的更改。更改完后,才能将数据写回到磁盘中。

👉总结👈

本篇博客主要讲解了磁盘的物理结构、存储结构和逻辑结构、文件系统中的 inode、data block、位图结构、软硬链接已经文件的 ACM 时间等。那么以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!谢谢大家!💖💝❣️

来源地址:https://blog.csdn.net/m0_63639164/article/details/128587371

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Linux】文件系统

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux系统篇-文件系统&虚拟文件系统

在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。

Linux 文件系统十问

关于文件系统,相信大家都不陌生。身为攻城狮的我们几乎天天都会与之打交道,但是细深剖一下,其中又有多少是我们理解深度不够的呢。

Linux文件系统介绍

一、简介 文件系统就是分区或磁盘上的所有文件的逻辑集合。 文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。 不同Linux发行版本之间的文件系统差别很少,
2022-06-05

Linux文件系统解析

在学习 Linux 的时候,我们通常会看到这样一句话,Linux中一切皆文件,也就是说,不管是普通的文件和目录,还是包括块设备、管道、socket等,也都是交给文件系统去管理的。

图解 Linux 文件系统

众所周知,内存在断电后数据就会丢失,所以现代计算机都通过 硬盘 来进行数据存储。也就是说,硬盘中的数据在断电后依然能够保存下来。

Linux的文件系统(3)

本章学习目标:掌握Linux下文件目录的属性掌握Linux下的权限管理掌握如何切换用户身份及权限委派   3.1文件系统简介文件系统(File system)泛指储存在计算机上的文件和目录。文件系统可以有不同的格式,叫做文件系统类型(fil
2023-01-31

linux 的文件系统 (3)

上篇博文已经讲解了 如何对磁盘进行分区。接下来我们就在分区上创建文件系统。linux 下用 mkfs 来创建文件系统         用法 :            mkfs  -t  文件系统类型  设备名称   创建 ext3 文件系统
2023-01-31

Linux系统文件系统及文件基础是怎么样的

这篇文章将为大家详细讲解有关Linux系统文件系统及文件基础是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。学习Linux,重难点在于掌握不同类别的文件系统及其作用。通过对Linux
2023-06-05

深入理解Linux文件系统之文件系统挂载(上)

Linux系统中我们经常将一个块设备上的文件系统挂载到某个目录下才能访问这个文件系统下的文件,但是你有没有思考过:为什么块设备挂载之后才能访问文件?挂载文件系统Linux内核到底为我们做了哪些事情?

【Linux】基础IO——文件系统

文章目录 1.了解磁盘的物理结构磁盘的具体物理存储结构在一面上,如何在硬件上定位一个扇区? 2.逻辑抽象磁盘只认CHS,LBA如何跟磁盘地址互相转化? 3.文件系统一个组的结构细节问题 4.软硬链接1. 制作软硬链
2023-08-19

Linux系统中怎么开启Initrd文件系统

Linux系统中怎么开启Initrd文件系统,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。initial RAM diskLinux初始RAM磁盘(initrd)是在系统引
2023-06-12

Linux系统如何查看文件系统类型

本文将为大家详细介绍“Linux系统如何查看文件系统类型”,内容步骤清晰详细,细节处理妥当,而小编每天都会更新不同的知识点,希望这篇“Linux系统如何查看文件系统类型”能够给你意想不到的收获,请大家跟着小编的思路慢慢深入,具体内容如下,一
2023-06-28

Linux系统怎么隐藏文件夹和文件

这篇文章主要介绍“Linux系统怎么隐藏文件夹和文件”,在日常操作中,相信很多人在Linux系统怎么隐藏文件夹和文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统怎么隐藏文件夹和文件”的疑惑有所
2023-06-13

如何修复Linux文件系统

本篇内容介绍了“如何修复Linux文件系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当文件系统被破坏时,如果使用的是ext2fs类型的文
2023-06-10

Linux系统编译运行文件

Linux系统编译运行文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Linux系统编译运行文件1.安装编辑器使用语句:sudo apt-get install vim安
2023-06-28

如何分析Linux文件系统

这篇文章主要为大家分析了如何分析Linux文件系统的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何分析Linux文件系统”的知识吧。用计算机都需要在硬盘驱
2023-06-28

Linux系统中.bash_profile文件详解

目录一. 环境变量$PATH:二. 修改环境变量:三.bash_profile的用途 总结一. 环境变量$PATH: linux是一个多用户操作系统,每个用户都有自己专有的运行环境。用户所使用的环境由一系列变量所定义,这些变量被称为环境变量
2022-06-04

编程热搜

目录