Linux 文件系统(下)

news2024/9/23 3:50:47

目录

一.文件系统

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.coloradmin.cn/o/2156475.html

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

相关文章

SystemExit: 系统退出异常的完美解决方法⚙️

🚪SystemExit: 系统退出异常的完美解决方法⚙️ 🚪SystemExit: 系统退出异常的完美解决方法⚙️摘要引言正文1. 什么是SystemExit异常?📜2. 捕获SystemExit:是否应该这样做?⚠️3. 正确处理SystemExit的最…

javase复习day30综合练习

制造假数据 制造数据 练习一 package Demo1;import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; im…

上海数科(北京)律师事务所开业庆典圆满举行

金秋送爽,丹桂飘香。2024年9月22日,数智科技焕新启航主题论坛暨上海数科(北京)律师事务所(以下简称“数科北京”)开业庆典在北京中海广场中楼隆重举行。 庆典现场星光熠熠,汇聚了来自法律界、科…

程序员的AI时代:拥抱变革,塑造未来

你们有没有想过,如果有一天,你的编程工作被一个AI助手取代了,你会怎么办?这不是危言耸听,随着AIGC技术的飞速发展,这样的场景可能真的会出现。但是,别担心,今天我们就来聊聊&#xf…

云栖通道看AI产业应用,打开大模型的无限可能

9月19日-21日,2024云栖大会在杭州西湖区云栖小镇举行。20日,云栖通道如约开放。 这是一个为广大AI产业从业者、创业者以及大模型开发者提供的专属交流平台。来自教育、智能体应用、智能驾驶、人形机器人等多个AI应用领域的科学家、开发者、技术代表等现…

AI客服对决:智能客服PK赛揭示企业级AI应用未来

如今的AI对抗场景,简直成了颇具娱乐性的“观赏项目”。围观群众们不仅看得津津有味,时不时还会发出阵阵笑声。 最近,一场别开生面的AI客服挑战赛引发了热议:一位使用“花开富贵”阿姨人设的Agent甩出一条链接,结果对面…

WPF DataGrid 单元格居中,头部居中,点击行改变背景色。

我得全局样式都写在了App.XAML文件下的ResourceDictionary里&#xff0c;方便全局引用 DataGrid样式和点击改变行背景色的触发器(BasedOn继承的是UI框架的样式&#xff0c;若无则删除&#xff0c;触发器还有鼠标移动事件等&#xff0c;按需自行修改添加) <Style x:Key&quo…

Docker_基础初识

文章目录 初识Docker什么是虚拟化、容器化为什么要虚拟化、容器化&#xff1f;虚拟化实现方式应用程序执行环境分层虚拟化常见类别 常见虚拟化实现主机虚拟化(虚拟机)实现Hypervisor 容器虚拟化实现 namespace隔离实操基础知识dd命令语法参数 mkfs 命令语法参数 df 命令语法参数…

视觉距离与轴距离的转换方法

1.找一个明显的参照物&#xff0c;用上方固定的相机拍一下。保存好图片 2.轴用定长距离如1mm移动一下。 3.再用上相机再取一张图。 4.最后用halcon 将两图叠加 显示 效果如下 从图上可以明显的看出有两个图&#xff0c;红色标识的地方。 这时可以用halcon的工具画一个长方形…

深度学习-卷积神经网络(CNN)

文章目录 一、网络构造1. 卷积层&#xff08;Convolutional Layer&#xff09;&#xff08;1&#xff09;卷积&#xff08;2&#xff09;特征图计算公式&#xff08;3&#xff09;三通道卷积 2. 激活函数&#xff08;Activation Function&#xff09;3. 池化层&#xff08;Pool…

Elasticsearch不停机切换(上云)方案

如何给飞行中的飞机换引擎? 背景 业务背景 略 技术背景 线下集群40个索引左右&#xff0c;总数据量不大,不到100G因为ES承担的业务鉴权业务&#xff0c;所以不能接受停机割接 还有就是ES中数据来自各个业务方&#xff0c;推送的时机不定&#xff0c;也没有完备的重推机制&…

漏洞复现_永恒之蓝

1.概述 永恒之蓝&#xff08;EternalBlue&#xff09;是一个影响Windows操作系统的远程代码执行漏洞&#xff0c;编号为CVE-2017-0144&#xff0c;最初由美国国家安全局&#xff08;NSA&#xff09;开发并利用&#xff0c;后来被黑客组织Shadow Brokers泄露。该漏洞存在于SMBv…

『功能项目』QFrameWork制作背包界面UGUI【72】

本章项目成果展示 我们打开上一篇71QFrameWork更新道具图片UGUI的项目&#xff0c; 本章要做的事情是制作背包UI界面&#xff0c;实现道具栏与背包道具的互通 首先将以下资源图片放进Art文件夹 将UICanvas的UISlot对象复制一份放在Image下 创建Scrollbar View 设置Scrollbar V…

数据处理与统计分析篇-day08-apply()自定义函数与分组操作

一. 自定义函数 概述 当Pandas自带的API不能满足需求, 例如: 我们需要遍历的对Series中的每一条数据/DataFrame中的一列或一行数据做相同的自定义处理, 就可以使用Apply自定义函数 apply函数可以接收一个自定义函数, 可以将Series对象的逐个值或DataFrame的行/列数据传递给自…

Object类代码结构

Object Object是所有类的父类。 方法结构如下 一些不知道的方法 private static native void registerNatives(); * JNI机制 * 这里定义了一个 native 方法 registerNatives()&#xff0c;它没有方法体。 * native 关键字表示这个方法的实现是由本地代码 * &#xff08;通常…

传输层 IV(TCP协议——流量控制、拥塞控制)【★★★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、TCP 流量控制&#xff08;★★&#xff09; 1. 利用滑动窗口实现流量控制 一般说来&#xff0c;我们总是希望数据传输得更快一些。但如果发送方把数据发送得…

java基础知识20 Intern方法的作用

一 Intern方法作用 1.1 Intern方法 1.在jdk1.6中&#xff1a; intern()方法&#xff1a;在jdk1.6中&#xff0c;根据字符串对象&#xff0c;检查常量池中是否存在相同字符串对象 如果字符串常量池里面已经包含了等于字符串X的字符串&#xff0c;那么就返回常量池中这个字符…

基于高维多目标优化的无人机三维航迹规划,MATLAB代码

高维多目标优化问题是指目标数量大于3的优化问题&#xff0c;这类问题在实际应用中非常普遍&#xff0c;如工业生产、资源管理、工程设计等领域。随着目标数量的增加&#xff0c;问题的求解难度也随之增大&#xff0c;传统的多目标优化算法在处理高维多目标问题时面临着选择压力…

window系统DockerDesktop 部署windows容器

目录 参考文献1、安装Docker Desktop1.1 下载安装包1.2 安装教程1.3 异常解决 2、安装windows容器2.1 先启动DockerDesktop 软件界面2.2 检查docker版本2.3 拉取windows镜像 参考文献 windows容器docker中文官网 Docker: windows下跑windows镜像 1、安装Docker Desktop 1.1 …

Llama3.1的部署与使用

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 什么是Llama3.1&#xff1f; Llama3.1 是 Meta&#xff08;原 Facebook&#xff09;公…