0基础入门linux文件系统

目录

文件系统简介

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.xdnf.cn/news/4898.html

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

相关文章

【docker入门】docker的安装

目录 Centos 7 添加docker 官方仓库到yum源 将 Docker 的官方镜像源替换为国内可以的 Docker 镜像源 安装docker 配置docker加速源 Ubuntu 创建 gpg key 目录 下载 gpg key 添加国内可用镜像源到 系统的 APT 仓库中 安装docker 配置加速源 Centos 7 添加docker 官方仓…

HTML前端页面设计静态网站-仿百度

浅浅分享一下前端作业&#xff0c;大佬轻喷~ <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>百度&#xff08;伪&#xff09;</title><style>body {margin: 0;padding: 0;}.top-bar {dis…

C++虚表和虚基表

C虚表和虚基表 文章目录 C虚表和虚基表1.虚表/虚函数表(vtable)1.1概念1.2工作机制1.3虚表的特性 2.虚基表&#xff08;vbtable&#xff09;2.1概念2.2工作机制2.3虚基表的特性 3.深入认识虚基表3.1菱形继承对象模型3.2菱形虚拟继承对象模型 4.深入认识虚表4.1含有虚函数的类对…

网络安全求职指南_看完这篇就足够了~

概述 之前的文章给大家分析了安全行业目前的发展趋势、安全防御和渗透攻击两端不同的技术栈需求。在这篇文章里面&#xff0c;我们聚焦以下常见的安全行业求职和职业发展问题&#xff1a; 安全行业如何区分&#xff1f;安全岗位到底有哪些&#xff1f;不同安全岗位的技术需求…

python: Parent-child form operations using ttkbootstrap

# encoding: utf-8 # 版權所有 2024 ©塗聚文有限公司 # 許可資訊查看&#xff1a;言語成了邀功的功臣&#xff0c;還需要行爲每日來值班嗎&#xff1f; # 描述&#xff1a; 主、子表單 窗體傳值 Parent-child form operations # Author : geovindu,Geovin Du 塗聚文. …

能让企业“脱胎换骨”的局域网电脑监控软件,有哪些?

老板们&#xff0c;是不是发现现在员工们在上班时间玩得那叫一个欢&#xff0c;而工作却被丢在一边&#xff1f;别愁啦&#xff01;今天就给各位带来一份超赞的局域网电脑监控软件指南&#xff0c;这就像是给企业配上了 “超级放大镜”&#xff0c;员工的一举一动都能看得清清楚…

什么是计算机视觉算法?——深度剖析背后的技术与应用

计算机视觉&#xff08;Computer Vision&#xff09;作为人工智能的重要分支&#xff0c;正在逐渐改变我们的生活。从人脸识别到自动驾驶&#xff0c;从医疗影像诊断到视频监控&#xff0c;计算机视觉的应用无处不在&#xff0c;而支撑这一切的正是计算机视觉算法。那么&#x…

产品如何3D建模?如何根据使用场景选购3D扫描仪?

随着科技的飞速发展&#xff0c;3D模型已从昔日的小众应用转变为各行各业不可或缺的利器。在文博、电商、家居、汽车、建筑及游戏影视等众多领域&#xff0c;3D模型以其直观、真实的视觉体验发挥着至关重要的作用。它不仅使用户能深入了解产品的外观、结构与功能&#xff0c;还…

信息安全工程师(79)网络安全测评概况

一、定义与目的 网络安全测评是指参照一定的标准规范要求&#xff0c;通过一系列的技术、管理方法&#xff0c;获取评估对象的网络安全状况信息&#xff0c;并对其给出相应的网络安全情况综合判定。其对象主要为信息系统的组成要素或信息系统自身。网络安全测评的目的是为了提高…

Windows 系统上配置 SSH 密钥验证,实现无密码登录

