命令详解 ncdu
ncdu 是交互式磁盘占用分析工具,适合快速定位大目录和大文件。它显示的是扫描时看到的文件系统状态,不会判断文件是否可以安全删除。生产服务器应先只读分析、确认责任人和备份,再执行清理。
安装与启动
Debian / Ubuntu:
sudo apt update
sudo apt install ncdu
RHEL / Rocky / AlmaLinux / Fedora:
sudo dnf install ncdu
分析根文件系统并限制在当前文件系统内:
sudo ncdu -x /
-x 可避免跨越到其他挂载点,例如 NFS、备份盘、容器卷或 /proc 下的特殊挂载。扫描某个业务目录更安全:
sudo ncdu -x /var/lib/example
先只读定位,再决定如何清理
交互界面通常可按大小排序、进入目录、查看文件信息。删除快捷键可能因版本而异,且误删难以恢复。建议把 ncdu 只作为定位工具,然后退出并通过业务认可的命令处理:
sudo du -xsh /var/lib/example/* 2>/dev/null | sort -h
sudo lsof +L1
findmnt -T /var/lib/example
清理日志时优先使用应用自己的保留策略或 logrotate;清理容器、包缓存、数据库文件时使用对应平台的官方命令。不要直接删除未知数据库、快照、镜像层或仍被进程打开的日志。
排除目录
sudo ncdu -x --exclude '/var/lib/example/cache' /
排除规则和通配行为以本机版本手册为准。排除目录会让总量低于真实占用,应在报告中说明。
导出结果,离线分析
ncdu 2.x 可把扫描结果导出,再在低权限环境中浏览。不同版本的参数有差异,先执行 ncdu --version 和 ncdu --help。常见写法:
sudo ncdu -1xO /tmp/root-usage.ncdu /
ncdu -f /tmp/root-usage.ncdu
导出文件可能包含目录结构和文件名,属于敏感资产信息。传输前应脱敏、限制权限并按制度删除:
chmod 600 /tmp/root-usage.ncdu
远程主机分析
可在远程执行扫描,再把导出流交给本地 ncdu。由于版本和格式兼容性不同,应先在测试环境验证,不要直接对繁忙根目录执行:
ssh host 'sudo ncdu -1xo- /srv/data' | ncdu -f-
确保 SSH 主机身份可信,且导出内容不会经过不受控终端日志。
为什么 ncdu 与 df 数字不同
df查看文件系统块使用情况,ncdu汇总可遍历目录中的文件。- 已删除但仍被进程打开的文件会占用
df空间,却不在目录树中;用lsof +L1排查。 - 快照、保留块、文件系统元数据、稀疏文件、压缩和去重都会造成差异。
- 硬链接应只计算一次,但跨工具、权限不足或扫描边界可能影响结果。
- 挂载点覆盖了原目录内容时,隐藏内容仍可能占空间。
大规模扫描建议
在高 I/O 业务上选择低峰期,限制扫描路径,优先使用已有监控与容量趋势。执行前记录磁盘告警、业务延迟和恢复方案;若扫描明显影响业务,立即停止并改用快照、备机或存储侧统计。