为什么同内容的两个目录,ls和du显示的大小不一样?

前言:在进行目录迁移时,很容易遇到一个有趣的现象:明明是内容完全一致的两个目录,用ls/ll查看目录本身的大小时,数值并不相同;但用du -sh统计目录下文件的总大小,结果却完全一致。这背后藏着“目录元数据”的设计逻辑——今天从原理、历史到比喻,把这个知识点讲透。

先理清两个核心概念

要解释这个现象,得先区分两个关键概念:

  • 目录的“元数据大小”:目录不是“装文件的容器”,而是一份文件索引清单(专业称“元数据”),它只记录“当前目录下有哪些文件/子目录”,不存储文件内容。
    系统会用“磁盘块(默认4096字节)”来存放这份清单,目录显示的大小=占用的磁盘块数 × 4096字节。
  • 目录的“实际文件大小”du -sh统计的是目录下所有文件的内容总大小,和目录本身的“清单”大小毫无关系。

拓展:目录元数据的原理与历史

1. 元数据的底层原理:它到底存了啥?

目录的元数据,本质是一张文件名→inode号的映射表——每一条目录项,都会存两个核心信息:

  • 文件名:你看到的文件/子目录名称;
  • inode号:文件的“系统身份证号”(系统会通过inode号,找到文件的实际存储位置、大小、权限等关键信息)。

简单说:目录的作用是“帮你通过文件名找到inode号,再通过inode号定位到文件内容”,而这份“映射表”就存在磁盘块里——每块磁盘(默认4096字节)能存多少条目录项,是固定的。

当你频繁在目录里增删文件时,“映射表”会产生“碎片”:比如删除文件后,原来的目录项位置不会立即回收,新文件可能存在新的磁盘块里,久而久之,目录就会占用更多磁盘块(相当于笔记本写了很多页,却有不少空白行)。

2. 元数据的历史:从“简陋清单”到“智能目录”

早期的文件系统(比如DOS时代的FAT),目录元数据的设计很简陋:

  • 每个目录项是固定32字节,强制存文件名(8字符)+扩展名(3字符),最多只能存有限的文件;
  • 增删文件后,目录项的“碎片”无法自动整理,旧目录很容易占用更多磁盘空间。

后来UNIX的UFS、Linux的EXT系列文件系统,逐步优化了目录元数据:

  • EXT2:把目录做成“线性列表”,支持更长的文件名,磁盘块按需分配,但删改多了仍会有碎片;
  • EXT3:增加了日志功能,减少元数据损坏的概率,但目录存储逻辑没变;
  • EXT4:引入“哈希目录(HTree)”,处理上千个文件的大目录时更高效,还能减少碎片——但如果目录经历了频繁增删,依然会残留磁盘块占用(这就是旧目录元数据更大的根源)。

用“笔记本”比喻,秒懂差异

把目录想象成“记录文件清单的笔记本”,就能直观理解元数据的差异:

  • 磁盘块(4096字节)= 笔记本的单页纸大小(每页能写固定数量的“文件名+inode号”)。

对应迁移场景里的两个目录:

  • 新目录是“整洁的新笔记本”
    刚迁移的目录,“映射表”排版规整,只用3页纸就写全了所有目录项,所以它的“厚度”是:3页 × 4096字节 = 12288

  • 旧目录是“用旧的笔记本”
    旧目录经历过多次增删,“映射表”有很多碎片,写这份清单用了8页纸,所以它的“厚度”是:8页 × 4096字节 = 32768

实际命令验证:和比喻完全对应

迁移后执行以下命令,就能看到和原理匹配的结果(可搭配实际截图查看):

1. 查看目录的“笔记本厚度”(元数据大小)

执行命令:

ll -d 迁移后的新目录 原旧目录

输出示例:

drwxrwxr-x 4 用户 用户 12288 1月 14 00:00 迁移后的新目录/ drwxrwxr-x 4 用户 用户 32768 1月 14 00:00 原旧目录/

2. 查看文件的“实际内容总大小”

执行命令:

du-sh 迁移后的新目录 原旧目录

输出示例:

9.4G 迁移后的新目录 9.4G 原旧目录

不管“笔记本”多厚,里面记录的文件内容是完全一致的,所以du统计的总大小完全相同。

总结

  • ls/ll显示的是目录元数据的大小(相当于“笔记本的厚度”),由目录项占用的磁盘块数决定;
  • du -sh显示的是文件内容的总大小(相当于“笔记本里记录的文件实际体积”),与目录元数据无关。

以后遇到同内容目录大小显示不一致的情况,不用疑惑——这只是“文件索引清单”的排版碎片导致的,文件内容并没有差异~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1160060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python_uniapp-心理健康测评服务微信小程序的设计与实现

文章目录心理健康测评服务微信小程序的设计与实现摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!心理健康测评服务微信小程序的设计与实现摘要 随着社会压力增大,心理健康问题日益…

【Spring AI Alibaba】⑦ 为什么 Spring AI Alibaba 选择用提示词而非代码?揭秘框架设计背后的工程智慧

📖目录1. 引言:当"食谱"比"代码"更可靠2. 为什么用提示词?从"食谱"到"代码"的工程进化2.1 提示词 AI 交互的"食谱"2.2 为什么这不违背"确定性"原则?3. 源码深度解析…

Python_uniapp-心理咨询服务平台微信小程序的设计与实现

文章目录摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着社会节奏加快,心理健康问题日益受到关注。基于Python和Uniapp框架设计的心理咨询服务平台微信小程序&#xff0c…

基于霜冰优化算法改进DBSCAN聚类附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