Windows 系统上配置 SSH 密钥验证&#xff0c;实现无密码登录 在日常工作中&#xff0c;使用密码登录远程云服务器往往让人感到繁琐。云服务器的密码通常较长&#xff0c;难以记忆&#xff0c;每次登录都需要反复输入&#xff0c;既不便捷也影响效率。此外&#xff0c;由于网络…

俯仰 (pitch) 偏摆 (yaw) 翻滚 (roll)

pitch()&#xff1a;俯仰&#xff0c;将物体绕X轴旋转&#xff08;localRotationX&#xff09; yaw()&#xff1a;航向&#xff0c;将物体绕Y轴旋转&#xff08;localRotationY&#xff09; roll()&#xff1a;横滚&#xff0c;将物体绕Z轴旋转&#xff08;localRotationZ&…

es数据同步(仅供自己参考)

数据同步的问题分析&#xff1a; 当MySQL进行增删改查的时候&#xff0c;数据库的数据有所改变&#xff0c;这个时候需要修改es中的索引库的值&#xff0c;这个时候就涉及到了数据同步的问题 解决方法&#xff1a; 1、同步方法&#xff1a; 当服务对MySQL进行增删改的时候&…

从0开始学习Linux——Yum工具

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 上一个章节我们简单了解了Linux中常用的一些文本编辑器&#xff0c;本次教程我们将学习yum工具。 一、Yum简介 Yum&#xff08;全名…

高级AI记录笔记(一)

学习位置 B站位置&#xff1a;红豆丨泥 UE AI 教程原作者Youtube位置&#xff1a;https://youtu.be/-t3PbGRazKg?siRVoaBr4476k88gct素材自备 提前将动画素材准备好 斧头蓝图 斧头武器插槽 混合空间 就是改了一下第三人称模版的动画蓝图 行为树中不用Wait实现攻击完…

ffmpeg的下载与安装

废话不多说&#xff0c; 下载地址&#xff0c;得找官网&#xff0c;不然得注意是不是有夹带私活。 FFmpeg 这个是目前的最新版本&#xff1b; 下载的时候看下自己要的版本&#xff0c;我的是Windows10&#xff1b; 解压后的版本长这样&#xff1a; 接下来进行环境变量的配置&…

【http协议笔记】-- 浏览器简单分析get、post请求

环境&#xff1a;为了了解http协议的交互方式&#xff0c;使用edge浏览器简单分析协议内容&#xff0c;给刚入门的小伙伴分享一下&#xff0c;方便大家学习。 以菜鸟教程的网站为例子&#xff1a; 分析post&#xff1a; 请求url&#xff1a; 请求参数&#xff1a; 请求相应&a…

SpringBoot【实用篇】- 热部署

文章目录 目标:1.手动启动热部署2.自动启动热部署4.禁用热部署 目标: 手动启动热部署自动启动热部署热部署范围配置关闭热部署 1.手动启动热部署 当我们没有热部署的时候&#xff0c;我们必须在代码修改完后再重启程序&#xff0c;程序才会同步你修改的信息。如果我们想快速查…

vue3相对vue2有哪些改变?

https://blog.csdn.net/weixin_44475093/article/details/112386778 https://blog.csdn.net/userDengDeng/article/details/114941956 一、vue3的新特性&#xff1a; 1、速度更快 vue3相比vue2 重写了虚拟Dom实现编译模板的优化更高效的组件初始化undate性能提高1.3~2倍SSR速度…

数据库概论实验一

声明&#xff1a;著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 本文章对数据库概论实验一_求出一箱(每箱装100个)零件的重量 并将输出结果-CSDN博客文章浏览阅读2.7k次&#xff0c;点赞4次&#xff0c;收藏25次。实验数据库&#xff0c;表…

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;全球风电运维市场的规模将攀升至307.8亿美元&#xff0c;并且在接下来的几年里&#xff0c;其年复合增长率&#xff08;CAGR&#xff09;将达到12.5%。 上述图表及…