linux ncdu命令

简介:ncdu (NCurses Disk Usage) 是一个基于ncurses的磁盘使用情况分析工具,可以快速扫描目录并显示磁盘空间占用情况,提供交互式界面来浏览和管理磁盘空间。
ncdu的主要特点
  • 快速扫描:使用C语言编写,扫描速度极快
  • 交互式界面:基于ncurses的终端界面
  • 按大小排序:自动按文件/目录大小降序排列
  • 百分比显示:直观显示占用百分比
  • 键盘导航:使用键盘快捷键快速操作
  • 多平台支持:支持Linux、macOS、BSD等
  • 导出结果:可以将扫描结果导出为JSON格式
  • 远程扫描:支持通过SSH扫描远程服务器
  • 颜色主题:支持颜色显示,提高可读性
  • 轻量级:不依赖图形界面,纯终端工具

语法格式

ncdu [选项] [目录]

常用选项

选项 说明
-x 不跨越文件系统边界(只统计当前文件系统)
-q 安静模式,减少进度信息输出
-0 静默模式,不显示任何进度信息
-1 单行模式,类似du -s * | sort -n
-2 两列模式,显示名称和大小
-o 文件 将扫描结果导出到指定文件
-f 文件 从文件导入扫描结果
--exclude 模式 排除匹配模式的文件/目录
--follow-symlinks 跟随符号链接(默认不跟随)
--exclude-kernfs 排除内核文件系统(如/proc, /sys)
-v 显示版本信息
-h 显示帮助信息

交互式界面操作指南

键盘快捷键
导航键:
  • - 上下移动选择
  • Enter - 进入选中的目录
  • h - 返回上级目录
  • n - 按名称排序
  • s - 按大小排序
  • C - 按项目数量排序
操作键:
  • d - 删除选中的文件/目录
  • t - 切换是否统计硬链接
  • g - 切换百分比/图形显示
  • c - 显示项目数量
  • e - 显示/隐藏空目录
  • i - 显示选中项目信息
  • r - 重新扫描当前目录
  • q - 退出ncdu

使用示例

示例1:基本用法 - 分析当前目录
# 扫描当前目录
ncdu

# 扫描指定目录
ncdu /home

# 不跨越文件系统边界
ncdu -x /
ncdu界面截图

图:ncdu交互式界面示例

示例2:导出和导入扫描结果
# 导出扫描结果到文件
ncdu -o scan_result.json /home

# 从文件导入并浏览结果
ncdu -f scan_result.json

# 导出结果并压缩
ncdu -o - /home | gzip > scan_result.json.gz
ncdu -f <(gzip -d -c scan_result.json.gz)

说明:导出的JSON文件可以用于后续分析或分享给他人查看。

示例3:排除特定文件/目录
# 排除node_modules目录(前端开发常见)
ncdu --exclude node_modules /home/user/projects

# 排除多个模式
ncdu --exclude '*.log' --exclude '*.tmp' /var

# 排除以点开头的隐藏文件
ncdu --exclude '.*' /home

# 使用通配符排除
ncdu --exclude '*/cache/*' /
示例4:批量模式和脚本使用
# 单行模式,类似du但更强大
ncdu -1 /home | head -20

# 两列模式
ncdu -2 /var/log

# 在脚本中使用,找出最大的10个目录
ncdu -0 -o /tmp/scan.out /
ncdu -f /tmp/scan.out -q | head -10

# 安静模式扫描
ncdu -q / > /tmp/disk_usage.txt
示例5:远程服务器磁盘分析
# 通过SSH扫描远程服务器
ssh user@remote-server "ncdu -o - /" > remote_scan.json
ncdu -f remote_scan.json

# 直接运行(需要远程服务器安装ncdu)
ssh -t user@remote-server ncdu /

# 实时监控远程磁盘使用
ssh user@remote-server "watch -n 60 'ncdu -1 / | head -20'"

实用场景

场景1:服务器磁盘空间清理
清理系统日志和临时文件
# 1. 扫描/var目录(通常存放日志)
sudo ncdu /var

# 2. 进入/var/log查看日志文件
# 3. 使用'd'键删除旧的日志文件
# 4. 检查/var/tmp和/var/cache
sudo ncdu /var/tmp
sudo ncdu /var/cache
定期清理脚本:
#!/bin/bash
# 定期磁盘清理脚本

# 扫描系统目录
echo "扫描 /var 目录..."
sudo ncdu -1 /var | head -10 > /var/log/disk_usage_$(date +%Y%m%d).log

# 自动清理7天前的日志
find /var/log -name "*.log" -mtime +7 -delete
find /tmp -type f -mtime +7 -delete

echo "清理完成: $(date)"
场景2:用户磁盘配额监控
# 检查所有用户的主目录
for user in /home/*; do
    if [ -d "$user" ]; then
        echo "=== $(basename "$user") ==="
        ncdu -1 "$user" | head -5
    fi
done

# 找出占用最多的用户
sudo ncdu -1 /home | sort -n | tail -10
场景3:开发项目空间优化
# 分析项目依赖占用
ncdu --exclude '.git' --exclude 'node_modules' /home/user/projects

# 检查node_modules大小
ncdu node_modules

# 找出项目中最大的文件
find /home/user/projects -type f -exec du -h {} + | sort -rh | head -20
清理开发环境建议:
  • 清理node_modules.next等构建目录
  • 删除旧的Docker镜像和容器
  • 清理IDE缓存和索引文件
  • 压缩或归档旧的项目版本
ncdu的优势
  • du命令更直观易用
  • 交互式界面方便探索
  • 扫描速度极快
  • 不需要图形界面
  • 支持远程分析
  • 导出功能强大
注意事项
  • 需要安装ncdu包
  • 删除操作需谨慎
  • 需要读取权限才能扫描
  • 符号链接默认不跟随
  • 扫描大量文件时可能占用内存
  • 某些特殊文件可能无法访问
常见问题解答
Q: ncdu和du命令有什么区别?

A: 主要区别:

功能 ncdu du
界面 交互式ncurses界面 命令行输出
排序 自动按大小排序 需要额外排序命令
百分比 显示占用百分比 不显示百分比
导航 可交互浏览目录树 静态输出
导出 支持JSON导出 纯文本输出
Q: 如何安装ncdu?
# Ubuntu/Debian
sudo apt install ncdu

# RHEL/CentOS
sudo yum install ncdu

# Fedora
sudo dnf install ncdu

# macOS (Homebrew)
brew install ncdu

# 从源码编译
wget https://dev.yorhel.nl/download/ncdu-1.17.tar.gz
tar xzf ncdu-1.17.tar.gz
cd ncdu-1.17
./configure
make
sudo make install
Q: 如何查看被删除文件的实际大小?

A: 使用t键切换是否统计硬链接。当文件被删除但仍被进程占用时,在lsof中显示为deleted状态。

Q: ncdu可以统计文件数量吗?

A: 可以。使用c键切换显示项目数量,包括文件和目录的数量统计。

相关工具对比
工具 特点 最佳用途
ncdu 交互式、快速、终端界面 日常磁盘空间分析和管理
du 基础、普遍可用、脚本友好 脚本中的磁盘使用统计
baobab 图形化、可视化饼图 桌面环境的磁盘分析
filelight KDE的图形化工具 KDE环境的磁盘可视化
gdmap 图形化、可缩放 需要图形界面的详细分析