du和sort组合是定位磁盘空间Top10最直接可靠的方式,但需用du -ah 2>/dev/null | sort -rh | head -n 10避免权限错误干扰及字典序误排,-h必须匹配;一级目录用du -sh /*更高效;找大文件宜用find筛选;ncdu需加--exclude规避/proc等路径。

du 和 sort 组合是定位磁盘空间 Top10 最直接、最可靠的方式,但默认行为容易误判目录总大小或漏掉大文件——关键不在“能不能查”,而在“查什么、怎么排序、绕开哪些坑”。
用 du -ah 查所有文件+目录,但必须加 2>/dev/null
不加错误重定向,权限不足的路径(如 /proc、/sys)会刷屏报错,干扰 sort 输入流,导致结果截断或乱序。
常见错误现象:head -n 10 输出只有 3–5 行,或末尾混着 permission denied 提示。
正确写法:du -ah / 2>/dev/null | sort -rh | head -n 10
注意:-h 必须和 sort -h 配合,否则 sort -r 按字典序排,99M 会排在 1G 前面。
du -sh /* 只看一级子目录,避免递归卡死
对根目录执行 du -ah / 在大系统上可能耗时数分钟,且结果里大量是深层子目录,实际想先锁定“哪个挂载点或一级目录吃空间”。
适用场景:刚发现 df -h 显示 / 使用率飙升,需快速判断是 /var、/home 还是 /usr 异常。
实操建议:
• du -sh /* 2>/dev/null | sort -rh | head -n 10
• 若目标是 /var,改用 du -sh /var/* 2>/dev/null | sort -rh | head -n 10
• 加 --max-depth=1 效果等价,但 /* 更快(shell 展开比 du 递归省 CPU)。
找“真正的大文件”,别被目录统计带偏
du -ah 结果里,目录行显示的是其下所有内容总和,而你真正想删的往往是单个几百 MB 的日志或 core dump 文件——它们藏在目录深处,被父目录的总大小掩盖。
这时要用 find 直接筛文件:
• find /var/log -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -rh -k5 | head -n 10
• -size +100M 是硬过滤,避免把几万个 KB 小文件拉进排序;-k5 指按 ls -lh 输出的第 5 列(大小)排序。
注意:find … -exec du -h {} + 也可,但 ls -lh 更快(不重复读 inode),且字段位置稳定。
ncdu 交互式钻取比命令行更准,但别跳过 --exclude
ncdu 能实时导航、动态刷新、显示百分比,对复杂嵌套结构(比如 /home/user/.cache 下千级子目录)优势明显,但它默认会尝试扫描所有路径,遇到 /proc 或 /sys 仍会卡住或报错。
启动前必须排除:
• ncdu --exclude /proc --exclude /sys --exclude /dev /
• 如果只关心用户数据,直接 ncdu /home,避免扫系统区拖慢响应。
性能影响:首次扫描耗时 ≈ du -ah,但后续按方向键进入子目录是即时计算,不重新遍历。
du 默认统计的是磁盘占用(含稀疏文件、硬链接去重),不是文件逻辑大小;lsof | grep deleted 这类“空间去哪了”问题,du 根本看不到——它只管文件系统里还存在的东西。


















