Linux——文件系统
✅<1>主页::我的代码爱吃辣
📃<2>知识讲解:Linux——文件系统
☂️<3>开发环境:Centos7
💬<4>前言:上期我们了解了文件在内存中得组织方式,那么文件在磁盘中又是如何管理得呢?
目录
一.磁盘物理的结构
二.磁盘的逻辑结构
三.文件系统
四Linux文件属性
五.软硬链接
1.软链接
2.硬链接

一.磁盘物理的结构
磁盘是我们计算机上唯一的一个机械设备。

说明:
- 这里的盘片有好几层,双面,每一面都会有一个磁头。
- 盘面上很多的微型磁体,使用磁体的N/S极,存储0/1数据。
抽象图:

说明:
- 可以将每一个盘面看成上述的一个抽象图,一圈圈的排布的。
- 每一圈叫做一个磁道。
- 每一圈的磁道,有多个小扇形组成,叫做扇区。
- 多个磁道在竖直方向上形成一个面,叫做柱面。
- 一般的磁盘每一个扇区,存储大小512字节。
磁盘如何定位:
- 每一个磁头(head)都有一个编号,依次可以定位到一个面。
- 根据上下多个磁道形成的柱面,结合磁道(cylinder)的半径可以准确的定位到一个柱面。
- 一个磁道(sector)上的扇区都是有编号的。
总结:
我们成中定位方式定位一个扇区叫做:CHS定位法。
一个普通文件(属性+数据)无非就是占用一个或者多个扇区,来进行自己的数据存储的!
二.磁盘的逻辑结构
上面我们得知,磁盘定位一个扇区,可通过CHS方式定位。
那么操作系统内部是不是使用的CHS方式定位一个扇区的呢?不是
因为操作系统要想做到解工作,如果我们换了一套硬件磁盘存储方案,操作系统又要跟着改。
即便是一个扇区已经有了512字节,单位IO的基本数量也是很小的,而在OS内部依次IO的基本单位是块——4KB(可以调整),所以OS一定要有一套自己的方案,来进行块级别的访问。
在OS看来:
OS以4KB(块)进行IO的,一个OS级别的文件块要包含8个扇区。
操作系统是使用数组对块的组织,那么OS对磁道的也会抽象数组。数组的每一个成员就是一个扇区。
此时定位一个扇区,就可以直接使用数组下标了。
定位任意一个块也是同样使用数组下标的特性来定位。
我们成这种定位一个方式叫做LBA。
操作系统也会提供LBA转CHS的算法,支持逻辑地址转换成物理地址。

三.文件系统

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。
Boot Block:
- 一个block的大小是由格式化的时候确定的,并且不可以更改。可以设定block大小为1024、2048或4096字节。上图中启动块的大小就是用Boot Block来确定的。
Block Group:
- ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。
超级块(Super Block):
- 存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。
- Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
- 从Super Block存储的结构信息结合分租来看,其实Super Block存储的信息应该都是一样的,但是Super Block是每一个分组都会有的一份。
- 目的是返防止Super Block被破坏。去过某一个分组的Super Block出现故障,可以使用其他分组的Super Block来进行修复。
Group Descriptor Table:
- 块组描述符,描述块组属性信息。
Date Blocks:
- linux下是将文件的属性和数据分开存储的,Date Blocks就是文件数据存储地。
- 一个文件属性大小都是固定的,数据是不固定的往往也是占据空间最大的。
- 一个分组中占据空间嘴大的也是Date Blocks,Date Blocks有很多个块(4KB)组成。
Block Bitmap:
- Date Blocks中有很多的块,而且块是使用数组的方式进行组织的。
- Block bitmap是一个位图结构,Date Blocks中每一个块的下标,都对应着BIock bitmap的一个位置,用于记录块是否被使用。
inode Table:
- 一般而言,一个文件内部的所有数据会被放进Date Blocks,而内部的属性的集合一般会有一种特性的结构来存储,我们叫做inode结点。
- 且每一个文件都会有一个inode结点,inode结点内部存储了在该分区内标识该文件的唯一编号,我们称之为inode编号,也就是对应文件的属性ID。
- 所以即使是一个分区内部都会有很多的文件,也就会有会多的inode结点,一个group,需要有一个地方专门存放这些结点,这个存储结点的地方我们称之为inode Table,inode表。
inode Bitmap:
- 一个分组的inode结点数往往是固定的,所以我们需要能标识每一个inode结点是否被使用了,inode Bitmap每一个bit位就是标识一个inode是否被使用。
四Linux文件属性
我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据:

