du -h --max-depth=1 是排查磁盘空间占用的首选命令,仅统计当前目录下一级子项,配合 sort -hr 可快速定位最大占用者,必要时用 --exclude 过滤干扰项并注意跨文件系统问题。

只看当前目录下的一级子项,别钻太深
查磁盘告警时最常卡在“到底哪个子目录吃掉了空间”,du -h --max-depth=1就是第一反应命令。它只统计当前目录下的直接子目录和文件,不递归进深层嵌套,避免输出几百行或卡住。
-
--max-depth=1是关键:限制只到一级,比如在/var下执行,你会看到/var/log、/var/cache各占多少,但不会展开/var/log/journal/20260614 - 旧版 coreutils 不支持
--max-depth?用-d 1替代,效果完全一样 - 隐藏目录(如
.docker、.cache)默认会被包含;想排除就得加--exclude='.?*'
按大小倒序排列,一眼揪出最大嫌疑
原始输出是乱序的,得靠 sort 排序才能快速定位。直接管道接 sort -hr,最大的排最上面:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
du -h --max-depth=1 | sort -hr
-
-h和sort -h必须配对:前者让du输出带单位(KB/MB/GB),后者才能正确解析大小排序 - 如果只想看前 5 个最大的,加
| head -n 5,避免刷屏 - 注意:
sort -hr在某些极老系统上不支持-h,可退化为sort -nr(按纯数字倒序),但需确保du输出单位统一(比如全用-k)
权限不足时 du 仍能给出总大小,但会报错
非 root 用户查 /var/log/journal 或 /root 时,常见 Permission denied 错误。这不是失败,而是 du 默认忽略错误继续统计——总大小通常还是准的。
- 错误信息会混在输出里,干扰阅读;加
2>/dev/null可屏蔽,但会同时丢掉真实错误(比如路径不存在) - 真正需要精确值时,才加
sudo;日常排查先看大概,再针对性提权 - 如果加了
-D或--dereference-args,权限问题会更频繁触发,一般不用
排除干扰项,让结果更贴近真实业务占用
日志、缓存、依赖包这些不是业务数据,却常占大头。用 --exclude 过滤后,才能看清“人写的代码”或“用户上传的文件”实际占多少。
- 排除所有日志:
du -sh --exclude='*.log' /var - 排除多个模式要重复写:
--exclude='node_modules' --exclude='__pycache__' -
--exclude只支持 shell 通配符,不支持正则;想排除带空格的路径?得用引号包裹整个模式,比如--exclude='build output'
du 默认会跨分区统计,但 df 只看挂载点。如果目标目录下有挂载点(比如 /var/lib/docker 下挂了单独的 LVM),du 算出来的大小和 df 对不上是正常的——这时得加 -x 参数限定单文件系统。

















