du[1](disk usage)命令用于估算文件和目录的磁盘空间使用量。
基本语法:
du [选项]... [文件]...
# 当前目录下的文件与子目录$ lsfile1.txt file2.txt file3.txt file4.txt t.py vim
直接无参数使用。
du
$ du8 ./vim12 .
指定文件或目录。
du ./vimdu file1.txt ./vim
一、选项详解
1. 显示所有文件
du -adu --all
示例:
# 显示当前目录下所有文件和目录的大小$ du -a4 ./vim/xx.py8 ./vim0 ./file3.txt0 ./t.py0 ./file1.txt0 ./file2.txt0 ./file4.txt12 .
2. 人性化显示
du -hdu --human-readable
$ du -h8.0K ./vim12K .
du --si
$ du --si8.2k ./vim13k .
3. 总计汇总
du -cdu --total
$ du -c8 ./vim12 .12 total
du -sdu --summarize
$ du -s12 .
组合使用示例:
# 显示每个目录的总大小(人性化显示)$ du -sh /home /var /tmp20K /home43M /var3.4M /tmp# 显示当前目录下所有项目的各自大小$ du -sh *0 file1.txt0 file2.txt0 file3.txt0 file4.txt0 t.py8.0K vim
4. 指定块大小
du -k
# 实例$ du -k8 ./vim12 .
du -m
- 以
1MB(1,048,576 字节)块为单位显示
# 实例$ du -m1 ./vim1 .
du -B 1Gdu --block-size=1G
# 实例$ du -B 1G1 ./vim1 .
5. 显示字节大小
du -bdu --bytes
- 等价于
--apparent-size --block-size=1
# 实例$ du -b41 ./vim41 .
du --apparent-size
示例:
# 创建一个稀疏文件$ dd if=/dev/zero of=sparse_file bs=1 count=0 seek=1G# 显示实际磁盘使用(可能很小)$ du -h sparse_file0 sparse_file# 显示1G$ du -h --apparent-size sparse_file1.0G sparse_file
6. 目录深度控制
du -d 1du --max-depth=1
示例:
# 只显示/home下第一级子目录的大小$ du -h --max-depth=1 /home16K /home/ubuntu20K /home# depth=0$ du -h -d 0 /home20K /home
7. 符号链接处理
du -Ldu --dereference
du -Ddu --dereference-argsdu -H
du -Pdu --no-dereference
8. 硬链接计数
du -ldu --count-links
9. 单独目录统计
du -Sdu --separate-dirs
对比示例:
# 不使用-S:目录大小包括子目录$ du -h /home16K /home/ubuntu20K /home# 使用-S:目录大小不包括子目录$ du -h -S /home16K /home/ubuntu4.0K /home
10. 文件排除
du --exclude='*.o'
du -X exclude.txtdu --exclude-from=exclude.txt
示例:
# 排除所有.o文件和.git目录du -h --exclude='*.o' --exclude='.git' project/
11. 跨文件系统限制
du -xdu --one-file-system
12. 大小阈值过滤
du -t 100Mdu --threshold=100M
du -t -500k
实用示例:
# 查找大于100MB的目录du -h --threshold=100MB# 查找小于1MB的文件和目录du -a -h -t -1MB# 查找使用超过20000个inode的目录du --inodes -x --threshold=20000 /
13. 时间戳显示
du --time
du --time=atimedu --time=access
du --time=ctimedu --time=status
du --time-style=iso
- 可用格式:full-iso, long-iso, iso, 或自定义格式
示例:
$ du -h --time8.0K 2026-01-15 10:50 ./vim12K 2026-01-15 11:08 .$ du -h --time=atime --time-style=long-iso8.0K 2026-01-15 10:50 ./vim12K 2026-01-15 11:08 .
14. 处理大量文件
du --files0-from=file_list.txt
示例:
# 生成文件列表$ find /home -type f -print0 > files.txt# 处理列表中的文件$ du --files0-from=files.txt
15. 以 NULL 结尾输出
du -0du --null
示例:
$ du -08 ./vim12 .
16. inode 使用情况
du --inodes
示例:
$ du --inodes -h /home$ du --inodes -a -h /home1 /home/ubuntu/.profile1 /home/ubuntu/.bashrc1 /home/ubuntu/.bash_logout4 /home/ubuntu5 /home
二、实用示例
1:查找大文件/目录
# 查找当前目录下最大的10个目录du -h --max-depth=1 | sort -hr | head -10# 查找所有大于100MB的文件du -a -h -t 100MB | sort -hr
2:按用户统计
# 统计/home下各用户目录大小du -sh /home/*du -sch /home/* | tail -1
3:监控日志目录
# 查看/var/log目录大小du -sh /var/logdu -h --max-depth=1 /var/log
4:备份前检查
# 检查要备份的目录总大小du -sch /etc /home
5:与 find 协作
# 查找30天前修改的大于10MB的文件find /var/log -type f -mtime +30 -exec du -h {} + 2>/dev/null
# 查找并统计特定类型的文件find . -name "*.jpg" -exec du -ch {} + | tail -1
6. 其它
# 监控目录大小变化watch -n 5 "du -sh /tmp"
# 生成详细的磁盘使用报告du -ah /home | sort -rh > disk_usage_report.txt
# 排除多种类型的文件du -h --exclude='*.log' --exclude='*.tmp' --exclude='cache' /var
最后,du 命令更适合估算文件集合的备份大小,而非精确测量设备空间使用量。在需要精确磁盘空间信息时,建议结合使用 df 命令。
参考资料
[1] du: https://man.archlinux.org/man/du.1