【Linux】基础-文件系统


文件系统介绍


文件系统概念

文件系统是操作系统用于明确存储设备分区上的文件的方法和数据结构。它负责组织和管理文件,并提供了存储、检索、共享和保护文件的功能。

没有文件系统就无法存储文件

文件系统分类:FAT,NTFS(windows),ext(linux)

文件系统种类可以更改

扇区概念

扇区操作磁盘的基本单位


ext2文件系统介绍


Boot Block

1kb大小 记录磁盘分了几个区 pc设备必须存在Boot Block 否则不被pc组织承认

格式化

将磁盘分成若干个Block 可以设置1k,2k,4k 默认4096-4k IO块

1 block = 4096 byte

1 block = 8 磁盘扇区

1 扇区 = 512byte

1 block = 32768 bit

多个block 使用Block group 管理


数据块data block

文件组成

文件属性 + 文件内容

data block存储文件内容

inode table存储文件属性


inode table结点

大小128bit

存储文件属性64bit + 数据块地址指针60bit

理论上 多少个inode 就可以存储多少文件


块位图block bitmap

用每个bit位标识每个块是否被使用

这个bit为1表示已使用

这个bit为0表示空闲可以使用


inode bitmap 位图

同block bitmap 用于表示inode是否空闲可用


GDT 块组描述浮表

1 描述第几个块的起始位置

block bitmap

inode bitmap

inode table

data block

2 空先inode有多少


超级块 4kb

1 记录块大小

2 文件系统版本号

3 磁盘上次mount挂载时间


1 存储文件

保存文件a.txt

通用步骤

1 Boot block 查看分区

2 GDT 查看起始位置 和 是否存在空闲inode

不同部分

3 在block bitmap 找到空闲block bitmap 写入为保护数据 标志位置1

4 在inode bitmap 找到空闲inode bitmap 写入文件属性 标志位置1 把data block写入inode 指针


2 查看文件

1 在GDT查看inode table起始位置

2 起始位置+128*inode结点编号 = inode对应位置偏移计算

3 根据指针读取data block地址存储数据


3 删除文件

为什么下载很慢 删除很块?

1 查看Boot block 磁盘分区

2 查看GDT快组描述符表 查看位图

3 找到对应date bitmap位图和inode bitmap位图 都置0

删除完成内容还存在 直至对应内存被新的数据覆盖


文件系统函数

stat和asscess函数

chmod和chown函数

utime和utruncate函数

rename,chdir,getcwd和pathconf函数


递归历遍目录

mkdir和rmidir函数

opendir和readdir函数

telldir和seekdir函数

closedir函数


虚拟文件系统

虚拟文件系统(VFS)是操作系统中的一个抽象层,它为不同的文件系统提供了一个统一的接口。这使得操作系统可以用相同的方式处理多种不同类型的文件系统,如同时处理 ext4、NTFS、FAT 等,而不需要针对每种文件系统编写单独的代码来处理文件操作。


为什么需要虚拟文件系统

经过虚拟文件系统VFS 才能到达驱动层

虚拟文件系统怎么工作的

在虚拟文件层 根据调用函数功能去驱动层调用不同的open函数 打开不同的文件系统

duo和dup2函数

实现利用printf向文件输出数据

dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个file结构体。

dup函数用于复制一个已有的文件描述符

dup2函数也是用于复制文件描述符,但它提供了更多的控制

首先打开一个文件output.txt用于写入,得到文件描述符fd。然后使用dup2函数将标准输出(文件描述符为1)重定向到fd所指向的文件。之后的printf语句的输出将不再显示在终端屏幕上,而是被写入到output.txt文件中。dup2函数在很多场景下用于文件描述符的重定向,比如在进程执行外部命令时,可以将命令的输出重定向到指定的文件或管道,或者在服务器程序中将错误输出重定向到日志文件等。

相关推荐
用户9718356334663 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪4 小时前
linux 拷贝文件或目录到指定的位置
linux
大树8820 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠20 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质21 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush421 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52021 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz21 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理