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.rhkb.cn/news/429204.html

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

相关文章

Netty+HTML5+Canvas 网络画画板实时在线画画

采用Html5的canvas做前端画画板&#xff0c;发送数据到后端Netty服务&#xff0c;实时转发笔迹数据&#xff0c;在线实时同步画笔轨迹&#xff0c;单击绿色小方块&#xff0c;保存画板的图片 页面&#xff1a; <!-- index.html --><!DOCTYPE html> <html> …

【Elasticsearch】-实现向量相似检索

1、http请求方式 如果elasticsearch服务设置账号密码&#xff0c;则在请求的header中添加 Basic Auth 认证 请求方式&#xff1a;Post 请求地址&#xff1a;/index_name/_search 请求body&#xff1a;json格式 {"size": 10, //返回条数"min_score": 0.…

二叉树——数据结构

这次我们来学习一下数据结构中的二叉树 1. 二叉树的概念及结构 1.1 二叉树的定义 定义&#xff1a;所有结点的度小于等于2的树。 上图中可以看出 二叉树不存在度大于2的结点二叉树的子树有左右之分&#xff0c;次序不能颠倒&#xff0c;因此二叉树是有序树。 任意二叉树都…

springboot实战学习(6)(用户模块的登录认证)(初识令牌)(JWT)

接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上&#xff0c;基本完成用户模块的登录接口的主逻辑。具体往回看了解的链接如下。 springboot实战学习笔记&#xff08;5&#xff09;(用户登录接口的主逻辑)-CSDN博客文章浏览…

[数据结构与算法·C++版] 笔记 1.2 什么是数据结构

1.2 什么是数据结构 结构&#xff1a;实体 关系数据结构&#xff1a; 按照逻辑关系组织起来的一批数据&#xff0c;按一定的存储方法把它存储在计算机中在这些数据上定义了一个运算的集合 数据结构的逻辑组织 线性结构 线性表&#xff08;表&#xff0c;栈&#xff0c;队列&…

科研绘图系列:R语言多个AUC曲线图(multiple AUC curves)

文章目录 介绍加载R包导入数据数据预处理画图输出结果组图系统信息介绍 多个ROC曲线在同一张图上可以直观地展示和比较不同模型或方法的性能。这种图通常被称为ROC曲线图,它通过比较不同模型的ROC曲线下的面积(AUC)大小来比较模型的优劣。AUC值越大,模型的诊断或预测效果越…

【Linux笔记】虚拟机内Linux内容复制到宿主机的Window文件夹(文件)中

一、共享文件夹 I、Windows宿主机上创建一个文件夹 目录&#xff1a;D:\Centos_iso\shared_files II、在VMware中设置共享文件夹 1、打开VMware Workstation 2、选择需要设置的Linux虚拟机&#xff0c;点击“编辑虚拟机设置”。 3、在“选项”标签页中&#xff0c;选择“共…

数模方法论-整数规划

一、基本概念 非线性规划的应用包括工程设计、资源分配、经济模型等。在求解过程中&#xff0c;由于非线性特性&#xff0c;常用的方法有梯度法、牛顿法、启发式算法等。求解非线性规划问题时&#xff0c;解的存在性和唯一性通常较难保证&#xff0c;且可能存在多个局部最优解…

推荐3个AI论文、AI查重、AI降重工具

什么是AI论文、AI查重、AI降重工具&#xff1f; AI论文 AI论文指的是以人工智能&#xff08;AI&#xff09;相关主题为研究对象的学术论文。这类论文通常包含以下内容&#xff1a; 研究问题&#xff1a;针对某个特定的AI问题或领域的研究。方法&#xff1a;介绍用于解决问题…

yolov8旋转目标检测之绝缘子检测-从数据加载到模型训练、部署

YOLOv8 是 YOLO (You Only Look Once) 系列目标检测算法的最新版本&#xff0c;以其高速度和高精度而著称。在电力行业中&#xff0c;绝缘子是电力传输线路上的重要组件之一&#xff0c;它们用于支撑导线并保持电气绝缘。由于长期暴露在户外环境中&#xff0c;绝缘子容易出现损…

Netty源码-业务流程之构建连接

Netty基本介绍&#xff0c;参考 Netty与网络编程 1、Netty构建连接 构建连接的流程 1.1 我们知道客户端连接服务端都是通过NioEventLoop来处理请求&#xff0c;NioEventLoop是一个线程&#xff0c;连接进来首先进入run()方法。 所以我们需要启动服务端&#xff0c;然后再启动…

一个安卓鸿蒙化工具

DevEco插件&#xff0c;为已有安卓项目鸿蒙化加速。 目前支持&#xff1a; 1、安卓Vector Assets转svg&#xff1b; 2、json转ets model&#xff1b; 3、kotlin model转ets model&#xff1b; 下载地址&#xff1a;andtoharplugin1.1.0 安装&#xff1a; deveco插件安装选硬…

Java笔试面试题AI答之设计模式(2)

文章目录 6. 什么是单例模式&#xff0c;以及他解决的问题&#xff0c;应用的环境 &#xff1f;解决的问题应用的环境实现方式 7. 什么是工厂模式&#xff0c;以及他解决的问题&#xff0c;应用的环境 &#xff1f;工厂模式简述工厂模式解决的问题工厂模式的应用环境工厂模式的…

我的AI工具箱Tauri版-VideoIntroductionClipCut视频介绍混剪

本教程基于自研的AI工具箱Tauri版进行VideoIntroductionClipCut视频介绍混剪。 本项目为自研的AI工具箱Tauri版中的视频剪辑模块&#xff0c;专注于自动生成视频介绍片段。该模块名为 VideoIntroductionClipCut&#xff0c;用户可以通过该工具快速进行视频的混剪和介绍内容的生…

Selenium元素定位:深入探索与实践

目录 一、引言 二、Selenium元素定位基础 1. WebDriver与元素定位 2. 定位策略概览 三、ID定位 1. 特点与优势 2. 示例代码 四、Class Name定位 1. 特点与限制 2. 示例代码 五、XPath定位 1. 特点与优势 2. 示例代码 3. XPath高级用法 六、CSS Selector定位 1.…

Nacos 服务注册与发现

目录 Nacos 简介 Nacos(Dynamic Naming and Configuration Service) Nacos 安装 下载安装包 Windows 解压 目录介绍: 修改单机模式 启动 Nacos Linux 解压 单机模式启动 Nacos 快速上手 服务注册和发现 Nacos 负载均衡 服务下线 权重配置 开启 Nacos 负载均衡…

LeetCode --- 139双周赛

题目列表 3285. 找到稳定山的下标 3286. 穿越网格图的安全路径 3287. 求出数组中最大序列值 3288. 最长上升路径的长度 一、找到稳定山的下标 遍历数组&#xff0c;统计符合要求的答案即可&#xff0c;代码如下 class Solution { public:vector<int> stableMountai…

【开源免费】基于SpringBoot+Vue.JS服装商城系统(JAVA毕业设计)

本文项目编号 T 046 &#xff0c;文末自助获取源码 \color{red}{T046&#xff0c;文末自助获取源码} T046&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

【C++】仿函数

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;【C】list常见用法 &#x1f516; 流水不争&#xff0c;争的是滔滔不息。 文章目录 一、仿函数的介绍…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…