Linux du 命令详解:精准探查文件和目录的磁盘占用
在 Linux 系统管理中,磁盘空间是核心资源之一。当遇到磁盘空间不足、系统响应缓慢或存储规划需求时,准确找出占用空间最大的文件和目录至关重要。du(disk usage)命令正是解决这一问题的利器,它能递归计算文件和目录占用的磁盘块数。
一、du 命令基础与原理
du 通过读取文件系统元数据来估算使用量。默认情况下,它以 1K 块为单位显示结果,并递归遍历指定目录下的所有子目录和文件。
基本用法
直接运行 du 会列出当前目录下所有子项的大小:
$ du ./subdir1
4 ./subdir1
$ du ./subdir2
8 ./subdir2
输出格式为:占用块数 + 路径。注意,这里的数字单位取决于系统配置,通常默认为 1024 字节。
常用选项速览
-a:显示所有文件及目录的大小(默认只显示目录)。-h:以人类可读格式显示(K, M, G 等)。-s:仅显示总计大小,不展开子目录详情。-c:在列表末尾显示总计。-x:限制在当前文件系统内,不跨越挂载点。
二、实战场景与组合技巧
单纯使用 du 往往不够直观,结合其他工具能大幅提升效率。
1. 快速定位大文件
排序后取前几名,能快速锁定'磁盘杀手':
# 查看根目录下最大的 10 个目录
$ du -ah / | sort -rh | head -10
# 查看当前目录下最大的 5 个文件
$ du -ah . | sort -rh | head -5
这里使用了 sort -rh 按人类可读格式反向排序,配合 head 截取关键信息。
2. 筛选特定类型文件
结合 grep 可以过滤出特定后缀的文件:
# 查找大于 100MB 的日志文件
$ du -h /var/log | grep -E '[0-9]+G|[0-9]+M' | grep '\.log$'
3. 脚本自动化监控
在运维脚本中,我们常需要设定阈值告警。下面是一个简单的监控示例:
#!/bin/bash
TARGET_DIR="/home/user"
THRESHOLD=100 # MB
USAGE=$(du -sm "" 2>/dev/null | -f1)
[ -gt ];


