作为运维、开发,甚至是普通桌面用户,你一定遇到过这些痛点:服务器根分区突然爆满,du -sh * 半天刷不出结果;经典的 ncdu 在百万级文件的SSD上慢得令人抓狂;想快速定位大文件却要在冗长的输出里翻找。
今天要介绍的 gdu(Go Disk Usage),就是为解决这些问题而生的终端磁盘分析神器——用 Go 原生编写,专为现代 SSD 优化,凭借多核并行扫描能力,速度远超传统工具,同时保留了直观的 TUI 交互,是 Linux/macOS/Windows 全平台通用的磁盘管理终极方案。
一、什么是 gdu?
gdu 是一款开源的终端磁盘占用分析工具,由 GitHub 开发者 @Dundee 维护,核心仓库地址:https://github.com/Dundee/gdu。
它的核心设计理念是平衡极致性能与易用性,相比传统工具拥有不可替代的优势:
- 极速并行扫描:充分利用多核 CPU 并行处理,SSD 环境下扫描速度是
ncdu的 3-5 倍,百万级文件目录也能秒级出结果; - 智能内存管理:自动根据主机空闲内存调整 GC 策略,空闲内存充足时直接关闭 GC 榨满性能,内存受限环境也能稳定运行;
- 直观 TUI 交互:类 ncdu 的终端交互界面,全键盘操作,支持目录导航、一键删除、排序筛选,新手也能快速上手;
- 全平台兼容:原生支持 Linux、macOS、Windows,无需额外依赖,单二进制文件开箱即用;
- 丰富的自动化能力:支持非交互模式、JSON 报告导出/导入、定时监控,完美适配脚本与自动化运维场景。
核心性能对比
在包含 10 万个文件的生产环境目录测试中,主流磁盘分析工具的性能表现如下:
| 工具 | 扫描耗时 | 内存占用 | 核心优势 |
|---|---|---|---|
| gdu | 0.8s | 85MB | 速度最快,综合表现最优 |
| ncdu | 3.2s | 62MB | 经典稳定,内存占用低 |
| dust | 1.5s | 110MB | 可视化树状展示 |
| du -sh | 2.1s | 12MB | 系统原生,功能单一 |
二、全平台一键安装
gdu 提供了丰富的安装方式,单二进制文件无依赖,所有平台均可快速部署。
Linux 系统
Debian/Ubuntu 系列
| |
RHEL/CentOS/Fedora 系列
| |
Arch Linux
| |
通用二进制安装(无 root 权限也可用)
| |
macOS
| |
Windows
| |
安装完成后,执行 gdu -v 即可查看版本,验证安装成功。
三、基础使用:交互式 TUI 核心操作
交互式模式是 gdu 最常用的场景,也是手动排查磁盘问题的核心玩法,零学习成本,上手即用。
基础启动命令
| |
启动后,你会进入 gdu 的 TUI 界面,默认按文件大小降序排列,目录/文件大小、占用占比、名称一目了然。
核心快捷键大全
按 ? 可随时调出完整帮助面板,核心操作整理如下,记住这几个就能玩转 90% 的场景:
| 分类 | 快捷键 | 功能说明 |
|---|---|---|
| 导航操作 | ↑/k、↓/j | 上下移动光标选中项目 |
| →/Enter/l | 进入选中的子目录 | |
| ←/h | 返回上一级父目录 | |
| g、G | 快速跳转到列表顶部/底部 | |
| 文件操作 | d | 删除选中的文件/目录(二次确认,谨慎使用) |
| e | 清空目录内容(保留目录本身) | |
| v | 打开选中文件的预览(仅文本文件) | |
| 排序与显示 | s | 按文件大小降序排序(默认) |
| n | 按文件/目录名称升序排序 | |
| C | 显示目录内的文件/子目录数量 | |
| M | 显示目录内文件的最新修改时间 | |
| B | 显示目录的相对大小占比 | |
| 其他操作 | ? | 打开帮助面板 |
| q/Ctrl+C | 退出 gdu |
新手入门实战:快速定位并清理大文件
- 执行
gdu /home/yourname扫描个人目录,启动后最大的文件/目录会排在最顶部; - 按
↓选中占用异常的大目录(比如 Downloads),按Enter进入查看内部详情; - 确认无用的大文件后,按
d键,在弹出的确认框中按Enter即可删除; - 按
←返回上一级,继续排查其他目录,完成后按q退出。
四、常用参数全解析
gdu 提供了丰富的命令行参数,可精准控制扫描行为、过滤规则、输出格式,按功能分类整理如下,所有参数均可通过 gdu --help 查看完整说明。
1. 扫描控制类
| 参数 | 全称 | 功能说明 | 实用示例 |
|---|---|---|---|
-d | --show-disks | 显示所有挂载磁盘的分区使用情况 | gdu -d 替代 df -h,直观查看所有磁盘占用 |
-x | --no-cross | 不跨越文件系统边界(不扫描其他挂载点) | gdu -x / 仅扫描系统盘,忽略数据盘、挂载的容器目录 |
--follow-symlinks | - | 跟随符号链接,统计链接指向的实际文件大小 | gdu --follow-symlinks ~/projects 分析包含软链接的项目目录 |
--depth | - | 限制非交互模式下的目录扫描深度(v2.9.0+ 新增) | gdu -n --depth=2 /var 仅显示2层目录结构,避免输出冗长 |
2. 过滤排除类
| 参数 | 全称 | 功能说明 | 实用示例 |
|---|---|---|---|
-H | --no-hidden | 忽略隐藏文件/目录(以 . 开头的文件) | gdu -H ~ 扫描家目录时跳过隐藏文件,提升扫描速度 |
-i | --ignore-dirs | 排除指定目录,多个目录用逗号分隔 | gdu / -i /proc,/sys,/dev 扫描系统盘时跳过系统虚拟目录 |
-I | --ignore-pattern | 按正则表达式排除匹配的文件/目录 | gdu ~ -I "*.log|node_modules" 跳过日志文件和前端依赖目录 |
3. 输出与格式类
| 参数 | 全称 | 功能说明 | 实用示例 |
|---|---|---|---|
-a | --show-apparent-size | 显示文件表观大小(而非实际磁盘占用块大小) | gdu -a /var/lib/docker 精准查看容器镜像的表观大小 |
--si | - | 使用十进制 SI 单位(KB/MB/GB)替代默认的二进制单位(KiB/MiB/GiB) | gdu --si /home 符合日常使用习惯的单位显示 |
-c | --no-color | 禁用彩色输出 | gdu -c /tmp 适配不支持彩色的终端环境 |
--export-json | - | 将扫描结果导出为 JSON 文件 | gdu /home --export-json disk_report.json 存档分析结果 |
--import-json | - | 导入之前导出的 JSON 报告 | gdu --import-json disk_report.json 离线查看历史扫描结果 |
4. 非交互模式专用
| 参数 | 全称 | 功能说明 | 实用示例 |
|---|---|---|---|
-n | --non-interactive | 启用非交互模式,直接输出结果到终端(适配脚本) | gdu -n /var/log 非交互模式打印目录占用 |
-s | --summarize | 非交互模式下仅显示总计大小 | gdu -n -s /home 快速获取目录总占用 |
-t | --top | 非交互模式下仅显示前 X 个最大的文件 | gdu -n -t 10 / 找出系统盘最大的10个文件 |
5. 性能与高级配置
| 参数 | 全称 | 功能说明 | 实用示例 |
|---|---|---|---|
-g | --const-gc | 启用恒定 GC 策略,降低 30% 内存占用,扫描速度降低约 25% | GOGC=200 gdu -g /bigdata 内存受限环境下扫描大目录 |
--write-config | - | 将当前配置写入默认配置文件 ~/.gdu.yaml | gdu --si --no-hidden --write-config 永久保存常用配置 |
五、高阶实战场景
掌握了基础用法,我们来看看 gdu 在生产环境、日常运维中的 5 个高频实战场景,直接落地解决实际问题。
场景1:服务器磁盘爆满应急排查
这是运维最常见的应急场景,核心需求是最快速度定位占用最高的目录,同时避免扫描无关挂载点。
最佳实践命令
| |
操作流程
- 用
gdu -d确认哪个分区爆满,避免盲目扫描; - 用
-x参数锁定目标分区,不跨文件系统,避免扫描数据盘、网络挂载盘; - 用
-i排除无意义的系统虚拟目录,进一步提升扫描速度; - 进入高占用目录后,用
d键清理无用日志、缓存文件,快速释放空间。
场景2:自动化磁盘监控与历史对比
gdu 的非交互模式+JSON导出能力,可完美融入自动化运维体系,实现磁盘占用的定时监控、历史趋势对比。
步骤1:编写监控脚本 disk_monitor.sh
| |
步骤2:设置定时任务
| |
步骤3:历史报告对比
| |
场景3:系统盘精准瘦身(安全无风险)
很多新手清理系统盘时容易误删系统文件,gdu 可以帮你精准定位可清理的无用文件,全程可控。
安全瘦身命令
| |
安全原则
- 系统核心目录(/boot、/usr/lib、/etc)只看不删,避免系统崩溃;
- 删除前用
v键预览文件内容,确认无用再操作; - 日志文件建议用
e清空内容,而非直接删除文件,避免服务无法写入日志。
场景4:项目依赖体积分析
开发过程中,经常会遇到项目依赖体积爆炸的问题,比如前端的 node_modules、Java 的 Maven 仓库、Go 的 vendor 目录,gdu 可以帮你快速定位体积最大的依赖包。
前端项目分析示例
| |
进阶用法
结合 --ignore-pattern 过滤无用文件,分析项目有效代码体积:
| |
场景5:远程服务器批量磁盘分析
需要批量管理多台服务器时,可通过 ssh 结合 gdu 批量获取磁盘分析报告,无需逐台登录。
批量扫描脚本示例
| |
六、进阶技巧与个性化配置
1. 永久配置文件
每次输入大量参数太麻烦,gdu 支持通过 yaml 配置文件永久保存你的常用设置。
| |
示例配置:
| |
2. Shell 别名提升效率
在 ~/.bashrc 或 ~/.zshrc 中添加常用别名,一键调用:
| |
添加后执行 source ~/.bashrc 生效,直接输入别名即可使用。
3. 内存与性能调优
极致性能模式:空闲内存充足时,gdu 会自动关闭 GC 实现最快扫描,无需额外参数;
低内存模式:服务器内存受限,扫描超大目录时,用
-g参数降低内存占用:1 2# 内存占用降低30%,适合小内存VPS GOGC=50 gdu -g /bigdata跳过隐藏文件:用
-H参数跳过隐藏目录,可大幅提升扫描速度,减少内存占用。
七、常见问题与避坑指南
1. 扫描时提示「permission denied」
原因:当前用户没有目标目录的读取权限。 解决方案:
- 系统目录、其他用户目录用
sudo提升权限执行; - 用
-i参数排除无权限的目录,避免报错打断扫描。
2. 删除文件后,磁盘空间没有释放
原因:删除的文件正在被其他进程占用,Linux 中进程持有文件句柄时,文件不会真正被删除,直到进程退出。 解决方案:
- 用
lsof | grep deleted查看被删除但仍被占用的文件; - 重启对应的服务释放文件句柄,或直接重启服务器。
3. 软链接目录的大小统计异常
原因:gdu 默认仅统计软链接文件本身的大小,不会跟随链接统计实际目录内容。 解决方案:
- 扫描时添加
--follow-symlinks参数,跟随软链接统计实际大小; - 注意:该参数会避免循环链接,无需担心死循环问题。
4. 终端彩色输出异常、乱码
原因:终端不支持 256 色或 Unicode 字符。 解决方案:
- 添加
-c参数禁用彩色输出; - 添加
-u参数禁用 Unicode 符号。
八、总结
gdu 完美解决了传统磁盘分析工具的痛点:SSD 时代的性能瓶颈、复杂参数的学习成本、自动化场景的适配能力。
无论是新手用户想快速清理电脑磁盘,还是运维工程师应急排查服务器故障,亦或是开发人员分析项目依赖体积,gdu 都能以极致的速度和极简的操作,帮你搞定磁盘空间管理的所有需求。
它的核心优势可以用一句话概括:比它快的没它易用,比它易用的没它快,全平台通用,开箱即用。
最后,附上项目官方仓库,欢迎给作者 Star:https://github.com/Dundee/gdu
张芷铭的个人博客
Comments