du -ah 统计目录下各文件及子目录的磁盘占用并以易读单位显示,配合 sort -hr 可从大到小排序识别大户,--max-depth=1 限制深度聚焦一级子项,支持 --exclude 和 grep 过滤提升分析效率。

用 du -ah 统计目录下各文件的大小分布,核心是让每个文件(含子目录)都显示自身占用的磁盘空间,并以易读单位呈现,再配合排序快速识别大小规律。
基础命令:列出所有文件和子目录的大小
du -ah 是最直接的方式:
– -a 强制显示所有文件(不只是目录),包括普通文件、符号链接指向的目标(默认不解析)、隐藏文件;
– -h 按 KiB/MiB/GiB 自动换算,便于肉眼判断数量级。
例如查看当前目录所有项:du -ah .
输出类似:
4.0K ./.bashrc
12M ./log.tar.gz
356M ./data/
1.2G ./backup/
按大小排序,看清分布结构
单独用 du -ah 输出是无序的,需管道传给 sort 才能观察分布:
– 从小到大:du -ah /path | sort -h
– 从大到小(更常用):du -ah /path | sort -hr-h 让 sort 理解 K/M/G 单位,-r 反向排列。这样最大的几个文件或目录会顶在最前面,一眼锁定“大户”。
限制深度,聚焦一级子项
如果只想看目标目录下的“直接子项”(即不深入子目录内部),加 --max-depth=1:du -ah --max-depth=1 /var
这会列出 /var 下每个一级子目录(如 /var/log)和文件的大小,但不会展开 /var/log/syslog 这类二级路径。适合快速定位哪个子目录占空间最多。
排除干扰,提升分析效率
实际使用中常遇到两类干扰:
– 大量小文件冲淡关键信息:可加 grep -E "^[0-9.]+[MG] " 过滤出 MB/G 级别以上的条目;
– 不想统计某类路径(如缓存):用 --exclude='cache' 或 --exclude='/proc' 排除;
– 需要总和参考:末尾加 -c,如 du -ahc --max-depth=1 /home | tail -n1 快速得总计。


















