du -sh * | sort -rh 是最常用且轻量的定位方式,用于快速列出当前目录下各子项大小,但默认不匹配隐藏文件,权限错误需静默处理。

直接用 du -sh * 加 sort -rh 就能快速列出当前目录下各子项大小并从大到小排好,但这个组合不包含隐藏项、遇到权限错误会报错、对深层嵌套的大文件无感——得根据实际目标选命令,不是套一个就完事。
只看当前目录一级子项(含隐藏)
想快速扫一眼当前目录里哪些文件或文件夹最占地方,又不想进子目录递归统计,du -sh 是最轻量的选择,但默认的 * 不匹配 .git、.cache 这类隐藏项:
- 补全隐藏项:改用
du -sh .[^.]* *或更稳妥的du -sh ./*(注意./*会跳过纯.和..,但覆盖所有以.开头的项) - 静默权限错误:加
2>/dev/null,比如du -sh ./* 2>/dev/null | sort -rh,否则像/var/log/journal这类路径可能中断输出 - 排序依赖 locale:如果
sort -rh排乱了(比如10M跑到2G前面),临时加LC_ALL=C,即LC_ALL=C du -sh ./* 2>/dev/null | sort -rh
找整个目录树里最大的 20 个文件或目录
怀疑大文件藏在深层子目录(比如 ~/Downloads/archive.zip 或 /var/lib/docker/overlay2/...),就得递归扫描,但 du -ah 默认把每个普通文件和目录都列出来,结果混杂:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 用
du -ah /path | sort -rh | head -n 20,但注意:没有-a的话,du默认跳过文件、只统计目录,你会漏掉单个大文件 -
sort -h解析单位靠 locale,非C或en_US.UTF-8环境下容易排错,务必加LC_ALL=C -
head -n 20在某些 shell 中可能丢第一行,保险起见可接| tail -n +1,即LC_ALL=C du -ah /path 2>/dev/null | sort -rh | head -n 20 | tail -n +1 - 扫根目录时必须加
-x(du -ahx /),否则碰到/proc、/sys这类虚拟文件系统会卡死或报错
只查文件,不查目录
清理空间时往往优先删大文件,而不是删整个目录,这时 ls -S 看起来快,但有严重误导风险:
-
ls -lSh显示的是文件逻辑大小(st_size),对稀疏文件、硬链接多的文件完全失真;真实磁盘占用得看du -h - 要真正按磁盘占用排文件,得用
find /path -type f -exec du -h {} + | sort -rh | head -n 20 -
-exec du -h {} +比\;高效,批量传参;-type f确保只处理文件,避免把目录也塞进来 - 注意路径结尾斜杠:
find /path/ -type f和find /path -type f行为一致,但前者更明确,推荐带斜杠
交互式钻取比命令行更可靠
当目录结构复杂(比如用户家目录、Docker 数据卷)、嵌套深、或需要反复跳转查看时,命令行管道输出几十行后人眼极易漏判,ncdu 是更稳的选择:
- 首次运行
ncdu /前必须加--exclude /proc --exclude /sys,否则会在虚拟文件系统上卡死,甚至触发 OOM killer - 进入某目录后按
s键重排序,但注意:它默认排的是“该目录下所有子项的磁盘占用总和”,不是子项自身大小;想看纯文件大小,得先cd进去再按s - 按
i键可对比 on-disk size(实际占用)和 apparent size(逻辑大小),对稀疏文件或硬链接特别有用 -
ncdu边扫描边显示,支持键盘导航(方向键、o展开/折叠、d删除),比反复敲命令直观得多
真正难的不是命令怎么写,而是搞清你到底想定位什么:是当前层的“大户”,还是整棵树的“巨无霸”;是要删文件,还是砍目录;是临时查一下,还是长期监控。选错命令,结果可能差十倍。










