最稳的起点是du -ah / 2>/dev/null | sort -hr | head -n 10,可快速列出根目录下磁盘占用最大的前10个条目(含文件和目录),但统计的是磁盘占用量而非逻辑大小,且需加-a才显示文件;排序受locale影响,中文环境建议用sort -Vr或转字节数du -ab;2>/dev/null跳过权限错误;若只查文件,应配合find -type f过滤;find -size +1G最快筛选大文件;ncdu适合交互式分析但不可脚本化。

du -ah + sort -hr 是最稳的起点
直接用 du -ah / 2>/dev/null | sort -hr | head -n 10 能快速列出根目录下最大的前10个条目(含文件和目录),但要注意:它统计的是磁盘占用量,不是文件逻辑大小(比如稀疏文件、硬链接会重复计数)。如果你只关心“文件”,得配合 find -type f 过滤。
-
du -ah中的-a必须加,否则只显示目录,不列单个文件 -
sort -hr依赖 locale;某些中文环境可能排序错乱,可改用sort -Vr(版本排序模式)或先转纯字节数:du -ab / 2>/dev/null | sort -nr | head -n 10 -
2>/dev/null很关键——跳过权限拒绝(如/proc、/sys)导致的报错,否则命令可能卡住或输出中断
find -type f -exec ls -lh {} \; | sort -hr -k5 更准但更慢
这个组合专为“纯文件”设计,ls -lh 输出带单位的大小,sort -hr -k5 按第五列(即大小字段)逆序排。但它实际执行了成千上万次 ls,在海量小文件目录下明显拖慢,且 -k5 在不同 locale 下列对齐可能偏移(比如中文终端里单位缩进不一致),导致排序失效。
- 安全写法是用
awk提取大小再排:find /var/log -type f -exec ls -l {} \; 2>/dev/null | awk '{print $5, $0}' | sort -nr | head -n 10 | cut -d' ' -f2-</li> <li>如果只要路径和大小,不用详情,换成 <code>stat -c '%s %n' {}更轻量 -
-maxdepth 2建议加上,避免深目录遍历耗时过长
find -size +1G 直接筛大文件最快
当目标明确(比如“找所有 >1GB 的文件”),find 自带的 -size 参数比排序快得多,不扫描内容、不统计、不排序,只做一次字节比较。它不保证“前10”,但能立刻给你一批候选,再人工挑。
-
+1G表示“大于 1GB”,单位支持c(字节)、k、M、G;注意1G = 1073741824 字节,不是 10⁹ - 加
-xdev防止跨文件系统(比如误入/mnt或/boot),避免挂载点异常导致命令阻塞 - 搭配
-printf可直接格式化输出:find / -xdev -type f -size +500M -printf '%s %p\n' 2>/dev/null | sort -nr | head -n 10
ncdu 适合交互式钻取,不适合脚本化
ncdu 不是命令行管道工具,它是 TUI 程序,启动后需手动导航、按 Shift+S 排序、方向键选择。优点是实时、带颜色、能进子目录看分布;缺点是没法嵌入自动化流程,也不能直接导出 Top10 列表。
- 首次运行建议限定路径:
ncdu /var,别直接ncdu /—— 扫描整个根目录可能耗时数分钟 - 扫描中按
q可随时退出,不会中断已统计部分 - 界面里看到可疑大文件,按
d是标记删除,不是立即删,确认要按Shift+D
/var/log/journal、/root/.cache、/tmp 之类非显眼路径,靠单一命令很难扫全。


















