发布时间:2026/8/18 9:32:45
Linux基础IO与Ext文件系统深度复习:从文件描述符到磁盘存储原理 前言为什么学习IO和文件系统在 Linux 学习过程中很多同学第一次接触文件操作时会觉得fopen()为什么可以打开文件printf()输出到屏幕本质上到底发生了什么open()返回的数字3、4有什么意义删除文件到底删除了什么一个文件的数据究竟保存在哪里这些问题的答案都需要理解 Linux 的基础IO机制和文件系统原理。本文结合两个核心知识模块Linux 基础 IOExt 系列文件系统帮助快速建立完整知识体系应用程序 | | fopen/read/write | 系统调用接口 | | open/read/write | Linux内核 | | 文件系统(ext) | | 磁盘(block/sector)基础IO部分重点包括文件、系统调用、文件描述符、重定向等内容文件系统部分重点包括磁盘寻址、inode、block、Ext文件系统组织方式等。一、Linux中的文件到底是什么1. 狭义理解磁盘上的文件传统理解文件就是存储在磁盘中的数据。磁盘属于外部设备因此文件操作 ↓ 磁盘数据读写 ↓ IO操作也就是说文件操作本质就是输入输出操作。文件并不是只有内容。一个文件由两部分组成文件 | ---- 属性(metadata) | ---- 内容(data)例如ls -l test.txt显示-rw-r--r-- 1 root root 1024 test.txt其中权限文件大小所属用户修改时间都是文件属性。而hello linux属于文件内容。Linux 文件属性和内容是分离管理的这一点在后面的 inode 中非常重要。二、C语言文件IO用户看到的接口我们最开始学习文件操作一般使用FILE *fp fopen(test.txt,w);例如#include stdio.h int main() { FILE *fp fopen(test.txt,w); if(fp NULL) { perror(fopen); return 1; } fprintf(fp,hello linux\n); fclose(fp); return 0; }这里fopen fwrite fread fclose都是 C 标准库提供的接口。它们并不是直接操作磁盘。真实流程fwrite() | ↓ C标准库(libc) | ↓ 系统调用(write) | ↓ Linux内核 | ↓ 文件系统 | ↓ 磁盘文件读写最终依靠的是系统调用而 C 库函数只是对系统调用进行封装方便程序员使用。三、系统调用IOopen/read/writeLinux提供更加底层的文件接口open() read() write() close() lseek()例如写文件#include fcntl.h #include unistd.h #include string.h int main() { int fd open( test.txt, O_WRONLY | O_CREAT, 0644 ); char *msghello syscall\n; write(fd,msg,strlen(msg)); close(fd); return 0; }这里int fd就是文件描述符。四、文件描述符 fdLinux IO核心概念1. fd是什么文件描述符本质是一个小整数。例如int fdopen(test.txt,O_RDONLY); printf(%d\n,fd);可能输出3为什么不是1因为 Linux 默认已经打开三个文件fd含义0stdin 标准输入1stdout 标准输出2stderr 标准错误所以0 - 键盘 1 - 显示器 2 - 显示器 3 - 新打开文件Linux进程默认拥有三个文件描述符标准输入0、标准输出1、标准错误2。2. fd为什么只是数字因为进程内部维护了一张表进程 | files_struct | 文件描述符表 | ----0 --- stdin | ----1 --- stdout | ----2 --- stderr | ----3 --- test.txt所以fd 数组下标拿到fdfd | ↓ 找到文件对象 | ↓ 访问文件文件描述符本质就是进程文件表中的索引。五、Linux重定向原理我们经常使用ls log.txt表示把输出保存到文件。为什么可以做到1. stdout本质也是文件默认stdout(fd1) | ↓ 显示器如果修改stdout(fd1) | ↓ log.txt那么printf(hello);自然进入文件。2. dup2实现重定向代码#include unistd.h #include fcntl.h int main() { int fdopen( log.txt, O_CREAT|O_WRONLY, 0644 ); dup2(fd,1); printf(hello redirect\n); return 0; }执行后printf | stdout(fd1) | log.txt完成输出重定向。shell中的 本质都是修改文件描述符对应关系。六、磁盘如何存储数据文件最终需要保存到磁盘。但是磁盘不是简单的一块空间。1. 扇区 Sector磁盘最基本存储单位Sector通常512 Bytes操作系统访问磁盘时并不是直接使用文件名而是访问磁盘上的地址。七、磁盘寻址CHS与LBA1. CHS寻址早期磁盘C Cylinder H Head S Sector通过柱面 磁头 扇区定位数据。公式LBA C*(磁头数*每磁道扇区数) H*每磁道扇区数 S-1CHS适合早期磁盘但是容量有限。2. LBA寻址现代系统更加喜欢Logical Block Address也就是逻辑地址。把磁盘抽象成sector0 sector1 sector2 sector3 ...类似数组disk[100]访问disk[50]就是访问第50个扇区。操作系统主要使用LBA具体转换由磁盘内部完成。八、为什么需要文件系统如果只有磁盘00000000 00000001 00000002 ...我们不知道哪些数据属于哪个文件文件属性在哪里空闲空间在哪里所以需要文件系统负责管理文件 目录 inode block 空间分配Ext系列文件系统就是 Linux 中经典文件系统之一。九、Ext文件系统核心inode block1. inode保存属性Linux中inode保存文件大小权限用户时间数据块位置例如inode | ---- 文件大小 | ---- 权限 | ---- block地址注意文件名不保存在inode中。文件名属于目录数据。2. block保存内容文件内容Data Block例如hello.txt inode | | block1 block2 block3inode负责找到数据。十、Ext2文件系统结构一个分区格式化以后Block Group ------------- | Super Block | ------------- | GDT | ------------- | BlockBitmap | ------------- | InodeBitmap | ------------- | InodeTable | ------------- | DataBlock | -------------Super Block保存整个文件系统的信息例如block数量inode数量空闲空间文件系统状态超级块损坏会影响整个文件系统。Block Bitmap记录哪些block已经使用。例如11110000表示前4个block占用。Inode Bitmap记录哪些inode可以使用。例如11001000表示部分inode已经分配。Inode Table保存所有inode。例如inode 100 | test.txt属性 inode 101 | main.c属性十一、创建文件时发生了什么执行touch abc系统大概做第一步寻找空闲inodeinode bitmap | ↓ 找到空inode记录abc属性第二步分配数据块找到Data Block第三步建立目录关系目录保存文件名 - inode编号最终abc | inode | block | 数据内容文件系统通过inode和block完成文件管理。十二、软链接与硬链接理解硬链接不是一个独立的文件本质是一组新的文件名和目标inode number的映射关系即多了一个新的文件名指向目标文件作用对文件进行备份多个名字指向同一个inodefile1 | inode100 | data file2 | inode100特点inode相同删除一个名字不影响数据查看ls -li使用ln code.c code.c.back 之后删了code.c再cat code.c.cback还是可以看到code.c内容软链接类似Windows快捷方式link | 指向路径 | file创建ln -s target link特点有自己的inode保存目标路径使用一个文件叫a.out 要运行它输入它的路径: ln -s .bin/exe/execute/a.out exe 这样以后输入exe可以直接运行a.out删除unlink exe十三、总结基础IO核心记住FILE* ↓ 库函数 ↓ 系统调用 ↓ fd ↓ 文件对象 ↓ 文件系统 ↓ 磁盘重点fopen是库函数open是系统调用fd是数组下标0/1/2分别对应stdin/stdout/stderr重定向本质是修改fd映射Ext文件系统核心记住文件 inode(属性) block(内容)磁盘sector ↓ block ↓ filesystem ↓ fileExtSuper Block GDT Bitmap inode table Data Block最终理解Linux 文件系统设计思想可以总结为应用程序看到的是文件内核管理的是文件描述符文件系统管理的是inode和block而磁盘最终管理的是sector。理解这条链路基础IO和Ext文件系统的大部分知识点都会串起来。

