0基础入门linux文件系统

news2024/11/6 23:25:23

目录

文件系统简介

1. 文件系统类型

2. 文件系统结构

3. 文件系统的主要功能

4. 文件系统的使用

5. 文件系统的维护

6. 注意事项

简单举例

机械硬盘

物理结构介绍​编辑

CHS寻址

逻辑结构介绍

LBA寻址法

文件系统与磁盘管理

Boot Block

Data block

inode block

Block Bitmap

Inode Bitmap

Group Descriptor Table(GDT)

超级块super block

总结

如何理解目录

以下是inode结构内部包含的文件信息

补充


文件系统简介

文件系统是计算机系统中用于存储和管理文件及目录(文件夹)的数据结构。它是操作系统的重要组成部分,负责在存储设备(如硬盘、固态硬盘、光盘等)上组织数据,并确保用户和应用程序能够有效地访问这些数据。

以下是对文件系统的一些基本概念的介绍,适合初学者理解:

1. 文件系统类型

  • FAT (File Allocation Table): 早期文件系统,简单易用,但管理大容量存储不太高效。
  • NTFS (New Technology File System): Windows系统常用的文件系统,支持更大的文件大小和更复杂的权限管理。
  • EXT (Extended File System): Linux系统中使用的一系列文件系统,如EXT3、EXT4等,EXT4是目前最常用的一种。
  • APFS (Apple File System): Apple为macOS、iOS等系统设计的文件系统,优化了闪存存储的性能。
  • HFS+ (Hierarchical File System Plus): 早期macOS系统使用的文件系统。

2. 文件系统结构

  • 根目录: 文件系统的起点,所有的文件和目录都直接或间接在根目录下。
  • 目录(文件夹): 用于组织文件,可以包含文件和其他目录。
  • 文件: 存储数据的基本单元,可以是文本、图片、程序等。

3. 文件系统的主要功能

  • 存储管理: 管理磁盘空间,记录哪些空间被占用,哪些可用。
  • 文件管理: 创建、删除、重命名、移动文件和目录。
  • 权限管理: 控制用户和应用程序对文件和目录的访问权限。
  • 元数据管理: 存储文件的创建时间、修改时间、大小、类型等元数据。

4. 文件系统的使用

  • 格式化: 在使用存储设备之前,通常需要格式化来创建文件系统。
  • 挂载: 将文件系统关联到操作系统的文件树中,使得文件可以被访问。
  • 访问控制: 设置文件和目录的访问权限,保证数据安全。

5. 文件系统的维护

  • 磁盘检查: 定期检查磁盘错误,防止数据丢失。
  • 碎片整理: 对于使用FAT或NTFS等文件系统的磁盘,定期进行碎片整理可以提高性能。
  • 备份: 定期备份文件系统中的重要数据,以防不测。

6. 注意事项

  • 数据丢失: 不正确的操作可能导致数据丢失,因此在进行重要操作前应确保了解后果。
  • 兼容性: 不同操作系统支持的文件系统可能不同,需要注意文件系统的兼容性问题。

了解文件系统对于计算机用户来说非常重要,它不仅关系到数据如何存储,还直接影响到系统的稳定性和性能。对于初学者来说,最重要的是理解文件系统的基本概念和如何安全地管理文件和文件夹。

简单举例

我们使用 ls -l 的时候看到的除了看到文件名,还看到了文件元数据。
[root@localhost linux]# ls -l
总用量 12
-rwxr-xr-x. 1 root root 7438 "9 13 14:56" a.out
-rw-r--r--. 1 root root 654 "9 13 14:56" test.c
每行包含 7 列:
模式
硬链接数
文件所有者
大小
最后修改时间
文件名
其实这个信息除了通过这种方式来读取,还有一个 stat 命令能够看到更多信息
[root@localhost linux]# stat test.c
File: "test.c"
Size: 654 Blocks: 8 IO Block: 4096 普通文件
Device: 802h/2050d Inode: 263715 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-09-13 14:56:57.059012947 +0800
Modify: 2017-09-13 14:56:40.067012944 +0800
Change: 2017-09-13 14:56:40.069012948 +0800
为了能详细地读懂上面的信息,那就必须得介绍linux文件系统

机械硬盘

在我们装载在笔记本的硬盘大部分都是固态硬盘ssd,但是在实际开发中,更多还是使用固态用品(便宜、容量大),作文文件的存储介质,有必要好好介绍一下固态硬盘

固态硬盘是计算机自带的唯一的机械设备,也是一个外设。

物理结构介绍

固态硬盘HDD最主要的就是磁头与磁盘,磁盘是用来存储数据的。

存储数据的最小操作单元是512byte(哪怕你只想用1bite,那也得把512字节全部加载到内存)

磁盘存储数据的区域是由一个个同心圆构成,这些相同半径的同心圆(即磁道)称之为柱面

