[Linux]文件系统

1.理解文件系统

  • Linux磁盘文件特性:内容加属性,内容大小是不确定的,但是属性大小是一定的,并且内容和属性是分开存储的。文件属性是用一个结构体来定义的,在Linux中,该结构体是固定128字节大小如下代码:
struct inode
{
    类型;
    大小;
    权限;
    时间;
    inode编号;//整个分区内唯一的,用来区分文件的inode
    ...
}
  • 而Linux中一个文件块是4KB,那么一块就可以存储4*1024/128=32个该结构体。其中,值得注意的是文件名是不属于文件属性的。
  • 系统中,表示一个文件,用的不直接是文件名,而是inode,用命令ls -i就可以查看文件的inode

2.刨析文件分组中的各个组成

在这里插入图片描述

  • i节点表(inode Table):存放文件属性 如 文件大小,所有者,最近修改时间等。假设我们这个group0大小是10GB,我们要在这10GB的大小的空间内存放一万个文件,也就说说有一万个inode,那么10000*128/4/1024=312。这意味着有312个block就能存储一万个inode。所以如果有一万个文件,那么这312个block包含的一万个inode组成的表就是inode Table

  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。比特位的位置代表:第几个inode;比特位的内容:表示该inode是否正在被使用。

  • 数据区:存放文件内容,里面有很多4kb的区域用来存放文件内容
    在这里插入图片描述

  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。比特位的位置代表第几个数据block,比特位的内容代表该block是否正在被使用。

struct inode
{
    类型;
    大小;
    权限;
    时间;
    inode编号;//整个分区内唯一的,用来区分文件的inode
    int block[15];
    ...
}
  • inode结构体中还有个成员变量是block的数组,这个数组里面的内容存放的是该文件存放block块的下标。其中存放15个元素,即[0, 14],其中[0, 11]就是存放该文件正常被使用的数据块的下标,[12, 13]不直接存放数据块下标,里面的内容指向的是数据块编号,即间接索引,14中存放的内容是指向12.13这样的索引数据块,即三级索引块。

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

  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。描述整个分区
    在这里插入图片描述

  • 格式化的本质就是向指定的分区写入全新的文件系统。上面说的文件系统叫Ext*(2)

3.详谈文件名和文件的增删查改

  • 首先,明确一个概念,目录是一个文件,那么目录肯定也是有内容+属性,其中目录的内容是很多对文件名和inode编号的映射关系。
  • 对于一个文件的增删查改,都和这个文件所处的目录有关系,查找一个文件,在内核中,都要逆向地递归般得到/,然后从根目录进行路径解析。
  • 一个被写入文件系统的分区,要被Linux使用,必须先将这个分区进行挂载,mount命令。
  • 一个文件系统所对应的分区,挂在对应的目录中。分区的访问,都是通过所挂在的路径访问的,所以访问一个文件,可以根据路径前缀,优先区分出文件在哪一个分区下。

4.软硬链接

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 由上面的现象可以看出来,硬链接本质不是一个独立的文件,而软链接有自己的inode,是一个独立的文件。

  • 在这里插入图片描述

  • 硬链接肯定没有新建文件,而是新建了一个文件名,和目标文件的inode编号形成了映射关系,写入到指定目录的数据块中。前面的2代表的是硬链接数(也就是下图的引用计数),而删了test.c后,硬链接数就等于1了。所以,我们所说的删除文件,其中就是删除目录文件中的映射关系,当文件的inode中的引用计数为0时,才会把inode位图和block位图中对应文件的比特位置零,也就是删除磁盘中的文件。

  • 在这里插入图片描述

4.1软硬链接的原理
  • 硬链接的本质就是在指定的目录下,插入新的文件名和目标文件的映射关系,并让inode的引用计数++
  • 软链接的本质就是一个独立文件,软链接内容里面放的是目标文件的路径,类似于windows下的快捷方式。(额外小知识:linux系统中删除的指令除了rm,还有unlink指令)
  • 在这里插入图片描述
  • linux中可以给目录创建软链接,但是不可以给目录创建硬链接。这样可以避免环路问题,避免陷入死递归。除非系统自己建立硬链接,例如.和…

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

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

相关文章

LC 98.验证二叉搜索树

98.验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例…

Vue cli创建项目时键盘操作无效;vue3.0项目搭建自定义配置

一. 问题描述 在创建vue3.0项目时,在建好的文件夹,鼠标右键 git bash 使用 vue create my-vue3.0创建新项目时,键盘方向键失效,无法选中对应的选项(交互提示符不工作) 解决方案: 方案一 使用…

架构评估方法相关知识总结

一、架构评估中的重要概念 定义:软件架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。 常用系统架构评估的方式: 1. 基于调查问卷或检查表的方法:该方法的关键是设计好问卷或检查表。缺点是在很大 程度上依赖于评…

华为北向网管NCE开发教程(5)打包org.omg.CosNotification找不到

1问题描述 在IDE中,代码能正常运行,但是打包的时候,会抱不到一些类 2问题原因 导入的本地包中,能在IDE中找到,但是在使用maven打包时,maven找不到这些依赖包 3解决办法 将依赖包通过maven安装到maven…