从左往右依次是:权限模式,硬连接数,文件按的拥有者,文件的所属组,文件大小,最后修改时间,文件名。
其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息:
stat [文件名]

我们能够清楚的看到:
- File:文件名。
- Size:文件大小。
- Blocks:文件所占块数。
- IO Block:块大小。
- Inode:inode编号。
- Links:硬连接数。
- Access:最近访问时间(不会立即更新)。
- Modify:最近修改内容时间(立即更新)。
- Change:最近修改属性时间(立即更新)。
创建一个新文件主要有一下4个操作:
1. 存储属性
- 内核inode Bitmap先找到一个空闲的inode节点(这里是inode标号:263466)。内核把文件信息记录到inode结点存储待inode Table中。
2. 存储数据
- 该文件需要存储在三个磁盘块,内核Block Bitmap找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推,将inode Bitmap对用的位图位置信息修改。
3. 记录分配情况
- 文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表
4. 添加文件名到目录
- 新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(inode编号:263466,文件名:abc)添加到目录文件。文件名和inode编号之间的对应关系将文件名和文件的内容及属性连接起来。
五.软硬链接
我们可以使用命令展示文件的inode:
ls -li

1.软链接
硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件。
制作一个软连接:
测试代码和文件:

测试代码:
#include <iostream>using namespace std;int main()
{cout << "hello c++ and linux" << endl;cout << "hello c++ and linux" << endl;cout << "hello c++ and linux" << endl;return 0;
}
使用命令建立软链接:
ln -s [原文件] [链接文件]