磁盘被访问的基本单元是扇区---512byte

磁头左右摆动目的就是定位磁道或柱面。这就是定位扇区的过程。由于是机械设备,所以性能要比ssd要差。

CHS寻址

想要读取磁道的信息,需要经过几步定位:磁头定位(确定扇面)----磁道定位----扇区定位。

CHS即这三个要素的首字母。

逻辑结构介绍

物理上磁盘是圆的,但是磁盘我们在理解时(逻辑上) 可以像磁带一样去延展开,变成线性结构。

磁盘的逻辑线性结构

每一段都有无数个扇区

因此整个磁盘就可以被抽象成一个以扇区为基本单位的数组(集合)

由于数组的下标是唯一的,因此我们可以根据下标去反推在哪个扇面,哪个磁道,哪个扇区

每个柱面的磁道数目是一致的(只需要控制好密度即可)。但是现在的技术已经能做到扇区的长度一致了。        

OS是可以控制硬盘的,但是如何管理硬盘?就是靠这样的线性结构!

LBA寻址法

对于OS而言,就可以进行这样抽象过的逻辑结构去管理磁盘

在OS中,对应的地址称为LBA地址(logic block address)逻辑地址。

文件系统与磁盘管理

磁盘是一个巨大的存储介质,假设一个磁盘800G,那么就需要分区管理

磁盘太大:磁盘分区

OS去管理磁盘的时候:先描述后组织。对于800G的硬盘只需要定义一个结构,内部包含起始与结束。定义一个数组包含5个元素即可。

当然。这200G(一个分区)还是太大,应该继续分层管理分成10G、5G(block group0, block  group 1)等小区域

这个东西就叫做文件系统。

Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的 block 。一个 block 的大小是由格式化的时候确定的,并且不可以更改。

Boot Block

Boot Block(引导块)是存储设备上的一部分,通常位于设备的起始位置,它的主要作用是在计算机启动过程中加载操作系统。

  • Boot Block通常包含引导加载程序(Boot Loader),这是计算机启动时运行的第一个软件。
  • 引导加载程序负责初始化硬件、检查系统配置,并将控制权传递给操作系统的内核。
  • 在启动过程中,引导块会检测可用的启动介质,如硬盘、光盘、USB驱动器等。
  • Boot Block可能会包含启动配置数据,如启动菜单、默认启动设备选择等。

Boot Block是确保计算机能够成功启动的关键部分,如果Boot Block损坏或配置错误,可能会导致系统无法启动。

Data block

存放文件内容的区域,以块的形式呈现,最常见的大小4KB----文件系统的块大小

inode block

存放某个文件的属性信息。一个文件对应一个inode。

在linux中,文件的属性与数据是分开存放的。

-li的i就是inode码的意思

OS不关心名称,只关心文件编号。linux标识文件用的是inode码。

如何将属性和数据块联系起来呢

每个数据块都在data blocks中有自己的编号,这个blocks数组就记录了数据块(单位4KB)的编号。可以去查找内容

索引的指示着在data block的那一块区域

索引分级,分为一级到多级索引(存在多级映射)

0-11块为一级索引存放文件内容的存储位置

12-13为二级索引。通过二级索引在data blocks中找到的存储块存在着一级索引。

Block Bitmap

采用位图的结构用来揭示,哪些data blocks的单元被使用,哪些没有被使用。

所以删除文件时,只需要位图制成0并取消索引即可,不需要去释放块空间。对属性和内容没有任何关系。这就是为什么下载慢删除快的原因。

Inode Bitmap

inode位图用来管理inode结构有没有被合法使用(伪删除)

Group Descriptor Table(GDT)

组描述符表,描述的是整个分组的使用情况、使用信息。

超级块super block

保存整个文件系统的基本信息,不会在每个分组都存在。

格式化:

每一个分区使用之前,都必须提前将文件系统的某些属性信息提前设置到对应的分区中,方便我们后续使用分区。

总结

Block Group ext2 文件系统会根据分区的大小划分为数个 Block Group 。而每个 Block Group都有着相同的结构组成。政府管理各区的例子
超级块( Super Block ):存放文件系统本身的结构信息。记录的信息主要有: bolck inode的总量,未使用的 block inode 的数量,一个 block inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。 Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
GDT Group Descriptor Table :块组描述符,描述块组属性信息。
块位图( Block Bitmap ): Block Bitmap 中记录着 Data Block中哪个数据块已经被占用,哪个数据块没有被占用
inode 位图( inode Bitmap ):每个 bit 表示一个 inode 是否空闲可用。
i 节点表 : 存放文件属性 如 文件大小,所有者,最近修改时间等
数据区:存放文件内容
inode分区独立性
创建一个新文件主要有一下4个操作
1. 存储属性
内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其中。
2. 存储数据
该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。
3. 记录分配情况
文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
4. 添加文件名到目录
新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来

