【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函数在很多场景下用于文件描述符的重定向,比如在进程执行外部命令时,可以将命令的输出重定向到指定的文件或管道,或者在服务器程序中将错误输出重定向到日志文件等。

相关推荐
Dovis(誓平步青云)9 分钟前
《简易制作 Linux Shell:详细分析原理、设计与实践》
linux·运维·服务器
weixin_3077791312 分钟前
在Linux服务器上使用Jenkins和Poetry实现Python项目自动化
linux·开发语言·python·自动化·jenkins
爱宇阳25 分钟前
Linux 教程:如何查看服务器当前目录中的文件
linux·运维·github
天才奇男子30 分钟前
用户管理,权限管理
linux·云原生
wheeldown30 分钟前
【Linux】Linux 进程通信:System V 共享内存(最快方案)C++ 封装实战 + 通信案例,4 类经典 Bug 快速修复
linux·运维·服务器·开发语言
Ching·1 小时前
linux系统编程(十②)RK3568 socket之 TCP 客户端的实现
linux·tcp/ip·rk3568
NiKo_W1 小时前
Linux 线程控制
linux·数据结构·内核·线程·进程·线程控制
迎風吹頭髮1 小时前
Linux内核架构浅谈44-Linux slab分配器:通用缓存与专用缓存的创建与使用
linux·spring·架构
AORO20251 小时前
防爆手机与普通手机有什么区别?防爆手机哪个牌子好?
运维·服务器·网络·5g·智能手机·信息与通信
爱倒腾的老唐1 小时前
29、构建可视化日志管理服务器
运维·服务器