软连接的作用:
2.硬链接
相关文章:
Linux——文件系统
✅<1>主页::我的代码爱吃辣 📃<2>知识讲解:Linux——文件系统 ☂️<3>开发环境:Centos7 💬<4>前言:上期我们了解了文件在内存中得组织方式,那么文件在磁盘中…...
《动手学深度学习 Pytorch版》 7.3 网络中的网络(NiN)
LeNet、AlexNet和VGG的设计模式都是先用卷积层与汇聚层提取特征,然后用全连接层对特征进行处理。 AlexNet和VGG对LeNet的改进主要在于扩大和加深这两个模块。网络中的网络(NiN)则是在每个像素的通道上分别使用多层感知机。 import torch fr…...
古代有没有电子元器件?
手机,电脑,电视等等电子产品,无时无刻充斥在我们的生活中,如果有一天突然没有了这些功能多样的电子产品,估计大部分人都会一时之间难以适应。 这就好比正在上网,结果突然被人断了网,导致无网络连…...
log4j2或者logback配置模版实现灵活输出服务名
介绍 在我们使用log4j2或者logback打印日志时,输出的内容中通常是一定要加上服务名的。以log4j2为例: <!--输出控制台的配置--> <Console name"Console" target"SYSTEM_OUT"><!-- 输出日志的格式 --><Patter…...
使用HTTP爬虫ip中的常见误区与解决方法
在如今的互联网时代,为了保障个人隐私和实现匿名浏览,许多人选择使用HTTP爬虫ip。然而,由于缺乏了解和使用经验,常常会出现一些误区。本文将为大家介绍使用HTTP爬虫ip过程中常见的误区,并提供相应的解决方法࿰…...
MySQL学习笔记3
MySQL的源码编译安装: 1、参考MySQL的源码安装官方文档: 2、源码安装定制选项: 3、源码安装三部曲:配置、编译、安装。 4、软件安装包: mysql-boost-5.7.43.tar.gz 5、安装需求: 安装需求具体配置安装目…...
快速掌握ES6
什么是ES6 ES6(ECMAScript 6),也被称为ES2015,是JavaScript的第六个版本,于2015年发布。ES6引入了许多新的语法和功能,旨在提高JavaScript的开发效率和代码质量。 ES6的一些主要特性和改进包括࿱…...
电池厂提供excel电池曲线zcv到mtk电池曲线zcv转换
#encoding:utf8 #电池厂提供excel电池曲线zcv到mtk电池曲线zcv转换 import pandas as pd import openpyxl import math # 读取Excel文件 df pd.read_excel("a55-zcv.xlsx") for j in range(0,10): if(j<3): offset0 #T0~T2 if(j3): offset…...
重写和重载、抽象类和接口
文章目录 前言一、重载与重写1.重载(Overload)(1)条件(2)举例 2.重写(Override)(1)规则(2)举例 3.重载和重写区别 二、抽象类与接口1.抽象类&…...
Untiy UDP局域网 异步发送图片
同步画面有问题,传图片吧 using System.Text; using System.Net.Sockets; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using System.Net; using System; using System.Threading.Tasks; using Sy…...
移动端H5封装一个 ScrollList 横向滚动列表组件,实现向左滑动
效果: 1.封装组件: <template><div class"scroll-list"><divclass"scroll-list-content":style"{ background, color, fontSize: size }"ref"scrollListContent"><div class"scroll…...
Docker一键安装和基本配置
一键安装脚本 注:该脚本需要root权限 curl -sSL https://get.docker.com/ | sh非root组用户赋权 sudo groupadd docker # 若使用一键安装脚本会自动创建这个组,提示已存在 sudo gpasswd -a ${USER} docker # 将当前用户添加到docker组,也…...
MVC设计思想理解和ASP.NET MVC理解
三层模式 三层模式包括:UI层,业务逻辑层,数据访问层,模型层 MVC设计思想和ASP.NET MVC理解 MVC设计思想: MVC的思想就是把我们的程序分为三个核心的模块,这三个模块的详细介绍如下: 模型(Model) :负责封装与引用程序的业务逻辑相关的数据以及对数据的处理方法。模型层有对…...
大模型应用选择对比
大模型应用选择对比 1、知识库对比:dify、fastgpt、langchatchat 2、agent构建器选择:flowise、langflow、bisheng 3、召回率提升方案...
c++STL概述
目录 STL基本概念 STL六大组件 STL的优点 STL三大组件 容器 算法 迭代器 普通的迭代器访问vector容器元素 算法for_each实现循环 迭代器指向的元素类型是自定义数据类型 迭代器指向容器 常用容器 string容器 string的基本概念 string容器的操作 string的构造函…...
利用容器技术优化DevOps流程
利用容器技术优化DevOps流程 随着云计算的快速发展,容器技术也日益流行。容器技术可以打包和分发应用程序,并实现快速部署和扩展。在DevOps流程中,容器技术可以大大优化开发、测试、部署和运维各个环节。本文将介绍如何利用容器技术优化DevO…...
91 # 实现 express 的优化处理
上一节实现 express 的请求处理,这一节来进行实现 express 的优化处理 让 layer 提供 match 方法去匹配 pathname,方便拓展让 layer 提供 handle_request 方法,方便拓展利用第三方库 methods 批量生成方法性能优化问题 进行路由懒加载&#…...
arcgis拓扑检查实现多个矢量数据之间消除重叠区域
目录 环境介绍: 操作任务: 步骤: 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后,进行拓扑检查 4、打开TP_CK_Topology,会自动带出拓扑要素,红色区域为拓扑错误的地方࿱…...
基于Vue+ELement搭建登陆注册页面实现后端交互
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 …...
JS获取经纬度, 并根据经纬度得到城市信息
在JavaScript中,获取经纬度通常需要使用定位服务,比如HTML5的Geolocation API。然而拿到坐标后,将经纬度转换为城市信息,则需要使用逆地理编码服务接口,比如百度或者高德的 API, 但是他们收费都很高, 我们可以使用一些…...
技术民主化:OpCore Simplify让黑苹果EFI配置实现零门槛
技术民主化:OpCore Simplify让黑苹果EFI配置实现零门槛 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 为什么全世界仅有0.3%的PC用户尝试…...
从‘米勒平台’到‘零电压开关’:深入浅出聊聊MOS管栅极驱动的那些门道与进阶玩法
从‘米勒平台’到‘零电压开关’:深入浅出聊聊MOS管栅极驱动的那些门道与进阶玩法 在功率电子领域,MOS管的开关过程就像一场精密的芭蕾舞表演,而栅极驱动则是那位看不见的编舞师。当您第一次在示波器上观察到那个神秘的"米勒平台"时…...
DanKoe 视频笔记:数字时代财富创造指南:思想是新石油
在本节课中,我们将探讨在数字时代创造财富的新范式。我们将分析传统投资和房地产的局限性,并揭示“思想”如何成为这个时代最宝贵的、可无限开采的资源。通过理解并构建“数字房地产”,任何人都可以踏上一条全新的致富之路。 概述࿱…...
5大核心功能打造专业直播录制系统:从入门到精通的全方位指南
5大核心功能打造专业直播录制系统:从入门到精通的全方位指南 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 一、核心价值:为什么选择这款直播录制工具 场景引导:当你需要保…...
STM32与ESP8266实现疫苗接种数据监控系统
STM32实现全球新冠疫苗接种数据监控系统设计指南1. 项目概述1.1 系统功能本项目基于STM32微控制器实现了一个全球新冠疫苗接种数据实时监控平台,通过WiFi模块连接互联网获取最新的疫苗接种统计数据,并在LCD显示屏上直观展示。系统主要功能包括࿱…...
FlexASIO音频优化实战指南:从延迟卡顿到高保真体验的转型方案
FlexASIO音频优化实战指南:从延迟卡顿到高保真体验的转型方案 【免费下载链接】FlexASIO A flexible universal ASIO driver that uses the PortAudio sound I/O library. Supports WASAPI (shared and exclusive), KS, DirectSound and MME. 项目地址: https://g…...
Vue项目里给天地图加个‘框’:限制缩放与拖拽区域的完整配置流程(附避坑点)
Vue项目实战:天地图交互边界精准控制与工程化实践 在园区导航、景区导览等业务场景中,地图交互边界的精确控制直接影响用户体验。上周接手一个智慧园区项目时,产品经理指着地图上可以无限拖拽的空白区域问我:"能不能让地图像…...
简历匹配已成过去式:AI招聘选型的避坑与实战指南
讲真,最近这一年,我听到最多的一句抱怨就是:“我们花了大几十万上的AI招聘系统,怎么用着用着,就只剩下‘自动筛简历’和‘群发面试通知’的功能了?” 在2026年这个节点,如果一家公司的AI招聘系统…...
AI 对人类的影响与普通人的应对策略
AI 对人类的影响与普通人的应对策略 AI 作为当下科技革命的核心驱动力,正在以较快速度影响人类社会。近年的发展呈现出更复杂的图景:技术能力提升与落地成本并存,效率提升与分配不均交织,乐观预期与治理困境相互叠加,影…...
ARM64虚拟化实战:从零搭建KVM环境并理解VHE特性
ARM64虚拟化实战:从零搭建KVM环境并深度解析VHE特性 开篇:为什么ARM64虚拟化值得关注? 在云计算和边缘计算迅猛发展的今天,ARM架构凭借其出色的能效比和可扩展性,正逐步蚕食传统x86服务器市场。根据最新行业报告&#…...