相关新闻

2026/8/18 9:32:45

智能手机变身信号发生器:原理、选型与实战应用

1. 从手机到信号源:一个被低估的硬件潜力 如果你手头正好有一部闲置的旧手机,或者想把手里的主力机变成一个便携的电子实验工具,那么“将智能手机变成信号发生器”这个想法绝对值得一试。这听起来可能有点极客,但背后的原理其实很…

2026/8/18 9:32:45

芋道源码免费版:企业级后台一次装好的清单

芋道源码免费版:企业级后台一次装好的清单 【免费下载链接】ruoyi-spring-boot-all 芋道源码(无遮羞布版) 项目地址: https://gitcode.com/gh_mirrors/ru/ruoyi-spring-boot-all 去年夏天,同事小林神秘兮兮地告诉我,他花了199块买了一…

2026/8/18 10:33:06

【信息科学与工程学】【制造工程】 第一百八十八篇 机床体系 01 CNC数控机床

CNC数控六轴/八轴机床体系,特别是控制系统领域,结合零件/设备/制造/加工等多维度的数学建模详细表格。 编号 学科领域 核心知识点与数学方程式列表(含数学表达式、多项式、矩阵、迭代方程式、集合方程式)及参数列表及参数的数值(含矩阵、集合、列、表、堆、栈、几何、代…

2026/8/18 10:33:06

GTA5线上小助手完整教程:从零搭建到进阶玩法的7个实用技巧

GTA5线上小助手完整教程:从零搭建到进阶玩法的7个实用技巧 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools GTA5线上小助手是一款完全免费且开源的GTA5线上模式辅助工具,它把角色…

2026/8/18 10:28:06

Tomcat升级实战指南:从评估到验证的全流程解析

1. 项目概述:为什么我们需要认真对待Tomcat升级? 在Java Web应用开发与运维的日常里,Tomcat升级常常被看作一个“脏活累活”。很多团队习惯于“能用就不动”,直到遇到某个安全漏洞公告,或者新项目要求使用新版本的Java…

2026/8/17 10:49:52

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 6:58:27

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/18 0:02:05

Qwen3.8-27B本地部署实战:17GB内存运行270亿参数大模型

1. 这篇文章真正要解决的问题 你是否曾对动辄需要上百GB显存才能运行的百亿参数大模型望而却步?是否觉得在个人电脑上部署一个功能强大的语言模型是天方夜谭?最近,通义千问团队发布的 Qwen3.8-27B 模型,宣称仅需 17GB 内存即可在本…

2026/8/18 0:02:05

ME3169 36V,8A,180KHz 恒压Buck DC-DC 转换器

概述ME3169 是一款180KHz,PWM 模式恒压Buck DC-DC 转换器,8V 到36V 宽工作电压范围,低纹波,内置低导通电阻功率MOS。ME3169 内置环路补偿电路,可以减少外围元器件数量。内部设计有恒压环路,可以通过外部电阻…

2026/8/17 15:07:41

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/17 17:27:06

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/18 7:12:40

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…