du -sh 是统计目录总大小的首选命令,因其简洁、直观且不易出错:-s 输出单行总和,-h 自动适配K/M/G单位,避免冗长输出和单位换算困扰。

直接看总大小就用 du -sh,别加多余参数——这是最常用、最不容易出错的写法。
为什么 du -sh 是首选
很多人一上来就敲 du 不带参数,结果看到一堆数字单位是“块”(512 字节或 1KB),根本没法快速判断哪个目录大。加 -h 就能自动转成 K/M/G,加 -s 就只输出一行总和,不刷屏、不干扰判断。
-
du默认递归统计所有子目录,但输出冗长;-s把它压成单行 -
-h不是简单除以 1024——它会选最合适的单位(比如 1500KB → 1.5M),比-k或-m更直观 - 注意:
du统计的是实际磁盘占用(含稀疏文件、硬链接重复计数等),不是ls -lh显示的逻辑大小
du -sh * 查当前目录下各子项大小
想快速知道当前目录里哪些文件夹吃空间,du -sh * 比 du -sh . 实用得多——它列出每个一级子目录/文件的大小,方便定位大户。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 星号
*由 shell 展开,不会匹配隐藏文件(如.git);要包含它们得写du -sh .[!.]* *或用shopt -s dotglob - 如果某子目录权限不足(比如被其他用户 chmod 700),
du会报Permission denied并跳过——这不是命令失败,只是跳过统计,总大小仍可信 - 输出顺序是字母序,不是按大小排;真要找最大的,后面接
| sort -hr
--max-depth=1 和 -a 的组合容易踩坑
有人搜到 du -ah --max-depth=1,以为能“干净列出当前层所有东西”,但实际效果常不如预期。
-
--max-depth=1只控制递归深度,-a会让du把当前层每个文件都单独列出来——目录本身大小 + 里面所有文件大小,数值会重复计算 - 比如
logs/目录下有 10 个日志文件,du -ah --max-depth=1 logs/既显示logs/总大小,又显示每个logs/*.log大小,加起来远超真实值 - 真正想“只看当前层目录大小、不含子目录内容”,该用
du -shS *——-S(--separate-dirs)才保证每个目录大小不含其子目录
排除特定路径避免误统计
某些目录(如 /proc、/sys、挂载点、Docker overlay)不能/不该被 du 扫描,否则要么卡住,要么报错或结果失真。
- 用
--exclude过滤:例如du -sh --exclude='node_modules' --exclude='.git' project/ - 跨文件系统时加
-x(--one-file-system),防止du误入 /mnt 下的 NFS 或容器卷 - 遇到符号链接,默认不追踪源;若需统计链接指向的真实路径,加
-L,但要小心循环链接导致无限递归
真正麻烦的不是命令怎么写,而是理解 du 统计的是“磁盘块占用”——硬链接算多次、稀疏文件可能显示为 0、删除后未释放的空间仍计入。查完大小,记得结合 df 看整体剩余,再决定是否清理。

















