Linux之ext文件系统
1.目录与文件名我们再使用linux中用的都是文件名而不是inode,那么这是怎么实现的???inode 内部不存储文件名inode 只保存文件元数据权限、大小、时间戳、磁盘块指针。文件名存放在目录文件的数据块中。目录本质依然是文件。 普通文件的数据块存放业务数据目录文件的数据块专门存储一张映射表文件名 ---- inode编号。硬链接原理依托这个结构 多个不同文件名指向同一个 inode就是硬链接。删除文件rm本质是删掉目录里一条文件名-inode映射只有 inode 引用计数归 0磁盘数据才会被回收。.与..目录创建时自动写入两条记录.指向自身 inode、..指向父目录 inode也就是内核自动维护的目录硬链接。用户无法手动创建目录硬链接防止环路死循环。通俗理解inode 是文件本体目录里的文件名只是找到本体的 “标签”。一个本体可以贴多个标签硬链接。关键问题目录 r/w/x 权限特殊含义普通文件权限r读取内容w修改内容x执行文件目录权限完全不一样r 权限可以读取目录内的映射表可以执行 ls看到有哪些文件名w 权限允许修改目录内映射表 也就是新建文件、删除文件、重命名文件修改映射条目x 权限允许穿越目录进入目录访问目录内文件对应的 inode# 给所有者增加执行权限 chmod ux test.sh # 取消其他用户写权限 chmod o-w log.txt # 设置所有人只读 chmod ar file # 用户读写组读其他无权限 chmod urw,gr,o fileeg执行命令cat test.cshell 接收字符串test.c操作系统去当前目录文件的数据块查找映射表匹配字符串test.c拿到对应的 inode 号根据 inode 编号在磁盘找到对应的 inode 结构体读取 inode 里的数据块指针找到磁盘数据块将数据读出打印到屏幕。#include stdio.h #include string.h #include stdlib.h #include dirent.h #include sys/types.h #include unistd.h int main(int argc, char *argv[]) { if (argc ! 2) { fprintf(stderr, Usage: %s directory\n, argv[0]); exit(EXIT_FAILURE); } DIR *dir opendir(argv[1]); if (!dir) { perror(opendir); exit(EXIT_FAILURE); } struct dirent *entry; while ((entry readdir(dir)) ! NULL) { // 跳过 . 和 .. if (strcmp(entry-d_name, .) 0 || strcmp(entry-d_name, ..) 0) { continue; } printf(Filename: %s, Inode: %lu\n, entry-d_name, (unsigned long)entry-d_ino); } closedir(dir); return 0; }2.路径解析问题打开当前工作目录文件查看当前工作目录文件的内容?当前工作目录不也是文件吗我们访问当前工作目录不也是只知道当前工作目录的文件名吗要访问它不也得知道当前工作目录的inode吗答案1所以也要打开当前工作目录的上级目录额....上级目录不也是目录吗不还是上面的问题吗答案2所以类似递归需要把路径中所有的目录全部解析出口是/根目录。最终答案3而实际上任何文件都有路径访问目标文件什么是路径解析当我们调用open(/a/b/c.txt)内核无法直接通过字符串找到文件必须逐层拆解路径、逐级查询目录这个过程就是路径解析。完整流程示例/home/user/test.log定位根目录/的 inode读取根目录的数据块遍历目录映射表查找名称home得到 home 目录 inode读取 home 目录的数据块查找user拿到 user 目录 inode读取 user 目录数据块查找test.log获取目标文件 inode使用 inode 访问文件元数据与文件数据块。然而每次找文件位置都这样是很不方便的,会花费大量的时间,所以系统会将文件路径缓存起来,但是很多很多的缓存就要先描述再组织3.路径缓存dentry 全称 Directory Entry目录项。磁盘上的 dentry目录文件数据块内文件名-inode号的原始记录。内存中的 dentry 缓存内核把常用目录项加载进内存构建内存哈希表。struct dentry { atomic_t d_count; unsigned int d_flags; /* protected by d_lock */ spinlock_t d_lock; /* per dentry lock */ struct inode *d_inode; /* Where the name belongs to - NULL is * negative */ /* * The next three fields are touched by __d_lookup. Place them here * so they all fit in a cache line. */ struct hlist_node d_hash; /* lookup hash list */ struct dentry *d_parent; /* parent directory */ struct qstr d_name; struct list_head d_lru; /* LRU list */ /* * d_child and d_rcu can share memory */ union { struct list_head d_child; /* child of parent list */ struct rcu_head d_rcu; } d_u; struct list_head d_subdirs; /* our children */ struct list_head d_alias; /* inode alias list */ unsigned long d_time; /* used by d_revalidate */ struct dentry_operations *d_op; struct super_block *d_sb; /* The root of the dentry tree */ void *d_fsdata; /* fs-specific data */ #ifdef CONFIG_PROFILING struct dcookie_struct *d_cookie; /* cookie, if any */ #endif int d_mounted; unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* small names */ };缓存带来的优化下次访问同一文件不需要再次读取磁盘目录块 直接在内存 dentry 哈希表中匹配文件名快速拿到 inode省去大量磁盘 IO。dentry 生命周期活跃文件dentry 长期驻留内存内存紧张时内核回收不常用的 dentry 缓存文件删除 / 重命名对应 dentry 失效。重谈inode编号和块号a.inode编号和块号:不是组内有效,是整个分区内有效,唯一(inode)b.再一个分区内,一个文件系统内部有多少个数据块,inode是固定的,提前设计好的根据块号和inode通过计算可以找到相应的组如果我要访问我当前的文件内容分或者属性,首先要打开当前目录,访问当问目录的数据块eg:以读取/home/test/log.txt举例从根目录/开始找到根目录 inode读取根目录 inode 对应目录数据块目录块内存放一张「文件名 → inode 编号」映射表dentry 原始磁盘存储形式在根目录块中查找名称home拿到home目录 inode读取 home 目录 inode 的数据块查找test拿到 test 目录 inode读取 test 目录数据块查找log.txt得到目标文件 inode 编号读取log.txt的 inodeinode 中存放文件元数据大小、权限、时间inode 内部磁盘块指针指向存放真实文本内容的数据块读取数据块最终拿到文件内容。1. 你怎么知道文件属于哪一个文件系统super_block超级块每一块磁盘分区被挂载后内核会创建一个超级块实例struct super_block代表一个独立文件系统ext4/xfs/tmpfs 等。完整链路挂载流程mount命令读取分区超级块在内核生成super_block对象关联关系inode-i_sb每个 inode 内部自带指针指向所属文件系统的超级块dentry-d_inode→inode→super_blockstruct file通过 dentry/inode 最终可以追溯到super_block。超级块记录信息文件系统类型ext4、tmpfs、btrfs挂载点、块大小、最大 inode 编号、文件系统专属操作函数集用户态验证方式statfs()系统调用可以获取文件所在文件系统信息命令df 文件路径、mount查看挂载列表。inode 绑定 super_block顺着 inode 就能定位文件归属的文件系统。2. 存储大文件问题问题本质inode 不直接存储文件内容只保存元数据inode 中存放磁盘块指针用来找到存放文件真实数据的磁盘块。 ext 经典三级索引模型直接块直接指向数据块适合小文件寻址速度最快一级间接块块内存放一批数据块编号二级间接块指向一级间接块列表三级间接块超大文件使用#define EXT2_NDIR_BLOCKS 12 #define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS #define EXT2_DIND_BLOCK (EXT2_IND_BLOCK 1) #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK 1) #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK 1)硬链接硬链接是什么我们观察到他们的inode编号是一样的,也就是说明,这两个文件其实是同一个文件mylog就是原来文件的别名,所以建立硬链接的本质就是再当前目录下新建一个新的字符串(文件名)和目标文件的映射关系蓝色框内就是说明有几个文件指向他为什么要有??删除文件要删除文件名和inode的映射关系,所以硬链接数为1,时删除文件才真正把文件删除1.删除旧备份不会损坏现存数据每日轮换备份示例保留最近 7 天备份。 当需要清理最旧一天备份时 我们只需要删除旧备份目录下的所有硬链接unlink。 只要其他备份快照依然持有 inode 硬链接计数磁盘上真实文件数据不会被删除。 完美实现滚动清理旧备份不会误删其他快照里的文件。现在将其删除但是不用害怕,文件的备份依然存在为什么目录的硬链接是2,普通文件硬链接是11. 普通文件log链接数 1执行touch log只产生1 条 dentry当前目录下的文件名log。 没有额外名字指向这个 inode所以计数 1。 只有手动ln log log_hard创建硬链接数值才会上涨。2. 新建目录dir链接数 2mkdir dir自动生成两个 dentry 指向 dir 的 inodedir上层目录homework里的目录名.dir 目录内部的当前目录符号。所以刚创建完毕链接计数直接是 2。我们再dir下面在创建ddir发现文件dir的硬链接变多了,因为ddir的隐藏文件..是dir的硬链接所以. .. 本质上是硬链接硬链接不能给目录建立,防止用户行程环形路径,进入死循环.软连接ln -s test.c test-soft是什么软连接是一个独立的文件文件内容属性软连接文件的内容存的是指向目标文件的路径为什么现在我的可执行文件myexe再很深的目录下面这样执行就不方便所以我们可以采用软连接,达到便捷的效果软连接类似于windows下面的快捷方式

