Linux 文件系统(下)

目录

一.文件系统

1.文件在磁盘上的存储方式

a.盘面、磁道和扇区

b.分区和分组

2.有关Block group相关字段详解

a.inode编号

b.inode Table(节点表)

c.Data blocks(数据区)

d.小结

二.软硬链接

1.软链接

a.软链接的创建

b.为什么要有软链接?

2.硬链接

a.硬链接的创建

b.硬链接是什么??

c.硬链接的应用场景


一.文件系统

在我们的电脑里,文件按照是否被进程打开可以分成两类:① 已加载到内存的文件;② 保存在磁盘中的文件。

我们知道,操作系统是计算机软硬件资源的管理者,而文件也是资源的一种,所以,操作系统需要对文件进行管理。上一篇博客中,博主主要讲解的是操作系统对第一类文件(加载到内存的文件)的管理;而本篇文章,博主会详解操作系统是如何管理保存在磁盘上的文件的!!

所以,什么是文件系统?--- 操作系统对没被打开的文件也要进行管理(增删查改),其管理的核心工作就是能够快速定位某一文件,这就需要我们有文件的路径,对这些没有被打开的文件进行管理的过程,称为文件系统。

而在学习操作系统对文件(磁盘文件)的管理之前,我们需要了解一个前置知识,即文件在磁盘上的存储方式!!

1.文件在磁盘上的存储方式

在了解文件在磁盘上的存储方式之前,我们可以了解一下磁盘的结构,虽然这涉及到磁盘的物理结构,较为枯燥,但这样可以帮助我们快速理解磁盘上数据存储的底层原理~~

a.盘面、磁道和扇区

盘面 --- 二进制数据都是直接存储在磁盘的盘面上,盘面会告诉转动,我们可以通过磁头读取盘面上的数据,磁盘上会有多个盘面,它们在我们人类的视角中是层状结构;但在计算机的逻辑中,所有的盘面都是线性的(连续的)。

磁道 --- 一个盘面上会有多个同心圆环,它们叫做磁道,是磁盘数据存储的次级单位(相较于盘面),磁头通过上下摆动来读取磁道中的数据,而且,在计算机的视角中,同一个盘面上的所有磁道都是线性的(连续的)。

扇区 --- 一个磁道上会存在多个扇区,扇区是磁盘数据存储的再次级单位(相较于磁道),由于盘面会告诉旋转,所以,即使磁头保持静止,也可以读取扇区中的连续数据,同理,在计算机的视角中,所有的扇区都是线性的(连续的)。

将磁盘的物理结构,抽象成计算机眼中的线性数组结构,这一过程,就是对磁盘理解的建模!!

b.分区和分组

有了分区和分组的概念,操作系统对磁盘上数据(文件)的管理,就变成了对某个 Block group 的管理,所以,我们接下来要学习的就是 Block group 中的各属性字段啦~~

2.有关Block group相关字段详解

格式化:每一个分区或分组在被使用之前,都必须先将这部分文件系统的属性信息写到对应分区或分组的Super block中,方便我们后续管理这个分区或分组!

a.inode编号

一般情况下,每个文件都要有独属自己的inode编号,inode编号在整个分区具有唯一性,Linux内核中,识别文件和文件名无关,只和inode编号有关。

ls -li (Linux系统中,查看文件的inode编号)

b.inode Table(节点表)

存放文件属性数据,如:文件大小、文件的所有者、文件最近修改时间等.

inode Table 内有多个inode结构体,而一个inode结构体如下:

struct inode{

    大小、权限、拥有者、所属组、ACM时间、inode编号 ... 等属性数据

    int blocks[N]; 存放文件内容数据的所有空间块的编号

};

c.Data blocks(数据区)

数据区就是一块较大的地址空间,该地址空间以一个个地址块为结构单元,每个地址块的大小一般都是4KB,并且每个地址块都有自己的编号,而已被使用了的编号会被保存在inode中的bitmap中和blocks[]数组里。

问:我们怎么知道inode表中有哪些结点已经被使用,哪些没被使用呢?

答:通过 inode Bitmap(位图),bit位的大小表示inode编号,bit位的内容(1/0)表示该inode编号是否存在。

同样的:

Block Bitmap(块位图):bit位的大小表示地址块的编号,bit位的内容(1/0)表示该地址块是否被使用。

所以,文件的删除只需要修改inode Bitmap 与 Block Bitmap这两个位图即可!!

d.小结

通过文件的inode编号 ——> 通过innode bitmap判断该innode是否存在,若存在 ——> 遍历inode table,找到对应的inode结构体——>找到文件的所有属性数据和内容数据(blocks数组)

创建一个文件,计算机的底层都做了哪些事?