对比学习搞定乡村儿科影像诊断

📝 博客主页:Jax的CSDN主页 对比学习:破解乡村儿科影像诊断的“最后一公里”难题目录对比学习:破解乡村儿科影像诊断的“最后一公里”难题 引言:乡村儿科影像诊断的“沉默危机” 一、痛点深挖:乡村儿科影像…

Spring Boot 封神之路:从基础到架构,一篇吃透所有核心知识点

一&#xff1a;搭建一个SpringBoot项目1&#xff1a;项目搭建1&#xff1a;创建一个空项目2&#xff1a;创建一个Maven模块3&#xff1a;添加Parent标签<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent&l…

Python_uniapp-新冠疫苗预约小程序

文章目录新冠疫苗预约小程序摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;新冠疫苗预约小程序摘要 新冠疫苗预约小程序基于Python和Uniapp技术栈开发&#xff0c;旨在为用户提供便捷的疫苗预…

AI原生应用领域实体识别的分布式计算实现

AI原生应用领域实体识别的分布式计算实现 关键词&#xff1a;AI原生应用、实体识别、分布式计算、大语言模型、并行计算框架 摘要&#xff1a;本文围绕AI原生应用中实体识别的分布式计算实现展开&#xff0c;从核心概念到实战落地&#xff0c;逐步解析“为什么需要分布式”“如…

【奖励到账】CSDN AI 社区镜像创作激励活动第二批奖励正式发放!

家人们注意啦&#xff01;CSDN AI 社区镜像创作激励活动第二批现金奖励已正式发放&#xff0c;CSDN再次新增开发者 “技术变现” 赛道&#xff0c;还没参与的你&#xff0c;速来 get 这份躺赢攻略&#xff0c;下一批奖励名单说不定就有你&#xff01; 1月14日&#xff1a;第二…

语音识别IC分类,语音识别芯片的工作原理

一、语音识别芯片的概念 语音识别芯片&#xff0c;也叫语音识别集成电路&#xff0c;是一种集声音存储、播放、录音及语音识别功能于一体的专用芯片。语音识别IC的核心功能在于实现语音识别&#xff0c;即让机器能够“听懂”人类的语音指令&#xff0c;并据此执行相应操作&…

【精品资料鉴赏】咨询顾问咨询公司管理咨询方法论业务流程优化再造咨询顾问能力培训提升【建议收藏】

绑定资源目录&#xff1a;IBM 管理咨询顾问能力进阶手册&#xff08;187页&#xff09;.pptx IBM-某大型集团流程优化与系统实施项目&#xff08;120页&#xff09;.pptx IBM业务架构咨询&#xff1a;制造业核心业务流程框架及解决方案&#xff08;115页&#xff09;.pptx IBM企…

python基于flask框架的企业办公OA系统设计与开发

目录企业办公OA系统设计与开发摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;企业办公OA系统设计与开发摘要 基于Flask框架的企业办公OA系统旨在提升企业内部管理效率&#xff0c;实现…

Python_uniapp-校园二手交易平台小程序 卖家

文章目录校园二手交易平台小程序&#xff08;卖家端&#xff09;设计摘要系统设计与实现的思路主要技术与实现手段源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;校园二手交易平台小程序&#xff08;卖家端&#xff09;设计摘要 功能模块…

Halcon 开运算 获取网格线中的横线和竖线

注意&#xff1a;此文未设置vip免费功能&#xff0c;如若显示&#xff0c;为csdn自动设置&#xff0c;是挺烦人的。 自己画一蟹线段&#xff1a; opening_rectangle1 之所以能获取网格中的竖线&#xff0c;是因为开运算具有“保持与结构元素同向特征&#xff0c;滤除异向特征”…

CMamke使用小结

1.VSCode预设CMake正常启用预设文件如下图所示如果未按照预期编译可以修改预设名称&#xff0c;修改之后重新编译

线控转向失效下的容错差动转向控制探索

线控转向失效下的容错差动转向控制 以四轮轮毂电机驱动智能电动汽车为研究对象&#xff0c;针对线控转向系统执行机构失效时的轨迹跟踪和横摆稳定性协同控制问题&#xff0c;提出一种基于差动转向与直接横摆力矩协同的容错控制方法。 该方法采用分层控制架构&#xff0c;上层控…

python基于flask框架的企业员工绩效工资管理系统设计与实现

目录摘要关键词开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着企业规模的扩大和管理的复杂化&#xff0c;传统的人工绩效工资管理方式已难以满足高效、准确的需求。基于Python的F…

python基于flask框架的数学课程测试考试系统

目录基于Flask框架的数学课程测试考试系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Flask框架的数学课程测试考试系统摘要 该系统采用Python的Flask框架开发&#xff0c;旨在…

架构设计 5 大核心要素

不管是 高并发电商系统金融级交易平台企业级中后台系统 最终都绕不开这 5 个硬指标&#xff1a;高性能 / 高可用 / 伸缩性 / 可扩展性 / 安全性它们不是“可选项”&#xff0c;而是任何成熟系统的必答题。 下面逐一拆解 &#x1f447;1️⃣ 高性能架构&#xff1a;系统的「速度…

DeepSeek R1技术全书:86页详解大模型训练管线,附完整复现指南

DeepSeek R1论文从22页大幅扩展至86页&#xff0c;新增完整训练管线拆解、20多个评测基准数据及详细技术附录。论文首次公开Dev1-Dev3三阶段训练过程&#xff0c;引入人类基准对比&#xff0c;并坦承MCTS和PRM等热门技术路线的失败。此次更新发生在R1发布一周年前夕&#xff0c…