如何理解目录

inode表示文件的所有属性,文件名不属于inode内的属性。

那我们怎么将文件名与inode关联起来呢?

文件 = 内容+属性

对于一个目录而言,也存在自己的内容。文件的内容就是内部文件的inode与内部文件名的映射。

因此,在一个目录内部无法使用相同的文件名:防止出现映射错误

没有w就意味着的无法将文件名与inode的对应信息进行关系的映射。

目录可以将文件名与inode编号进行映射,那么目录的inode如何确定呢?

根目录/名称与inode是确定的,可以确定根目录在哪里,通过路径就能找到对应的目录

以下是inode结构内部包含的文件信息

文件类型:例如可执行文件、块特殊文件等。

权限:如读、写权限等。

所有者:文件的所有者。

组:文件所属的组。

文件大小:文件的大小。

文件访问、更改和修改时间:Linux/Unix系统不存储文件创建时间,但会记录文件的访问、更改和修改时间。

文件删除时间:文件被删除的时间。

链接数:文件的软链接和硬链接数量。

扩展属性:例如“仅追加”属性,或者“无人可删除文件”属性,包括root用户也不能删除(不可变属性)。

访问控制列表(ACLs):控制文件访问的列表

补充

OS如何管理内存

内存与磁盘的数据交互的固定单位4kb的原因

1.提高硬件IO效率

减少IO次数,减少磁盘等待,空间换时间---硬件

2.提高软件执行效率

根据局部性原则,存在预加载机制,提升软件运行的效率。

OS管理内存时,先描述,后组织,只需要将内存单元处理成一个数组即可

struct page mem_array[10000]

其中struct page内部存在着内存page页的必要属性信息。

我们要访问一个内存时,先找到这个4kb对应的page,就能在OS找到对应的页框,去找到合适的物理内存。

其实所有申请内存的动作,都是在访问内存page数组。

补充2:linux中,我们在进程中打开的每一个文件,都有自己独立的文件页缓冲区和inode属性

数据写入到磁盘:三次拷贝。C缓冲区、文件缓冲区、磁盘,每次写入都要一次拷贝。

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

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

相关文章

2024年meme币走势分析:最后两个月的市场趋势与机会 #交易所#dapp#KOL社区合作

2024年即将步入尾声,meme币市场经历了显著的波动。对于加密市场来说,年底的走势尤为关键,尤其是meme币这种受市场情绪影响较大的加密资产。本文将从市场环境、宏观经济因素、投资者情绪、技术分析等方面分析meme币在2024年最后两个月的潜在走…

Cpp多态机制的深入理解(20)

文章目录 前言一、多态的概念二、多态的定义与实现两个必要条件虚函数虚函数的重写重写的三个例外override 和 final重载、重写(覆盖)、重定义(隐藏) 三、抽象类概念接口继承和实现继承 四、多态的原理虚表和虚表指针虚函数调用过程动态绑定与静态绑定 五、那...那单继承甚至多…

.net core 接口,动态接收各类型请求的参数

