news 2026/6/6 17:02:29

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为什么同内容的两个目录,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显示的是文件内容的总大小(相当于“笔记本里记录的文件实际体积”),与目录元数据无关。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 1:15:39

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

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

作者头像 李华
网站建设 2026/6/6 3:50:20

Qt源码EQ曲线升级版:代码精良,注释详尽

Qt源码~~EQ曲线升级版 代码写的不错,注释也很详细了 概述 AudioEffectController V2.0 是一个基于Qt框架开发的音频效果控制器,专门用于实现专业的音频均衡处理。该系统通过图形化界面提供直观的EQ曲线调节功能,支持…

作者头像 李华
网站建设 2026/6/5 12:25:14

Redis 集群在大数据分布式处理中的应用实践

Redis 集群在大数据分布式处理中的应用实践 关键词:Redis 集群、大数据、分布式处理、分片存储、高可用、一致性哈希、缓存优化 摘要:在大数据时代,海量数据的高效存储与低延迟访问是技术挑战的核心。Redis 作为内存数据库的“速度之王”&…

作者头像 李华
网站建设 2026/6/5 12:56:57

【模板】最小生成树(洛谷P3366)

题目描述如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。输入格式第一行包含两个整数 N,M,表示该图共有 N 个结点和 M 条无向边。接下来 M 行每行包含三个整数 Xi​,Yi​,Zi​,表示有一条…

作者头像 李华
网站建设 2026/6/4 17:28:45

登上Nature子刊的捷径:LPJ模型+NPP模拟+气候响应全流程

随着全球气候变化的日益严峻,理解和预测植被生产力的变化变得尤为重要。此次主要目的是深入探讨植被净初级生产力(NPP)的模拟、驱动力分析及其气候变化响应,利用LPJ模型为研究工具,帮助学员掌握从GPP到NPP、NEP/NEE等关…

作者头像 李华
网站建设 2026/5/29 7:03:30

R语言的贝叶斯网络模型的实践

在现代的生态、环境以及地学研究中,变量和变量间的因果关系推断占据了非常重要的地位。在实践中,变量间的因果关系研究往往求助于昂贵的实验,但所得结果又经常与天然环境中的实际因果联系相差甚远。统计学方法是研究天然环境中变量间关系的好…

作者头像 李华