理解inode

article/2025/10/2 23:00:08

文章目录

  • 磁盘构成
    • 磁盘存储的映射
  • inode和data block(重点)
    • inode bitmap
    • block bitmap
    • inode table
    • data table
  • 查找文件的示意图(重点)
    • 创建新文件需要的操作(重点)
    • 为什么明明还有空间,却创建不了文件
    • 创建目录需要的操作
    • 删除文件需要的操作
  • 目录文件与inode
  • 硬链接
    • 文件信息中的硬链接数
  • 软链接
  • 文件信息中的三个时间a c m

inode是文件系统里面的一个数据结构。
注:这里讲的文件是硬盘级文件,而不是被加载进内存被进程管理的进程级文件

磁盘构成

img
磁盘是一种机械设备,比如机械硬盘就是磁盘的一种。(固态硬盘不是磁盘)

磁盘可以存储信息,可以划分为三个区域来存储信息。

1.不同的磁盘面
2.柱面
3.扇区

柱面是把磁盘划分成许多同心圆,不同的同心圆是不同的柱面。
扇区是在同一个同心圆上面,有很多小块,被称为扇区。

磁盘存储的映射

文件系统在管理物理内存时,会进行抽象管理。硬盘会被划分成一个线性结构。并且将这一个线性结构分块管理
在这里插入图片描述
经过层层划分,最终会划分出一个叫做block group的分区。
在这里插入图片描述
一个block group里面有很多成员组成,主要讲几个重要的。


inode和data block(重点)

文件系统是通过struct file去管理硬件级文件的。struct file里面有一个dentry成员,可以通过dentry成员找到inode。(可以理解成struct file里面可以找到inode)

为什么要找到inode呢?因为通过inode可以找到文件数据。

inode是一个数据结构,里面存放着各种文件信息,和文件数据区的映射关系。

map[inode id] = data block

inode bitmap

inode里面有一个成员叫inode id。每一个文件都有自己的inode id。
在不考虑硬链接的情况下,一个文件只有一个inode id。系统在查找文件的时候也是用inode id去查找的。

我们可以用ls -i来查看文件的inode id。前面那些数字就是inode id
在这里插入图片描述
也可以用stat来查看更多文件信息,可以看到inode id是665534
在这里插入图片描述

知道了inode id,就知道了inode bitmap是干什么的了。
bitmap是位图,每一个bit位代表一个inode id是否空闲,没有被使用。使用过了就不能再使用了。

block bitmap

block bitmap也是位图,每一个bit位代表一个data block是否空闲,空闲就可以往里面放数据。

inode table

一个block group里面可以存很多个文件信息。由inode bitmap也知道了,一个group里面会有很多inode需要管理,因此inode table就是用来存放inode的。

data table

存放文件的数据的。

查找文件的示意图(重点)

1.通过文件名找到inode id是多少
2.先通过inode id找到inode在inode table的位置
3.然后通过映射关系,找到该文件的数据在data block的那些位置,然后拿到那些数据
在这里插入图片描述

创建新文件需要的操作(重点)

1.找到一个空闲的inode id,用inode 存下来这个新文件的文件信息。
2.把文件内容存下到data block
3.记录下文件内容在哪些data block,并保存在inode里面。
4.添加文件名到目录

为什么明明还有空间,却创建不了文件

我们知道inode id在一个group里面是有限的,当inode id用完的时候,即使有空间,仍然无法创建文件。

创建目录需要的操作

我们知道,目录也是文件的一种。因此目录也与inode有关系。

和创建文件需要的操作类似,但是不完全一样,因为目录没有数据。
目录的data block里面存放的是目录下文件名和inode id的映射关系。

总结一下所有步骤:
1.找一个空闲的inode id,用这个inode存下目录的文件信息
2.把文件内容存到data block里面(这里的内容是文件名和inode id的映射关系)
3.用inode记录下数据放在了哪些data block里
4.添加文件名到目录

