引言

在日常的系统管理和开发工作中,磁盘空间不足是一个常见的问题。快速定位哪些文件或目录占用了大量空间至关重要。虽然经典的 du 命令是标准工具,但在处理大型文件系统或海量文件时,其速度往往不尽人意。gdu (Go Disk Usage) 应运而生,它是一个使用 Go 语言编写的现代磁盘使用情况分析器,旨在提供比传统工具更快的扫描速度和友好的控制台交互界面。

主要特性

gdu 的核心优势在于其性能和易用性:

  • 极速扫描: gdu 的设计目标就是速度。它充分利用了 Go 语言的并发特性,可以并行扫描目录和处理文件信息。根据许多用户反馈和基准测试,gdu 在扫描大型目录树时通常比传统的 du 命令快几个数量级,也往往优于另一款流行的交互式工具 ncdu,尤其是在初始扫描阶段。
  • 交互式控制台界面: 运行 gdu 后,它会提供一个基于终端的交互式界面 (TUI),清晰地展示目录和文件的磁盘占用情况,并按大小排序。用户可以使用键盘轻松导航、深入目录、查看文件详情以及执行删除操作。
  • 跨平台支持: gdu 是一个单一的可执行文件,无需额外依赖,支持主流操作系统,包括 Linux、macOS 和 Windows。
  • 文件/目录删除: 在交互界面中,可以直接删除选中的文件或目录,方便快速清理磁盘空间。请谨慎使用此功能。
  • 忽略特定目录: 支持通过命令行参数 (-i--ignore-dirs) 或配置文件 (.gduignore,类似 .gitignore) 来排除指定的目录(如 /proc, /dev, /sys, node_modules 等),避免扫描不必要的路径,提高扫描效率。
  • 结果导出: 支持将扫描结果导出到文件。可以使用 -o 参数指定输出文件路径,或使用 -oj 将结果导出为 JSON 格式,方便脚本处理或进一步分析。
  • 多种显示模式: 支持显示实际大小 (apparent size) 和占用空间 (disk usage),并可通过命令行参数 (-a) 或交互界面切换。

安装与快速入门

gdu 的安装非常便捷。

Linux:

  • Debian/Ubuntu: sudo apt install gdu (可能需要较新版本或 PPA)
  • Fedora: sudo dnf install gdu
  • Arch Linux: sudo pacman -S gdu
  • 通用 (下载二进制文件):GitHub Releases 页面下载适合你系统的预编译二进制文件。

macOS:

  • 使用 Homebrew: brew install gdu

Windows:

  • 使用 Scoop: scoop install gdu
  • 使用 Chocolatey: choco install gdu
  • GitHub Releases 下载二进制文件。

快速入门:

  1. 扫描当前目录:
    bash
    gdu .
    # 或者直接运行
    gdu
  2. 扫描指定目录:
    bash
    gdu /path/to/directory
  3. 交互界面基本操作:
    • 使用 j k 键移动光标。
    • 使用 Enter l 进入选中目录。
    • 使用 h 返回上一级目录。
    • d 删除选中的文件或目录(会提示确认)。
    • e 清空选中的目录(会提示确认)。
    • i 显示选中项的详细信息。
    • r 重新扫描当前目录。
    • sm 切换排序方式(按大小或文件数)。
    • a 切换显示实际大小/占用空间。
    • q 退出。

使用场景/案例

gdu 适用于多种需要快速分析磁盘空间的场景:

  • 快速定位大文件/目录: 这是最常见的用途。当磁盘空间告急时,运行 gdu 可以迅速找到占用空间最多的罪魁祸首。
  • 服务器磁盘监控: 由于其速度快且支持 JSON 输出,gdu 可以集成到监控脚本或自动化工作流中,定期检查服务器磁盘使用情况,生成报告或触发告警。
  • 分析大型文件系统: 对于拥有数百万文件或 TB 级数据的存储系统(如 NAS、备份服务器),gdu 的并行扫描能力使其成为比 duncdu 更高效的选择。
  • 开发环境清理: 快速找到并清理项目中不再需要的依赖(如 node_modules)、构建产物或缓存文件。

用户评价/社区反馈

社区中对 gdu 的评价普遍积极,主要集中在其速度上。许多用户表示从 duncdu 切换到 gdu 后,磁盘扫描时间显著缩短。

然而,也有一些讨论点和技巧:

  • 与 ncdu 的比较: 用户通常认为 gdu 更快,但 ncdu 的交互界面功能更成熟、更灵活(例如,更细致的排序和过滤选项)。选择哪个取决于用户是更看重极致的速度还是更丰富的交互功能。
  • 网络文件系统 (NFS/SMB): 有用户反馈在扫描网络挂载的文件系统时,gdu 的速度优势可能不明显,甚至可能较慢。这通常与网络延迟和文件系统本身的特性有关。使用 -ignore 排除不必要的目录或调整并行度可能有所帮助。
  • 权限问题: 如果 gdu 没有读取某些目录的权限,它可能无法计算其准确大小。使用 sudo gdu 运行可以解决部分权限问题,但需谨慎操作,尤其是在使用删除功能时。
  • 与其他工具结合: 可以将 gdu 的输出(尤其是 JSON 格式)与其他命令行工具(如 jq, fzf)结合,实现更复杂的分析或交互式过滤。

与类似工具对比 (gdu vs. ncdu vs. du)

特性 gdu ncdu du (GNU/BSD)
核心优势 速度 (Go 并发) 成熟的交互界面,功能丰富 POSIX 标准,普遍可用,脚本友好
扫描速度 非常快 (尤其大型文件系统) 较快 (比 du 快) 较慢 (通常单线程)
界面 交互式 TUI (简洁) 交互式 TUI (功能更全) 无交互界面 (纯文本输出)
主要功能 扫描, 显示, 排序, 删除, 导出 (JSON) 扫描, 显示, 排序, 删除, 过滤, 导出 扫描, 显示 (基本)
资源占用 通常较低 可能稍高 (取决于缓存) 非常低
依赖 无 (单一二进制) ncurses 库 无 (系统自带)
适用场景 快速概览, 大型系统, 自动化脚本 交互式清理, 详细分析, 中小型系统 简单检查, 脚本基础, 兼容性要求高

总结

gdu 是一款出色且高效的磁盘使用情况分析工具。它凭借 Go 语言带来的并发优势,在扫描速度上远超传统工具,并提供了一个简洁实用的交互式控制台界面。虽然在交互功能的丰富性上可能不及 ncdu,但其极致的速度和低资源占用使其成为快速定位磁盘空间问题、分析大型文件系统以及集成到自动化流程中的理想选择。

如果你经常需要处理磁盘空间问题,或者对现有工具的速度感到不满,强烈建议尝试 gdu

项目地址: https://github.com/dundee/gdu

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。