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 替代。