一个文件的创建,首先要根据文件的cwd(当前工作目录)确定该文件在哪个分区和分组,然后再查 inode Bitmap,以由低到高的顺序找一个没被使用的bit位,先将该bit位置成1,然后将其换算成inode编号,并通过inode编号在inode Table中创建该inode结点,同时将文件的属性数据写入该inode结点中。接着,在Block Bitmap中找一个或多个没被使用的bit位,并将bit位的值写入inode结点中的blocks[]数组中,然后便可以将我们要写的内容写入数据区中的块地址内。

FILE* pf = fopen("./log.txt","r"); 执行这句代码时,操作系统底层做了些什么??

--- 是由进程打开了文件,通过进程的CWD(当前工作目录)找到log.txt的当前目录(确定文件在磁盘上的某个分区内),在当前目录的数据区内找到文件名和inode的映射关系,找到log.txt的inode编号,将inode内的log.txt文件属性数据加载到内存,在内存里面构建struct file结构体,并将log.txt文件的属性数据填充到struct file里面。同时,通过inode还可以找到log.txt的数据区,将数据区加载到内存构成文件缓冲区!最终将缓冲区里的数据拷贝到应用层,给用户读!

目录的本质也是一个文件,而文件=内容+属性,目录的属性我们知道,那么目录的“内容”是什么??--- 内容就是,该目录下,各文件名和文件inode的映射关系!!

注意:如果我们想要知道文件对应的inode,就要从该文件所在的目录内容中去查找,而想要查看目录的内容,就得先找到目录的innode编号,这就又得去目录的父目录的内容中去找,层层向上,直到根目录!!!

所以我们可以得知:

①为什么同一个目录下不能存在同名文件(因为文件名需要与innode编号构成映射关系).

②目录下,没有"写w"权限,我们就无法在该目录下创建文件(因为目录的内容,就是该目录下的子文件).

③目录下,没有“读r”权限,我们就无法查看文件(理由同上).

④目录下,没有“进入x”权限,我们就无法进入这个目录.

二.软硬链接

1.软链接

a.软链接的创建

ln -s  log  log.soft.link  表示:为log文件创建一个软链接,并将其命名为 log.soft.link

ls  -li (查看文件属性,包括“硬链接数”)

软链接是一个独立的文件,而硬链接不是!!

b.为什么要有软链接?

示例:

即,软链接相当于是给可执行程序创建了一个快捷方式让我们可以便捷的运行某一程序,它并不影响原文件的“引用计数”,软链接的内容是指向的目标文件的路径!!

通过软链接,我们可以快速找到某个文件,而无需该文件所在的目录,这就是软链接存在的最大价值!

可以用unlink解除软链接,如:unlink log.soft.link

2.硬链接

a.硬链接的创建

ln  text  text.hard.link  表示:为log文件创建一个硬链接,并将其命名为 log.hard.link

b.硬链接是什么??

---本质就是指定目录内的一组文件名和inode的映射关系!!

c.硬链接的应用场景

在Linux系统中,我们是从一个目录返回到上层目录(cd .. )的底层原理是什么呢?

我们知道,一个目录一定会有两个隐藏文件,即 '.' 和 '..',它们分别表示当前目录和上级目录,当前目录的存在使我们可以用相对路径的方式访问某一文件,上级目录的存在可以使我们回到上级目录,'.' 和 '..' 的本质其实就是当前目录和上级目录的一份硬链接。

所以,硬链接通常用于目录间的切换!!

注意:Linux系统不允许对目录建立“硬链接”---因为目录中若存在硬链接,那么可能会使某一文件路径形成环路!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据湖 Data Lake-概述

Data Lake 1. 数据湖的定义 数据湖是一种存储系统,用于集中存储大量的原始数据,可以按数据本来的原始格式进行存储,用户可以在需要时提取和分析这些数据。 A data lake is a centralized repository designed to hold vast volumes of data …