相关新闻

AI写作辅助工具:从选题到降重的全流程解析

AI写作辅助工具:从选题到降重的全流程解析

1. 项目概述:AI写作辅助工具的实战价值作为一名在学术写作领域深耕多年的从业者,我见证了无数学生和研究者为论文选题和降重问题所困扰。最近测试了市面上主流的9个AI写作平台,发现现代AI技术已经能提供从智能选题到论文优化的完整解决方案。…

2026/7/31 22:31:37阅读更多 →
为什么你的电脑需要硬件监控?LibreHardwareMonitor免费开源解决方案深度解析

为什么你的电脑需要硬件监控?LibreHardwareMonitor免费开源解决方案深度解析

为什么你的电脑需要硬件监控?LibreHardwareMonitor免费开源解决方案深度解析 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of your co…

2026/7/31 22:31:37阅读更多 →
华为MetaERP SAP的成本核算以 FI/CO实时集成 为核心,业务发生时自动生成财务与管理会计凭证。针对大卡车生产(BOM层级明确),三种方法的核心差异在于:标准成本法(价格控制=S):所有交

华为MetaERP SAP的成本核算以 FI/CO实时集成 为核心,业务发生时自动生成财务与管理会计凭证。针对大卡车生产(BOM层级明确),三种方法的核心差异在于:标准成本法(价格控制=S):所有交

