du -sh统计的是当前用户有读取权限的磁盘占用,不包含隐藏文件(除非显式指定)、不跟随符号链接、跳过无权访问目录,故结果可能偏小;du -sh .统计当前目录总大小(含隐藏项),du -sh *仅统计非隐藏子项。

du -sh 是最常用也最容易出错的目录大小统计方式。它不显示子目录明细,只输出一个汇总值,但这个“汇总”是否包含隐藏文件、是否递归进符号链接、是否受权限限制——全看你怎么用。
为什么 du -sh 有时不准
根本原因在于 du 统计的是磁盘占用(disk usage),不是文件逻辑大小;它只计算当前用户有读取权限的文件,跳过无权访问的子目录,也不会展开无法解析的符号链接。
- 遇到权限不足的子目录(比如
/root/.cache),du直接跳过,结果偏小 - 符号链接默认不跟随,若目标在别处,其大小不计入
- 硬链接被重复计数(
-l可避免),而软链接本身只算几个字节 - 稀疏文件、已删除但未释放的文件句柄,
du不感知
du -sh 和 du -sh * 的区别必须分清
前者统计当前目录总大小(含隐藏项);后者只统计当前目录下**非隐藏**的子项(* 不匹配 .bashrc 这类点开头的文件/目录),漏掉 .git、.config 等常见大目录。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
du -sh→ 输出一行,如2.4G . -
du -sh *→ 列出每个非隐藏子项,但不含.自身,也不含.env、.DS_Store等 - 要真正“看到所有”,得用
du -sh .[!.]* *或更稳妥的du -sh --max-depth=1
快速查大目录:加 --max-depth=1 再配合 sort
单纯 du -sh 只给总数,没法定位哪个子目录吃空间。实际排障时,90% 的需求是“哪个文件夹最占地方”。
-
du -sh --max-depth=1 | sort -hr—— 按人眼可读格式倒序排列,第一行就是最大项 -
du -sh --max-depth=1 | sort -hr | head -n 10—— 只看前 10 大 - 注意:
--max-depth=1包含隐藏目录(.git、.local都会列出来),比*更完整 - 如果想排除某些路径,用
--exclude='.cache',但注意它不支持通配符,得写全名
真正容易被忽略的点是:你执行 du -sh 的位置,决定了统计起点;而是否加 sudo,决定了能否看到全部内容。没权限时,它不会报错,只会静默跳过——你以为 5GB 的目录,可能只是你当前能看见的部分。










