du 命令详解

duDisk Usage 的缩写,是 Linux 中最常用的检查文件和目录占用空间的命令。

针对你之前磁盘空间不足的情况,熟练使用 du 能帮你迅速定位到底是谁在吃掉你的硬盘。


1. 最常用的基础组合

这是你最需要记住的三个参数组合:

  • du -sh *最实用的快速检查

    • -s (summary):只显示总计。

    • -h (human-readable):以 KB, MB, GB 显示(而不是一串长数字)。

    • *:查看当前线下所有文件和文件夹的大小。

  • du -ah:显示当前目录下所有文件(包括隐藏文件)的大小,而不仅仅是文件夹。


2. 深度控制:定位大文件夹

如果你想知道某个大文件夹(比如 /var)里到底是哪个子目录占空间,但不想看太深的内容:

  • du -h --max-depth=1 /var:只显示 /var 下第一层目录的大小。

  • du -h --max-depth=2 /root:显示到第二层,适合深入挖掘。


3. 排序与查找(配合管道符)

这是找出“磁盘流氓”的最快办法:

  • 找出当前目录下最大的 10 个东西

    Bash

    du -ah | sort -rh | head -n 10
    
    • sort -r:逆序排列。

    • sort -h:按照人类可读的大小(G > M > K)智能排序。


4. 统计特定时间的文件

如果你怀疑是最近生成的日志文件导致磁盘爆满:

  • du -h --time /var/log:不仅显示大小,还会显示该目录或文件最后修改的时间。

5. 排除特定目录或文件

有时候你挂载了外部硬盘或不想看某个巨大的缓存文件夹(比如 .git):

  • du -h --exclude="*.log" .:统计当前目录大小,但排除掉所有 .log 文件。

  • du -h --exclude="./go":排除掉你的 Go 依赖包目录进行统计。


6. 实战总结表

命令示例 使用场景
du -sh 快速查看当前文件夹总共多大
du -sh * 看看当前目录下哪个子目录或文件最大
du -ch 在列表最后增加一行 total 总计
du -sh / --exclude=/proc 统计整个根目录(排除虚拟文件系统)

💡 给你的特别建议

既然你正在开发 Go 程序并涉及 SQLite:

  1. 定期检查数据库文件du -h your_database.db。如果它增长过快,可能需要执行 VACUUM 命令。

  2. 清理编译缓存:如果你发现 /root/.cache/go-build 很大,用 du -sh ~/.cache/go-build 确认后,可以用 go clean -cache 清理。

下一步你是否需要我写一个简单的 Shell 脚本,放入 crontab 中,实现“当磁盘剩余空间低于 10% 时,自动删除旧日志”的功能?