OpenCV特征检测(4)检测图像中的角点函数cornerHarris()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 Harris 角点检测器。 该函数在图像上运行 Harris 角点检测器。类似于 cornerMinEigenVal 和 cornerEigenValsAndVecs,对于每个像素 (…

如何将生物序列tokenization为token?

原理讲解 tokenization是自然语言处理领域非常成熟的一项技术,tokenization就是把我们研究的语言转换成计算机能够识别的数字——token。 在生物领域,如何把核苷酸或氨基酸序列tokenization成token呢? 我们可以使用k-mer技术: k-m…

网络设备登录——《路由与交换技术》实验报告

目录 一、实验目的 二、实验设备和环境 三、实验记录 1.通过 Console 登录 步骤1:连接配置电缆。 步骤2:启动PC,运行超级终端。 步骤3:进入Console 配置界面 2.通过 Telnet 登录 步骤1:通过 Console 接口配置 Telnet 用户。 步骤2:配置 super 口令 步骤3:配置登录欢迎…

神经网络构建原理(以MINIST为例)

神经网络构建原理(以MINIST为例) 在 MNIST 手写数字识别任务中,构建神经网络并训练模型来进行分类是经典的深度学习应用。MNIST 数据集包含 28x28 像素的手写数字图像(0-9),任务是构建一个神经网络,能够根据输入的图像…

吉首大学--23级题目讲解

7-1 单链表基本操作 在 C/C 中,.(点)和 ->(箭头)运算符用于访问结构体或类的成员,但它们的使用场景不同。 1. . 运算符 . 运算符用于访问结构体或类的成员,通过对象或结构体变量直接访问。…

es的封装

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、类和接口介绍0.封装思想1.es的操作分类 二、创建索引1.成员变量2.构造函数2.添加字段3.发送请求4.创建索引总体代码 三.插入数据四.删除数据五.查询数据 前…

Element Plus 中Input输入框

通过鼠标或键盘输入字符 input为受控组件,他总会显示Vue绑定值,正常情况下,input的输入事件会正常被响应,他的处理程序应该更新组件的绑定值(或使用v-model)。否则,输入框的值将不会改变 不支…

windows环境下配置MySQL主从启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘

文章目录 问题解决方法 问题 今天在windows环境下配置MySQL主从同步,在修改my.ini文件后发现MySQL启动失败了 打开my.ini检查参数发现没有问题 [mysqld] #开启二进制日志,记录了所有更改数据库数据的SQL语句 log‐bin mysql‐bin #设置服务id&#x…

[数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别

重要说明:数据集里面有2/3是增强数据集,请仔细查看图片预览,确认符合要求在下载,分辨率均为640x640 数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件…

Python 二级考试

易错点 电脑基础知识 定义学生关系模式如下:Student (S#, Sn, Ssex,class,monitorS#)(其属性分别为学号、学生名、性别、班级和班长学号) 在关系模式中,如果…

python-SZ斐波那契数列/更相减损数

一:SZ斐波那契数列题目描述 你应该很熟悉斐波那契数列,不是吗?现在小理不知在哪里搞了个山寨版斐波拉契数列,如下公式: F(n) { $\ \ \ \ \ \ \ \ \ \ \ \ $ a,( n1) $\ \ \ \ \ \ \ \ \ \ \ \ $ b,( n2) $\ \ \ \ \ \ …

【优选算法之双指针】No.2--- 经典双指针算法(下)

文章目录 前言一、双指针示例:1.1 ⽔果成篮1.2 和为s的两个数字1.3 三数之和1.4 四数之和 二、双指针总结: 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专…

安装黑群晖系统,并使用NAS公网助手访问教程(好文)

由于正版群晖系统的价格不菲,对于预算有限的用户来说,安装黑群晖系统成为了一个不错的选择(如果您预算充足,建议选择白群晖)。如您对宅系科技比较感兴趣,欢迎查看本文,将详细介绍如何安装黑群晖…

allWebPlugin中间件自定义alert、confirm及prompt使用

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

跨游戏引擎的H5渲染解决方案(腾讯)

本文是腾讯的一篇H5 跨引擎解决方案的精炼。 介绍 本文通过实现基于精简版的HTML5(HyperText Mark Language 5)来屏蔽不同引擎,平台底层的差异。 好处: 采用H5的开发方式,可以将开发和运营分离,运营部门自…

代码随想录Day 51|题目:99.岛屿数量、100.岛屿的最大面积

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 题目一:99. 岛屿数量思路深度优先搜索DFS广度优先搜索BFS 题目二:100. 岛屿的最大面积DFSBFS 总结 题目一:99. 岛屿数量 99. 岛屿数量 (kamacoder.com) 思路 …

Tomcat服务器—Windows下载配置详细教程

一、关于 1.1 简介 Tomcat是一个开源的Java Servlet容器和Web服务器,由Apache软件基金会维护。它实现了Java Servlet和JavaServer Pages (JSP) 规范,用于运行Java Web应用程序。Tomcat支持多种Java EE功能,并提供了高效的性能和可扩展性&am…

华为OD机试 - 分解正整数 - 数学推导(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

Redisson实现分布式锁(看门狗机制)

目录 可重入锁: 锁重试和看门狗机制: 主从一致性: 首先引入依赖,配置好信息 3.使用Redisson的分布式锁 可重入锁: 可重入锁实现是通过redsi中的hash实现的,key依旧是业务名称加id,然后第一个…