golang磁盘使用分析命令行工具插件库gdu的使用
Golang磁盘使用分析命令行工具插件库gdu的使用
介绍
Gdu是一个用Go编写的快速磁盘使用分析工具,主要用于SSD磁盘,可以充分利用并行处理能力。当然在HDD上也能工作,但性能提升不那么明显。
安装
使用curl安装
curl -L https://github.com/dundee/gdu/releases/latest/download/gdu_linux_amd64.tgz | tar xz
chmod +x gdu_linux_amd64
mv gdu_linux_amd64 /usr/bin/gdu
使用Docker运行
docker run --rm --init --interactive --tty --privileged --volume /:/mnt/root ghcr.io/dundee/gdu /mnt/root
使用
基本命令
gdu [directory_to_scan] [flags]
常用标志
# 分析当前目录
gdu
# 显示表观大小而非磁盘使用量
gdu -a
# 防止写入操作
gdu --no-delete
# 分析指定目录
gdu <some_dir_to_analyze>
# 显示所有挂载的磁盘
gdu -d
# 将错误写入日志文件
gdu -l ./gdu.log <some_dir>
# 忽略某些路径
gdu -i /sys,/proc /
# 使用正则模式忽略路径
gdu -I '.*[abc]+'
# 从文件中读取要忽略的正则模式
gdu -X ignore_file /
# 仅使用黑白灰颜色
gdu -c /
非交互模式
# 仅打印统计信息,不启动交互模式
gdu -n /
# 不显示进度,适用于脚本输出
gdu -p /
# 仅显示指定目录的总使用量
gdu -ps /some/dir
# 显示前10大文件
gdu -t 10 /
# 将统计信息写入文件
gdu / > file
导出和导入分析数据
# 将所有信息导出为JSON文件
gdu -o- / | gzip -c >report.json.gz
# 从文件读取分析数据
zcat report.json.gz | gdu -f-
使用持久化键值存储
# 使用持久化键值存储保存分析数据
GOGC=10 gdu -g --use-storage /
# 从持久化键值存储读取保存的分析数据
gdu -r /
交互模式操作
在交互模式下可以使用以下快捷键:
- ↑ 或 k:向上移动光标
- ↓ 或 j:向下移动光标
- → 或 Enter 或 l:进入高亮目录
- ← 或 h:返回父目录
- d:删除选定的文件或目录
- e:清空选定的目录
- n:按名称排序
- s:按大小排序
- c:显示目录中的项目数
- ?:显示帮助对话框
配置文件
Gdu可以读取和写入YAML配置文件,默认会检查$HOME/.config/gdu/gdu.yaml
和$HOME/.gdu.yaml
。
配置示例
- 永久启用灰度模式:
echo "no-color: true" >> ~/.gdu.yaml
- 设置默认排序:
sorting:
by: name # size, name, itemCount, mtime
order: desc
- 浏览目录时设置CWD变量:
echo "change-cwd: true" >> ~/.gdu.yaml
- 保存当前配置:
gdu --write-config
性能优化
内存使用控制
Gdu会自动平衡性能与内存使用。如果需要手动控制垃圾回收,可以使用--const-gc
/-g
标志:
GOGC=200 gdu -g /
后台并行删除(实验性)
# 启用后台删除
echo "delete-in-background: true" >> ~/.gdu.yaml
# 启用并行删除
echo "delete-in-parallel: true" >> ~/.gdu.yaml
开发相关
运行测试
make install-dev-dependencies
make test
性能分析
启用--enable-profiling
标志后,可以通过http://localhost:6060/debug/pprof/
访问性能分析数据。
替代工具
- ncdu - 基于NCurses的纯C工具
- godu - 带有旋转木马式用户界面的分析器
- dua - Rust编写的类似gdu的工具
- diskus - 非常简单但非常快的Rust工具
- duc - 具有多种磁盘使用检查和可视化功能的工具集
- dust - Rust编写的显示树状磁盘使用结构的工具
- pdu - Rust编写的显示树状磁盘使用结构的工具
更多关于golang磁盘使用分析命令行工具插件库gdu的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang磁盘使用分析命令行工具插件库gdu的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang 磁盘使用分析工具 gdu 使用指南
gdu (Go Disk Usage) 是一个用 Go 语言编写的高性能磁盘使用分析命令行工具,类似于传统的 du
命令,但提供了更友好的交互式界面和可视化展示。
安装 gdu
使用预编译二进制
从 GitHub 发布页面 下载对应平台的二进制文件。
使用 Go 安装
go install github.com/dundee/gdu/v5/cmd/gdu@latest
使用包管理器
-
macOS (Homebrew):
brew install gdu
-
Linux (Snap):
sudo snap install gdu
基本使用方法
分析当前目录
gdu
分析指定目录
gdu /path/to/directory
常用选项
-i
忽略隐藏文件和目录-l
不跟随符号链接-m
显示模式 (dark/light)-p
分析完成后暂停-a
显示所有文件,包括空文件
交互式界面操作
gdu 启动后会显示一个交互式界面:
- 使用 方向键 或 hjkl 导航
- Enter 进入子目录
- Backspace 返回上级目录
- d 删除选中的文件/目录 (会要求确认)
- n 按文件名排序
- s 按大小排序
- C 按项目数排序
- q 退出
编程示例
以下是使用 Go 代码调用 gdu 并解析其输出的示例:
package main
import (
"bufio"
"fmt"
"os/exec"
"strings"
)
func main() {
// 调用gdu分析指定目录
cmd := exec.Command("gdu", "-n", "/path/to/directory")
stdout, err := cmd.StdoutPipe()
if err != nil {
fmt.Println("Error creating stdout pipe:", err)
return
}
if err := cmd.Start(); err != nil {
fmt.Println("Error starting command:", err)
return
}
// 解析gdu输出
scanner := bufio.NewScanner(stdout)
for scanner.Scan() {
line := scanner.Text()
// 这里可以添加自定义解析逻辑
fmt.Println("GDU Output:", line)
}
if err := cmd.Wait(); err != nil {
fmt.Println("Error waiting for command:", err)
}
}
高级功能
导出分析结果
gdu -o json /path/to/directory > analysis.json
忽略特定目录
创建 .gduignore
文件在要分析的目录中,内容为要忽略的模式:
node_modules/
*.log
比较两个目录
gdu -o json dir1 > dir1.json
gdu -o json dir2 > dir2.json
# 然后使用其他工具比较两个JSON文件
性能优化
gdu 默认会使用多线程扫描,对于大型文件系统扫描速度很快。如果需要限制资源使用:
gdu --max-cores 2 /path/to/directory
总结
gdu 是一个功能强大且用户友好的磁盘使用分析工具,特别适合需要快速了解磁盘空间占用情况的场景。它的交互式界面和可视化展示使得分析过程更加直观,而 Go 语言编写的特性也保证了它的高性能和跨平台兼容性。