055 du命令
命令说明
du(disk usage)统计目录/文件占用的磁盘空间,用于定位“磁盘满了”时哪个目录最大,是空间治理与清理的第一工具。
语法
du [选项]... [文件或目录]...
常用参数
| 参数 | 说明 |
|---|---|
| -s | 只汇总总计,不列出每个子目录(summary) |
| -h | 人类可读单位 K/M/G |
| --max-depth=N / -d N | 只显示到第 N 层子目录的汇总,定位大目录神器 |
| -a | 同时统计文件(默认只统计目录) |
| -c | 最后追加总计行 |
| -b | 显示表观大小(apparent size,含稀疏文件逻辑大小) |
| --exclude=模式 | 排除匹配的目录/文件不统计 |
| -x | 不跨越文件系统边界(不统计挂载的其他分区) |
| -l | 统计硬链接文件多次(默认只算一次) |
使用示例
$ du -sh /var/log
看 /var/log 总占用大小
$ du -h --max-depth=1 / | sort -rh | head
找出根目录下最大的一级目录(磁盘满排障)
$ du -sh *
当前目录下每项的大小
$ du -ah /opt | sort -rh | head -20
列出最大的 20 个文件/目录
$ du -sh /home/*
对比各用户家目录占用
$ du -sx --max-depth=1 /data
不跨挂载点统计 /data 本文件系统
$ du -sh --exclude=.git project
排除 .git 目录统计项目大小
$ du -sb /var/lib/mysql
看数据库表观大小(备份估算用)
实用技巧
- du 与 df 不一致的经典场景:已删除但仍被进程占用的文件(df 显示已用、du 找不到),lsof | grep deleted 定位后重启进程释放。
- du 统计的是实际磁盘块占用,稀疏文件、硬链接会让 du 与 ls -l(表观大小)差异巨大,对比时用 du -b 或 stat。
- --max-depth=1 + sort -rh 是定位大目录的标准组合,逐层下钻直到找到元凶。
- du 对无权限目录会报 Permission denied,用 sudo 跑;跨 NFS 统计慢,加 -x 限制本地文件系统。
- sort -h 需要 GNU coreutils 8.21+,老系统用 du -k | sort -rn 替代。