SAP的成本核算以 FI/CO实时集成 为核心,业务发生时自动生成财务与管理会计凭证。针对大卡车生产(BOM层级明确),三种方法的核心差异在于:标准成本法(价格控制S):所有交易按预设标准价…

2026/7/31 22:31:37阅读更多 →
2026 年商用清洁机器人选型参考:技术维度与品牌能力梳理

2026 年商用清洁机器人选型参考:技术维度与品牌能力梳理

摘要 2026 年,商用清洁机器人和工业清洁设备的技术路线趋于分化,不同品牌在感知方案、无人化程度和服务网络上的能力差异逐步拉大。本文从清洁效率、无人化能力、感知定位、续航补能、数字化运维和服务保障六个维度出发,对当前智能清洁设备市…

2026/7/31 23:40:03阅读更多 →
2026 年 GEO 服务商选型参考:十家服务商能力梳理与评估维度

2026 年 GEO 服务商选型参考:十家服务商能力梳理与评估维度

面向市场负责人的 GEO 服务商选型框架,梳理行业能力维度与服务商图谱,供决策参考。 一、AI 搜索时代,品牌面对的新命题 2026 年,用户的检索行为正在发生结构性变化。DeepSeek、豆包、通义千问、文心一言、Kimi、腾讯元宝&#xf…

2026/7/31 23:40:03阅读更多 →
2026京津冀律所财税优化从哪起步?先把收入、成本与提成算清楚

2026京津冀律所财税优化从哪起步?先把收入、成本与提成算清楚

北京的办公成本年涨年高,天津的分所业务量稳步爬升,河北的案源结构正在迭代——这是2026年京津冀三地律所管理者共同面对的经营图景。业务在增长,财务管理能不能跟得上,正在成为拉开律所之间经营差距的隐形分水岭。律所财税优化之…

2026/7/31 23:40:03阅读更多 →
5分钟快速备份QQ空间历史说说的终极指南:GetQzonehistory免费工具使用教程

5分钟快速备份QQ空间历史说说的终极指南:GetQzonehistory免费工具使用教程

5分钟快速备份QQ空间历史说说的终极指南:GetQzonehistory免费工具使用教程 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经担心过在QQ空间里发布的那些珍贵说说会…

2026/7/31 23:40:03阅读更多 →
2026年唐山AI数字员工定制:为企业打造专属智能劳动力解决方案

2026年唐山AI数字员工定制:为企业打造专属智能劳动力解决方案

在当今数字化飞速发展的时代,河北实体企业面临着诸多困境。根据普华永道2026年的市场调研数据显示,超70%的河北实体企业反映缺乏有效的线上获客渠道,超过60%的企业因没有专业数字化运营团队而在数字化转型中举步维艰,近80%的企业遭…

2026/7/31 23:40:03阅读更多 →
3步彻底解决Windows 11个性化设置崩溃:ExplorerPatcher深度修复指南

3步彻底解决Windows 11个性化设置崩溃:ExplorerPatcher深度修复指南

3步彻底解决Windows 11个性化设置崩溃:ExplorerPatcher深度修复指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher ExplorerPatch…

2026/7/31 23:38:03阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/31 20:44:05阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/31 17:41:43阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/31 20:44:05阅读更多 →
物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:40阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:41阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/31 0:49:33阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/31 5:08:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/31 16:02:17阅读更多 →