[HttpPost] public async Task<IActionResult> testpost([FromForm] object info) { //Postman工具测试结果&#xff1a; //FromBody,Postman的body只有rawjson时才进的来 //参数为空时&#xff0c;Body(form-data、x-www-form-urlencoded)解析到的数据也有所…

高清解压视频素材从哪儿下载?推荐5个高清推文素材资源网站

做抖音小说推文&#xff0c;哪里找爆款素材&#xff1f;作为一名从业多年的视频剪辑师&#xff0c;今天就来给大家揭秘可以下载爆款推文视频素材的网站&#xff0c;如果你也在苦苦找寻找&#xff0c;赶紧进来看看吧&#xff5e; 1. 稻虎网 首先是稻虎网&#xff0c;作为国内顶…

Python的全局锁GIL解析

Python的全局锁&#xff08;GIL&#xff09;是 CPython 解释器实现中的一个机制&#xff0c;用来确保任何时候只有一个线程执行 Python 字节码。这一机制存在于 CPython 中&#xff0c;主要是为了确保线程操作中的数据一致性&#xff0c;但也因此限制了多线程的并行执行效率。尤…

ELK的ElasticStack概念

目录 传送门前言一、ElasticStack是什么二、ElasticStack数据格式1、Elasticsearch的概述2、Elasticsearch核心概念&#xff08;1&#xff09;接近实时&#xff08;NRT&#xff09;&#xff08;2&#xff09;集群&#xff08;cluster&#xff09;&#xff08;3&#xff09;节点…

硅谷甄选(9)SKU模块

SKU模块 8.1 SKU静态 <template><el-card><el-table border style"margin: 10px 0px"><el-table-column type"index" label"序号" width"80px"></el-table-column><el-table-columnlabel"名称…

如何将ppt转换成word文档?8款ppt转word免费的软件大揭秘,值得收藏!

在日常办公中&#xff0c;将ppt转换成word文档的需求日益增长。这种需求源自多个方面&#xff0c;比如制作详尽的报告、创建课程讲义&#xff0c;或者将信息转化为可编辑的格式。作为一种普遍使用的演示工具&#xff0c;ppt在许多商业环境中扮演着重要角色。然而&#xff0c;随…

pandas——DataFrame

一、dataframe &#xff08;一&#xff09;创建dataframe file.csv Name,Age,City Alice,30,New York Bob,25,Los Angeles Charlie,35,Chicagoimport pandas as pd 1.使用字典创建DataFrame&#xff1a; 其中字典的键是列名&#xff0c;值是数据列表。print(1.使用字典创建D…

vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了

Vxe UI vue vxe-table v4.8 与 v3.10 解决了老版本虚拟滚动不支持动态行高的问题&#xff0c;重构了虚拟渲染&#xff0c;渲染性能大幅提升了&#xff0c;行高自适应和列宽拖动都支持&#xff0c;大幅降低虚拟渲染过程中的滚动白屏&#xff0c;大量数据列表滚动更加流畅。 自适…

关于武汉芯景科技有限公司的马达驱动芯片AT6237开发指南(兼容DRV8837)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 逻辑功能

青出于“蓝”的合资第一新能源,“换壳”背后有门道

文/王俣祺 导语&#xff1a;千呼万唤始出来的新能源“马6”终于亮相了&#xff0c;这款马自达EZ-6本以为凭借马自达多年来在国内市场深耕的底蕴可以收获一片支持&#xff0c;但最近却深陷“换壳”风波。那么今天我们就一起看看&#xff0c;这款马自达EZ-6和被冠以“原型”的深蓝…

Github上的十大RAG(信息检索增强生成)框架

信息检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种强大的技术,能够显著提升大型语言模型的性能。RAG框架巧妙地结合了基于检索的系统和生成模型的优势,可以生成更加准确、符合上下文、实时更新的响应。随着对先进人工智能解决方案需求的不断增长,GitHub上涌现出…

【小白学机器学习28】 统计学脉络+ 总体+ 随机抽样方法

目录 参考书&#xff0c;学习书 0 统计学知识大致脉络 1 个体---抽样---整体 1.1 关于个体---抽样---整体&#xff0c;这个三段式关系 1.2 要明白&#xff0c;自然界的整体/母体是不可能被全部认识的 1.2.1 不要较真&#xff0c;如果是人为定义的一个整体&#xff0c;是可…

5、片元着色器之基础光照模型:Phong模型和Blinn-Phong模型

1、什么是Phong光照模型&#xff1f; Phong模型就是在兰伯特模型的基础上增加了镜面反射光的计算。具体来说&#xff0c;兰伯特模型只考虑漫反射光&#xff0c;而Phong模型在此基础上引入了镜面反射光的概念&#xff0c;以模拟光线在光滑表面反射时产生的高光效果。镜面反射光的…

Ubuntu使用Qt虚拟键盘,支持中英文切换

前言 ​ 最近领导给了个需求&#xff0c;希望将web嵌入到客户端里面&#xff0c;做一个客户端外壳&#xff0c;可以控制程序的启动、停止、重启&#xff0c;并且可以调出键盘在触摸屏上使用(我们的程序虽然是BS架构&#xff0c;但程序还是运行在本地工控机上的)&#xff0c;我…

ES(ElaticSearch)详解(含工作原理、基本知识、常见问题和优化方法)

文章目录 一、Lucene 和 ELK 的组成二、ES 配置文件参数解读三、ES 基本知识1、索引&#xff08;Index&#xff09;&#xff1a;类似于关系型数据库的工作表2、类型&#xff08;Type&#xff09;&#xff1a;废弃3、文档&#xff08;Document&#xff09;&#xff1a;类似于关系…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…

记一次:使用使用Dbeaver连接Clickhouse

前言&#xff1a;使用了navicat连接了clickhouse我感觉不太好用&#xff0c;就整理了一下dbeaver连接 0、使用Navicat连接clickhouse 测试连接 但是不能双击打开&#xff0c;可是使用命令页界面&#xff0c;右键命令页界面&#xff0c;然后可以用sql去测试 但是不太好用&#…

ts:使用fs内置模块简单读写文件

ts&#xff1a;使用fs内置模块简单读写文件 一、主要内容说明二、例子&#xff08;一&#xff09;、fs模块的文件读写1.源码1 &#xff08;fs模块的文件读写&#xff09;2.源码1运行效果 三、结语四、定位日期 一、主要内容说明 在ts中&#xff0c;我们可以使用内置的fs模块来…