删除文件需要的操作

删除文件并不需要将data block和inode清空,只需要把这个inode id和data block id变成空闲的即可。这样操作没有成本。

这也是为什么数据删除后可以被恢复,原因就是数据只要没有被覆盖,还存在那里。

目录文件与inode

有一个现象,当一个目录文件是不可读的时候,我们仍然可以访问目录里面的文件内容。但是当一个目录文件不可执行时,我们是无法读和写目录里面的文件内容的。

这和inode也是有关系的。

当一个目录文件不可读时,只是inode里面的信息不可读而已,但是我们仍然能映射到data block拿到目录下文件的inode id去访问文件。但是如果没有目录的x权限,我们是无法通过inode 拿到data block的映射关系的。

硬链接

一般情况下,一个文件名对应一个inode,但是硬链接这种特殊文件可以和其他文件共用同一个inode。

ln 文件 硬链接

注:硬链接不是链接,是普通文件。

文件信息中的硬链接数

这个2是就是文件的硬链接数。
为什么一个刚刚创建出来的目录硬链接数是2?
在这里插入图片描述
回忆硬链接的定义,共用同一个inode id的文件数量就是硬链接数。还有谁和这个目录共用同一个inode id呢???

我们知道linux下每一个目录都有两个隐藏文件.和…,分别是当前目录和上级目录。

原来是.这个文件和tmp目录共用同一个inode id,因此硬链接数是2.

在这里插入图片描述
在这里插入图片描述

软链接

软链接有点像快捷方式。如果可执行程序在比较深的目录下,不方便进入去运行(或者用绝对路径也不方便)就可以在当前目录下建立文件的软链接,那样就可以在当前目录下运行了。

ln -s 文件 软链接

l就是软链接
在这里插入图片描述

文件信息中的三个时间a c m

Access 最后访问时间
Modify 文件内容最后修改时间
Change 属性最后修改时间


http://chatgpt.dhexx.cn/article/A099Kjj5.shtml

相关文章

Linux inode

之前写了一篇Linux的文件描述符博客,是针对打开的文件来说的。那么如果一个文件没有被打开呢?存在哪里呢?又怎么存储?今天让我们一起来坐上"贼船"到知识的海洋中学习吧~ 目录 磁盘 什么是磁盘? 磁盘vs线…

inode结点

一、 机械硬盘 1.1 工作原理 写入时,磁头线圈加电,在周围产生磁场,磁化其下的磁性材料;电流的方向不同,所以磁场的方向也不同,可以表示 0 和 1 的区别。——“电生磁”。 读取时,磁头线圈&am…

什么是inode?

理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫扇区(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区&…

inode详解

文章目录 什么是inode?inode的内容(inode是一个结构体)block区和inode区的理解inode编号硬链接软连接 什么是inode? 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区&quo…

代码编写流程

文章目录 代码编写步骤好的代码满足条件:注意事项 代码编写步骤 1、分析任务目标,根据目标选择合适的代码设计模式   1.1、创建模式选择   1.2、结构模式选择   1.3、行为模式选择 2、整理思路、画出思维导图、或代码流程图 3、找到其中的关键对象…

代码详解设计模式--模板模式

模板模式 一个抽象类公开定义了执行方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 优点: 封装不变部分,扩展可变部分。提取公共代码,便于维护。行为由父类控制,子类实现…

GRID-FORM 基于 VUE3 可视化低代码表单设计器

本文开源代码在 GRID-FORM,如能帮到您麻烦给个星哈 楔子 大概 4 年前,我做了一个简单的动态表单功能,开发人员通过 UI 界面配置表单(其实就是添加常用的控件,如文本框、下拉框等)就能向用户提供数据查询&a…

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计+具体应用设计分析V)

目录 领域驱动实践总结三:具体应用设计分析 一、应用项目的基本背景 二、针对项目进行领域驱动的战略设计阶段 (一)事件风暴确定产品愿景 (二)事件风暴进行业务场景分析 场景分析一:请假 用户:…

