ncdu是排查磁盘爆满最省力的工具,一次扫描即可可视化展示目录树大小分布并支持边看边删;安装后运行ncdu /path/to/dir启动,默认按大小降序排列,Enter进入子目录,Backspace返回,t切换排序,→展开、←折叠,删除前务必核对路径,避免误删。

ncdu 是排查磁盘爆满最省力的工具——它不靠猜、不拼命令组合,一次扫描就能看到整个目录树的大小分布,还能边看边删,不用退出再执行 rm。
ncdu 安装与基础启动
大多数现代发行版默认不带 ncdu,需手动安装。它不依赖图形界面,纯终端运行,资源占用极低。
- Ubuntu/Debian:
sudo apt-get install ncdu - CentOS/RHEL 7/8:
sudo yum install ncdu;RHEL 9+ 或 Fedora:sudo dnf install ncdu - 无 root 权限时:可从官网下载静态二进制(
ncdu-2.3-x86_64-linux类似名),chmod +x 后直接运行
安装完直接运行:ncdu /path/to/dir(例如 ncdu /var)。首次扫描会稍慢(尤其根目录),但之后所有操作都是实时响应。
交互界面里怎么快速定位大文件
ncdu 默认按大小降序排列,顶部就是“空间杀手”。关键不是看第一行,而是用方向键往下扫几屏——很多大目录藏在第二、第三层级(比如 /var/log/journal 或 /var/lib/docker/overlay2)。
- Enter 进入子目录,Backspace 返回上层,支持无限钻取
-
t 切换排序方式(大小/名称/修改时间),按大小排序(
size)是默认且最常用模式 - → 展开当前目录(如果被折叠),← 折叠,避免信息过载
- 注意右上角显示的「Total」和「Used」——前者是当前视图下所有项总和,后者是实际磁盘占用(含硬链接去重)
别急着删。先用 → 展开可疑目录,再上下键逐行确认具体是哪些文件在撑体积(比如 docker.log.1、syslog.2.gz)。
为什么直接 ncdu / 常常卡住或报错
扫描根目录时,/proc、/sys、/dev 这些虚拟文件系统会触发权限拒绝或阻塞读取,导致 ncdu 卡在某一行不动,甚至崩溃退出。
- 必须加
--exclude过滤:例如ncdu --exclude /proc --exclude /sys --exclude /dev / - 更稳妥的做法是分路径扫描:
ncdu /var、ncdu /home、ncdu /opt,再根据结果决定是否深入 - 若要跳过所有缓存目录(如
/var/cache),可用--exclude-caches,但注意它只识别标准CACHEDIR.TAG标记目录 - 扫描中途按 q 可安全退出,进度不会丢失(下次启动仍从断点继续)
另外,ncdu 不解析符号链接目标,默认把软链当 0 字节处理——如果你怀疑大文件藏在软链指向的位置,得手动 cd 进去再跑一次。
删文件前必须确认的三件事
ncdu 的 d 键确实能直接删除,但生产环境里误删比找不到大文件更致命。
- 删除前,界面上方会显示完整路径和大小,务必核对是否为预期目标(比如你本想删
/var/log/nginx/access.log,结果光标停在了/var/log/nginx/目录上) - 被
lsof | grep deleted检出的“已删未释放”文件,在 ncdu 中不可见——它们仍占df空间,但 ncdu 扫不到。这类问题得靠重启进程或kill -USR1触发日志 reopen - 容器环境慎用 d:直接删
/var/lib/docker/overlay2/xxx下的层,可能破坏镜像一致性。应优先用docker system prune清理
真正省时间的不是“一键删”,而是用 ncdu 快速圈定 2–3 个嫌疑目录后,再切出去用 find 精准过滤(比如 find /var/log -name "*.log" -size +100M),删得更可控。


















