<p>du -sh | sort -hr 可快速列出当前目录一级子项大小并从大到小排序,但默认不包含隐藏文件、遇权限错误会报错、且无法发现深层嵌套的大文件;需根据场景选用. [!.]匹配隐藏项、加2>/dev/null静默错误、用-a包含文件、-x避免虚拟文件系统卡死,或改用ncdu交互式钻取。</p>

直接用 du -sh * | sort -hr 就能快速列出当前目录下各子项大小并从大到小排序,但这个命令默认不包含隐藏文件、遇到权限错误会报错、深层嵌套的大文件也看不到——得根据具体场景换参数或加过滤。
只看当前目录一级子项(最快最常用)
适用于刚 cd 进某个目录,想秒判哪个子目录吃空间最多。
-
du -sh *中的*不匹配.git、.cache等隐藏项,漏掉就可能误判;要包含隐藏项,改用du -sh .[^.]* * 2>/dev/null或更稳妥的du -sh ./* 2>/dev/null -
sort -hr依赖 locale,若终端输出乱序(比如10M排在2G前面),临时加LC_ALL=C:LC_ALL=C du -sh * | sort -hr - 权限不足时(如
/var/log/journal),2>/dev/null能静默跳过,但得心里有数:被跳过的目录未必小,只是你没权限读
递归找全树最大文件和目录
怀疑大文件藏在多层子目录里(比如 ~/Downloads/archive.zip 或 /var/lib/docker/overlay2/xxx/merged),就得递归扫描。
-
du -ah /path | sort -hr会把每个普通文件和目录都列出来,结果混杂;真正想清理时,得区分是删单个大文件,还是清整个大目录 -
-a是关键开关:没有它,du默认跳过文件、只统计目录,你会完全错过1.8G movie.mkv这类“罪魁祸首” - 扫根目录
/时必须加-x(du -ahx /),否则碰到/proc、/sys这类虚拟文件系统会卡死甚至触发 OOM
交互式钻取比管道更可靠
当目录结构深、子项数量多(比如用户家目录或 Docker 数据目录),靠肉眼扫几十行 du 输出效率低且易遗漏。
- 装
ncdu后运行ncdu /path --exclude /proc --exclude /sys,它边扫描边刷新,支持键盘导航、按s重排序、按i查详细信息(含 on-disk size 和逻辑大小) - 首次在
/下运行必须--exclude,否则会在/proc上卡死;进某个目录后按s排序,默认排的是“该目录下所有子项的磁盘占用”,不是“子项自身大小”——想看纯文件大小,得先cd进去再按s
真正难的不是命令本身,而是判断“哪个大”之后要不要删、能不能删。比如 /var/log/journal 可能占几个 GB,但直接 rm -rf 会丢系统日志;~/.cache 看似可清,但某些应用重启后会重建,反而更耗 IO。扫出来只是第一步,后面得结合业务逻辑做取舍。


