领域驱动实践总结(基本理论总结与分析+架构分析与代码设计V+具体应用设计分析)

目录 领域驱动实践总结二:架构分析与代码设计 一、微服务架构模型的对比与选择 (一)整洁架构 (二)六边形架构 (三)DDD 分层架构 1.用户接口层 2.应用层 3.领域层 4.基础层 5.从三层架构向 DDD 分…

十二种常见设计模式代码详解

零:设计模式分类 设计模式有创建型模式、结构型模式与行为型模式 创建型:单例模式、工厂模式(简单工厂,工厂方法,抽象工厂)结构型:适配器模式、门面模式、装饰器模式、注册树模式、代理模式、…

优雅代码的秘密,都藏在这6个设计原则中

优雅的代码,犹如亭亭玉立的美女,让人赏心悦目。而糟糕的代码,却犹如屎山,让人避而远之。 如何写出优雅的代码呢?那就要理解并熟悉应用这6个设计原则啦:开闭原则、单一职责原则、接口隔离原则 、迪米特法则…

低代码--低代码开发(LCDP)介绍

低代码开发(LCDP)介绍 1 介绍1.1 概述1.2 行业风向1.3 行业报告1.4 优点减少重复编程避免沟通隔阂提升效率 1.5 挑战完全抛弃代码的代价,就是平台能力与灵活性受限应用低代码平台阻力大技术局限老旧系统改造困难职业角色缺失应用者大多是技术…

网页设计个人主页代码

/ 01 / 前话 主题《周末の守候》采用Dreamweaver软件制作,主题包含了12页,页面能够相互跳转,运用了HTML5标签,DIVCSS布局,网站主题鲜明、内容丰富、健康、高雅且栏目设置合理,网站中页面色彩搭配合理&…

#低码系列#如何设计一个低代码平台?

低码系列文章 #低码系列#低代码来了,程序员会失业吗? 整体设计 用户群体 对于基础功能的实现,不需要开发人员介入。业务人员通过可视化页面,即可完成设计。从这个角度上看,低码平台面向的用户是业务人员、系统管理…

浅谈代码结构的设计

本文来自网易云社区 作者:陆秋炜 引言 :很久之前,在做中间件测试的时候,看到开发人员写的代码,有人的代码,看起来总是特别舒服,但有的开发代码,虽然逻辑上没有什么问题,但总给人感觉特别难受。后来成为了一位专职开发人员,渐渐发现,自己的代码也是属于“比较难受”…

领域驱动实践总结(基本理论总结与分析V+架构分析与代码设计+具体应用设计分析)

目录 领域驱动实践总结一:基本理论总结与分析 一、领域驱动设计两大设计:战略设计和战术设计 (一)战略设计 1.出发角度与目标 2.实现方式:事件风暴与模型确立(用例分析、场景分析和用户旅程分析) 3.用三步来划定…

如何设计一个低代码平台

编者按:近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢&…

QT纯代码设计UI界面Demo

目录 一、前言 二、界面 三、源码简析 四、Demo/源码 一、前言 UI的设计方法有几种: ①一种是使用Qt Designer,也就是可视化设计,这在小型项目中常见,优点就是可观简便; ②另一种就是纯代码设计UI,也…

Verilog RTL 代码设计新手上路

1. 做一个4选1的mux,并且进行波形仿真 和2选1的mux对比,观察资源消耗的变化: 实验分析:4选1的mux实际上就是在2选1的mux上进行拓展,选用2位的控制信号控制4位输入信号的选择输出 实验代码设计如下: …

代码设计流程

一、需求分析 1、需求分析的三层境界:实现者、分析者、引导者。 2、在需求中提取到合适的用例(以抽卡系统为例) 3、用例分析法 5W1H分析法 对上面的“抽卡”用例进行分析如下 5W内容What抽取卡牌Who玩家When游戏服务器开启期间Where抽卡…