算法沉淀 —— 动态规划篇(斐波那契数列模型)

算法沉淀 —— 动态规划篇(斐波那契数列模型) 前言一、第 N 个泰波那契数二、三步问题三、使用最小花费爬楼梯四、解码方法 前言 几乎所有的动态规划问题大致可分为以下5个步骤,后续所有问题分析都将基于此 1.、状态表示:通常状态…

Matlab|【免费】基于数据驱动的模型预测控制电力系统机组组合优化

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《Feature-Driven Economic Improvement for Network-Constrained Unit Commitment: A Closed-Loop Predict-and-Optimize Framework》,程序主要做的是一个基于数据驱动的电力系统机…

YOLO算法改进Backbone系列之:CoaT

在本文中,我们提出了co-scale conv-attention image transformer(CoaT),这是一种基于Transformer的图像分类器,配备了co-scale和conv-attention机制。首先,co-scale机制在各个尺度上保持Transformer编码器支…

09、ArrayList

ArrayList 文章目录 ArrayList集合与数组ArrayList集合进阶集合体系结构Collection集合List集合(接口)数据结构ArrayList集合LinkedList集合 Set集合HashSet 双列集合创建不可变集合 集合与数组 自动扩容 无法存储基本数据类型,只能将其变为…

【C++】CC++内存管理

目录 一、C/C内存分布二 、C语言中动态内存管理方式:malloc/calloc/realloc/free三、 C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型3.3 长度域 四、operator new与operator delete函数五、new和delete的实现原理5.1 内置类型5.2 自定义类…

K8S--水平自动扩缩容实战演练

原文网址:K8S--水平自动扩缩容实战演练-CSDN博客 简介 本文用实例来展示K8S的自动扩缩容(水平方向)。 官网网址 HorizontalPodAutoscaler 演练 | Kubernetes 为 Pod 和容器管理资源 | Kubernetes 水平扩缩的原理 水平扩缩容&#xff…

阿里云-零基础入门NLP【基于深度学习的文本分类3-BERT】

文章目录 学习过程赛题理解学习目标赛题数据数据标签评测指标解题思路BERT代码 学习过程 20年当时自身功底是比较零基础(会写些基础的Python[三个科学计算包]数据分析),一开始看这块其实挺懵的,不会就去问百度或其他人,当时遇见困难挺害怕的…

NKCTF2024-Eznative

首先使用blutter解析,拿到如上的output文件 先看看asm 都被混淆了,真的是太可恶了。 查看libapp.so的内容 一点符号都不给,首先我们使用LoadScript File去添加一部分符号 加载之前解析的 恢复了一部分,但是没有什么乱用啊 这个时候…

微服务(基础篇-002-Ribbon)

目录 Ribbon负载均衡(1) 负载均衡的原理(1.1) 负载均衡策略(1.2) Ribbon-IRule(1.2.1) 修改负载均衡的方法(1.2.2) 懒加载(1.3) 饥饿加载(1…

吴恩达2022机器学习专项课程(一) 3.3 成本函数的公式

问题预览 模型的参数(w和b)有什么作用?不同的w和b对线性回归模型有什么影响?训练集里的y和线性回归模型预测的y(y帽)的区别是什么?成本函数的作用是什么?成本函数的公式是什么&…

【PyQt】19-数据操作

数据表 前言一、显示二维表数据(QTableView控件)扩展知识---MVC模式1.1 代码1.2 运行结果 二、显示列数据(QListView控件)2.1 代码2.2 运行结果2.3 扩展---列表控件(QListWidget)运行结果 总结 前言 一、显…

C语言中的联合和枚举

1、联合体 联合体类型的声明 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体。因为所有变量公用…

UE5 LiveLink 自动连接数据源,以及打包后不能收到udp消息的解决办法

为什么要自动连接数据源,因为方便打包后接收数据,这里我是写在了Game Instance,也可以写在其他地方,自行替换成Beginplay和Endplay 关于编辑器模式下能收到udp消息,打包后不能收到消息的问题有两点需要排查,启动打包后…

2024年阿里云轻量应用服务器优惠价格_2核2G_2核4G报价

阿里云轻量应用服务器2核2G和2核4G配置优惠价格表,轻量2核2G3M带宽61元一年,轻量2核4G4M带宽165元1年,均不限制月流量,阿里云活动链接 aliyunfuwuqi.com/go/aliyun 活动打开如下图: 阿里云轻量应用服务器价格 61元/年…

Spring Boot:基础配置

Spring Boot 全局配置文件application.propertiesapplication.yml全局配置文件的优先级 从全局配置文件中获取数据的注解从外部属性文件中获取数据的注解全局配置文件的配置项通用配置项数据源配置项JPA 配置项日志配置项配置文件特定配置项Profile 特定配置项 配置类配置文件中…

C++项目——集群聊天服务器项目(三)muduo网络库

今天来介绍集群聊天器项目中网络模块代码的核心模块——muduo网络库,一起来看看吧~ 环境搭建C项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置-CSDN博客 Json第三方库C项目——集群聊天服务器项目(二)Json第三方库…