当前位置: 首页 > news >正文

Linux——文件系统

✅<1>主页::我的代码爱吃辣
📃<2>知识讲解:Linux——文件系统
☂️<3>开发环境:Centos7
💬<4>前言:上期我们了解了文件在内存中得组织方式,那么文件在磁盘中又是如何管理得呢?

目录

一.磁盘物理的结构

二.磁盘的逻辑结构

三.文件系统

四Linux文件属性

五.软硬链接

1.软链接

2.硬链接


 

一.磁盘物理的结构

磁盘是我们计算机上唯一的一个机械设备。

 说明:

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

抽象图:

说明:

  1. 可以将每一个盘面看成上述的一个抽象图,一圈圈的排布的。
  2. 每一圈叫做一个磁道。
  3. 每一圈的磁道,有多个小扇形组成,叫做扇区。
  4. 多个磁道在竖直方向上形成一个面,叫做柱面。
  5. 一般的磁盘每一个扇区,存储大小512字节。

磁盘如何定位:

  1. 每一个磁头(head)都有一个编号,依次可以定位到一个面。
  2. 根据上下多个磁道形成的柱面,结合磁道(cylinder)的半径可以准确的定位到一个柱面。
  3. 一个磁道(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:

  1. 一个block的大小是由格式化的时候确定的,并且不可以更改。可以设定block大小为1024、2048或4096字节。上图中启动块的大小就是用Boot Block来确定的。

Block Group:

  1. ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。 

超级块(Super Block):

  1. 存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。
  2. Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
  3. 从Super Block存储的结构信息结合分租来看,其实Super Block存储的信息应该都是一样的,但是Super Block是每一个分组都会有的一份。
  4. 目的是返防止Super Block被破坏。去过某一个分组的Super Block出现故障,可以使用其他分组的Super Block来进行修复。

Group Descriptor Table:

  1. 块组描述符,描述块组属性信息。

Date Blocks:

  1. linux下是将文件的属性和数据分开存储的,Date Blocks就是文件数据存储地。
  2. 一个文件属性大小都是固定的,数据是不固定的往往也是占据空间最大的。
  3. 一个分组中占据空间嘴大的也是Date Blocks,Date Blocks有很多个块(4KB)组成。

Block Bitmap:

  1. Date Blocks中有很多的块,而且块是使用数组的方式进行组织的。
  2. Block bitmap是一个位图结构,Date Blocks中每一个块的下标,都对应着BIock bitmap的一个位置,用于记录块是否被使用。

inode Table:

  1. 一般而言,一个文件内部的所有数据会被放进Date Blocks,而内部的属性的集合一般会有一种特性的结构来存储,我们叫做inode结点。
  2. 且每一个文件都会有一个inode结点,inode结点内部存储了在该分区内标识该文件的唯一编号,我们称之为inode编号,也就是对应文件的属性ID。
  3. 所以即使是一个分区内部都会有很多的文件,也就会有会多的inode结点,一个group,需要有一个地方专门存放这些结点,这个存储结点的地方我们称之为inode Table,inode表。

inode Bitmap:

  1. 一个分组的inode结点数往往是固定的,所以我们需要能标识每一个inode结点是否被使用了,inode Bitmap每一个bit位就是标识一个inode是否被使用。

四Linux文件属性

我们使用ls -l的时候看到的除了看到文件名,还看到了文件元数据:

从左往右依次是:权限模式,硬连接数,文件按的拥有者,文件的所属组,文件大小,最后修改时间,文件名。

其实这个信息除了通过这种方式来读取,还有一个stat命令能够看到更多信息:

stat [文件名]

 我们能够清楚的看到:

  1. File:文件名。
  2. Size:文件大小。
  3. Blocks:文件所占块数。
  4. IO Block:块大小。
  5. Inode:inode编号。
  6. Links:硬连接数。
  7. Access:最近访问时间(不会立即更新)。
  8. Modify:最近修改内容时间(立即更新)。
  9. 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>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;上期我们了解了文件在内存中得组织方式&#xff0c;那么文件在磁盘中…...

《动手学深度学习 Pytorch版》 7.3 网络中的网络(NiN)

LeNet、AlexNet和VGG的设计模式都是先用卷积层与汇聚层提取特征&#xff0c;然后用全连接层对特征进行处理。 AlexNet和VGG对LeNet的改进主要在于扩大和加深这两个模块。网络中的网络&#xff08;NiN&#xff09;则是在每个像素的通道上分别使用多层感知机。 import torch fr…...

古代有没有电子元器件?

手机&#xff0c;电脑&#xff0c;电视等等电子产品&#xff0c;无时无刻充斥在我们的生活中&#xff0c;如果有一天突然没有了这些功能多样的电子产品&#xff0c;估计大部分人都会一时之间难以适应。 这就好比正在上网&#xff0c;结果突然被人断了网&#xff0c;导致无网络连…...

log4j2或者logback配置模版实现灵活输出服务名

介绍 在我们使用log4j2或者logback打印日志时&#xff0c;输出的内容中通常是一定要加上服务名的。以log4j2为例&#xff1a; <!--输出控制台的配置--> <Console name"Console" target"SYSTEM_OUT"><!-- 输出日志的格式 --><Patter…...

使用HTTP爬虫ip中的常见误区与解决方法

在如今的互联网时代&#xff0c;为了保障个人隐私和实现匿名浏览&#xff0c;许多人选择使用HTTP爬虫ip。然而&#xff0c;由于缺乏了解和使用经验&#xff0c;常常会出现一些误区。本文将为大家介绍使用HTTP爬虫ip过程中常见的误区&#xff0c;并提供相应的解决方法&#xff0…...

MySQL学习笔记3

MySQL的源码编译安装&#xff1a; 1、参考MySQL的源码安装官方文档&#xff1a; 2、源码安装定制选项&#xff1a; 3、源码安装三部曲&#xff1a;配置、编译、安装。 4、软件安装包&#xff1a; mysql-boost-5.7.43.tar.gz 5、安装需求&#xff1a; 安装需求具体配置安装目…...

快速掌握ES6

什么是ES6 ES6&#xff08;ECMAScript 6&#xff09;&#xff0c;也被称为ES2015&#xff0c;是JavaScript的第六个版本&#xff0c;于2015年发布。ES6引入了许多新的语法和功能&#xff0c;旨在提高JavaScript的开发效率和代码质量。 ES6的一些主要特性和改进包括&#xff1…...

电池厂提供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.重载&#xff08;Overload&#xff09;&#xff08;1&#xff09;条件&#xff08;2&#xff09;举例 2.重写&#xff08;Override)&#xff08;1&#xff09;规则&#xff08;2&#xff09;举例 3.重载和重写区别 二、抽象类与接口1.抽象类&…...

Untiy UDP局域网 异步发送图片

同步画面有问题&#xff0c;传图片吧 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 横向滚动列表组件,实现向左滑动

效果&#xff1a; 1.封装组件&#xff1a; <template><div class"scroll-list"><divclass"scroll-list-content":style"{ background, color, fontSize: size }"ref"scrollListContent"><div class"scroll…...

Docker一键安装和基本配置

一键安装脚本 注&#xff1a;该脚本需要root权限 curl -sSL https://get.docker.com/ | sh非root组用户赋权 sudo groupadd docker # 若使用一键安装脚本会自动创建这个组&#xff0c;提示已存在 sudo gpasswd -a ${USER} docker # 将当前用户添加到docker组&#xff0c;也…...

MVC设计思想理解和ASP.NET MVC理解

三层模式 三层模式包括:UI层,业务逻辑层,数据访问层,模型层 MVC设计思想和ASP.NET MVC理解 MVC设计思想: MVC的思想就是把我们的程序分为三个核心的模块,这三个模块的详细介绍如下: 模型(Model) :负责封装与引用程序的业务逻辑相关的数据以及对数据的处理方法。模型层有对…...

大模型应用选择对比

大模型应用选择对比 1、知识库对比&#xff1a;dify、fastgpt、langchatchat 2、agent构建器选择&#xff1a;flowise、langflow、bisheng 3、召回率提升方案...

c++STL概述

目录 STL基本概念 STL六大组件 STL的优点 STL三大组件 容器 算法 迭代器 普通的迭代器访问vector容器元素 算法for_each实现循环 迭代器指向的元素类型是自定义数据类型 迭代器指向容器 常用容器 string容器 string的基本概念 string容器的操作 string的构造函…...

利用容器技术优化DevOps流程

利用容器技术优化DevOps流程 随着云计算的快速发展&#xff0c;容器技术也日益流行。容器技术可以打包和分发应用程序&#xff0c;并实现快速部署和扩展。在DevOps流程中&#xff0c;容器技术可以大大优化开发、测试、部署和运维各个环节。本文将介绍如何利用容器技术优化DevO…...

91 # 实现 express 的优化处理

上一节实现 express 的请求处理&#xff0c;这一节来进行实现 express 的优化处理 让 layer 提供 match 方法去匹配 pathname&#xff0c;方便拓展让 layer 提供 handle_request 方法&#xff0c;方便拓展利用第三方库 methods 批量生成方法性能优化问题 进行路由懒加载&#…...

arcgis拓扑检查实现多个矢量数据之间消除重叠区域

目录 环境介绍&#xff1a; 操作任务&#xff1a; 步骤&#xff1a; 1、数据库和文件结构准备 2、建立拓扑规则 3、一直下一页默认参数后&#xff0c;进行拓扑检查 4、打开TP_CK_Topology&#xff0c;会自动带出拓扑要素&#xff0c;红色区域为拓扑错误的地方&#xff1…...

基于Vue+ELement搭建登陆注册页面实现后端交互

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…...

JS获取经纬度, 并根据经纬度得到城市信息

在JavaScript中&#xff0c;获取经纬度通常需要使用定位服务&#xff0c;比如HTML5的Geolocation API。然而拿到坐标后&#xff0c;将经纬度转换为城市信息&#xff0c;则需要使用逆地理编码服务接口&#xff0c;比如百度或者高德的 API, 但是他们收费都很高, 我们可以使用一些…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...