du 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于磁盘与存储命令族(见磁盘与存储命令族)。它和 df(见df)经常被一起提起,但职责不同。
du(disk usage,磁盘用量)统计某个文件或目录实际占了多少磁盘空间。磁盘快满了,想知道是哪个目录在吃空间?du 就是干这个的。
一、基本用法
bash
du -h file # 人类可读(K/M/G)显示单个文件
du -sh /var/log # -s 汇总、-h 可读:目录总大小
du -h -d 1 /var # -d 1 只显示一层子目录
-h(human-readable)把字节转成K/M/G,人眼看最舒服。-s(summarize)只给总数,不展开子项——查整个目录多大时必用。-d 1(等价于--max-depth=1)控制展开层数,避免列出成千上万个文件。
二、找出最占空间的目录
bash
du -h -d 1 / | sort -h | tail -20 # 根下一级目录按大小排序,看最大的
du -sh /* 2>/dev/null | sort -rh | head # 各顶级目录大小降序这是"磁盘报警"排查的标准动作:先
-d 1看哪一层目录最大,再逐层往下钻,定位到具体大文件/目录。sort -h能按人类可读单位正确排序(K<M<G)。
三、du 与 df 的区别(常考)
bash
du -sh /data # 文件实际占用
df -h /data # 文件系统整体使用du 看"文件用了多少",df 看"分区还剩多少"。两者不一致的常见原因:被删但仍在被进程占用的文件(空间被占着但目录里看不见,du 统计不到,df 统计得到)——这时用
lsof | grep deleted(见lsof)找进程,重启它释放空间。
四、排除与精确控制
bash
du -h -d 1 --exclude=*.log /app # 排除日志统计
du -sh --apparent-size file # 看"逻辑大小"而非磁盘块占用
--exclude在分析时剔除无关目录(如 node_modules)。--apparent-size显示文件逻辑大小,普通du显示占用的磁盘块数(稀疏文件、空洞文件两者差异大)。
一句话总结
du = 统计文件/目录磁盘占用(disk usage):-h 可读、-s 汇总总数、-d 1 只展一层;磁盘满了用 du -d 1 | sort -h 逐层定位大目录;du 看文件用量、df(见df)看分区余量,两者不一致常因"已删但仍被进程占用的文件"(用 lsof 找)。