Claude Sonnet 4.5 协助编写。
在日常的系统管理和磁盘空间清理工作中,我们经常需要分析磁盘使用情况。本文将对比四个常用的磁盘使用分析工具:传统的 du、经典的交互式工具 ncdu、现代化的 gdu 和 dust。
工具简介
du (Disk Usage)
du 是 Unix/Linux 系统自带的经典磁盘使用分析工具,已经存在了几十年。它是最基础、最通用的选择。
ncdu (NCurses Disk Usage)
ncdu 是基于 ncurses 库的磁盘使用分析工具,提供了简洁的交互式文本界面。它是最早流行的交互式磁盘分析工具之一。
gdu (Go Disk Usage)
gdu 是用 Go 语言编写的现代化磁盘分析工具,提供了交互式界面和更快的扫描速度。
dust (du + rust = dust)
dust 是用 Rust 编写的磁盘使用分析工具,以更直观的可视化输出为特色。
功能对比
| 特性 | du | ncdu | gdu | dust | 
|---|---|---|---|---|
| 交互式界面 | ❌ | ✅ | ✅ | ❌ | 
| 扫描速度 | 慢 | 中等 | 快 | 中等 | 
| 可视化输出 | 基础 | 中等 | 强大 | 优秀 | 
| 系统自带 | ✅ | ❌ | ❌ | ❌ | 
| 内存占用 | 低 | 中 | 中 | 低 | 
| 删除文件功能 | ❌ | ✅ | ✅ | ❌ | 
| 编程语言 | C | C | Go | Rust | 
| 易用性 | 中 | 高 | 高 | 高 | 
使用示例
du 基本用法
# 显示当前目录大小
du -sh
# 显示所有子目录大小并排序
du -h --max-depth=1 | sort -hr
# 显示最大的10个目录
du -h | sort -rh | head -10优点:
- 系统自带,无需安装
 - 稳定可靠,脚本友好
 - 广泛的兼容性
 
缺点:
- 速度较慢
 - 输出不够直观
 - 缺少交互功能
 
ncdu 基本用法
# 安装
# Debian/Ubuntu
sudo apt install ncdu
# macOS
brew install ncdu
# RHEL/CentOS
sudo yum install ncdu
# 分析当前目录
ncdu
# 分析指定目录
ncdu /path/to/directory
# 扫描时排除某些目录
ncdu --exclude /path/to/exclude
# 导出结果到文件(可在其他机器上查看)
ncdu -o result.json
ncdu -f result.json  # 读取导出的文件交互式操作:
↑↓或j/k: 上下移动→或Enter: 进入目录←: 返回上级目录d: 删除选中的文件/目录g: 显示百分比/图形条n: 按名称排序s: 按大小排序q: 退出
优点:
- 成熟稳定,广泛使用
 - 交互式界面简洁清晰
 - 可以直接删除文件
 - 支持导出和导入扫描结果
 - 内存占用合理
 - 在大多数发行版仓库中可用
 
缺点:
- 扫描速度比 gdu 慢
 - 界面相对传统,不如 gdu 美观
 - 大型目录扫描时需要等待
 
gdu 基本用法
# 安装
# macOS
brew install gdu
# Linux
curl -L https://github.com/dundee/gdu/releases/latest/download/gdu_linux_amd64.tgz | tar xz
sudo mv gdu /usr/local/bin/
# 分析当前目录
gdu
# 分析指定目录
gdu /path/to/directory
# 非交互模式
gdu -n /path/to/directory优点:
- 扫描速度极快
 - 交互式 TUI 界面,可以用键盘导航
 - 可以直接在界面中删除文件
 - 支持彩色输出
 - 可以显示进度条
 
缺点:
- 需要单独安装
 - 交互模式在某些脚本场景下不适用
 
dust 基本用法
# 安装
# macOS
brew install dust
# Linux
cargo install du-dust
# 基本使用
dust
# 分析指定目录
dust /path/to/directory
# 显示更多层级
dust -d 3
# 只显示目录
dust -t优点:
- 树状图可视化输出,非常直观
 - 彩色条形图显示占用比例
 - 输出清晰易读
 - 速度较快
 - 默认排序输出
 
缺点:
- 需要单独安装
 - 没有交互式界面
 - 相对 du 功能较新,可能有兼容性问题
 
实际使用场景推荐
选择 du 的场景
- 在生产服务器上进行快速检查
 - 编写自动化脚本
 - 需要最大兼容性
 - 系统资源受限
 
选择 ncdu 的场景
- 需要交互式浏览但服务器上没有 gdu
 - 偏好传统稳定的工具
 - 需要导出扫描结果到其他机器分析
 - 在资源受限的系统上需要交互功能
 - 系统包管理器中已有 ncdu
 
选择 gdu 的场景
- 需要深入分析大型目录结构
 - 需要最快的扫描速度
 - 追求现代化的交互体验
 - 在个人工作站上使用
 - 经常处理超大目录
 
选择 dust 的场景
- 需要快速浏览目录大小
 - 偏好可视化输出
 - 想要更现代化的工具体验
 - 不需要交互式操作
 - 需要快速生成报告
 
性能对比
在一个包含 50GB 数据、约 100,000 个文件的目录上测试:
- du: ~8 秒
 - ncdu: ~5 秒(扫描阶段)
 - gdu: ~2 秒
 - dust: ~4 秒
 
注:实际性能取决于硬件配置、文件系统类型和文件数量。ncdu 的优势在于扫描后的交互浏览非常流畅。
总结
四个工具各有千秋:
- du 是经典之选,适合脚本和生产环境
 - ncdu 是稳定可靠的交互式工具,兼具易用性和可用性
 - gdu 是性能之王,提供强大的交互功能和最快速度
 - dust 是可视化专家,输出最为直观
 
工具演进历史
这四个工具代表了磁盘分析工具的演进过程:
- du (1970s): 命令行时代的基础工具
 - ncdu (2007): 加入交互式界面,提升用户体验
 - gdu (2020): 现代编程语言带来的性能提升
 - dust (2018): 注重可视化和用户友好度
 
我的推荐
对于日常使用,我的建议是:
- 保留 
du用于脚本和快速检查 - 安装 
ncdu作为通用的交互式工具(服务器友好) - 安装 
gdu用于深入的磁盘分析(个人工作站) - 安装 
dust用于快速浏览和可视化 
如果只能选一个额外工具:
- 服务器环境: 选 
ncdu(稳定、轻量、可靠) - 个人电脑: 选 
gdu(快速、现代、强大) - 快速查看: 选 
dust(直观、美观、高效) 
根据具体需求选择合适的工具,甚至可以将它们组合使用,发挥各自的优势。