golang磁盘使用分析命令行工具插件库gdu的使用

Golang磁盘使用分析命令行工具插件库gdu的使用

介绍

Gdu是一个用Go编写的快速磁盘使用分析工具,主要用于SSD磁盘,可以充分利用并行处理能力。当然在HDD上也能工作,但性能提升不那么明显。

Gdu

安装

使用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

配置示例

  1. 永久启用灰度模式:
echo "no-color: true" >> ~/.gdu.yaml
  1. 设置默认排序:
sorting:
    by: name  # size, name, itemCount, mtime
    order: desc
  1. 浏览目录时设置CWD变量:
echo "change-cwd: true" >> ~/.gdu.yaml
  1. 保存当前配置:
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

1 回复

更多关于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 语言编写的特性也保证了它的高性能和跨平台兼容性。

回到顶部