du 命令(Disk Usage)用于估算文件和目录的磁盘使用空间。与df命令不同,du是从文件和目录的角度来统计磁盘空间使用情况,特别适合查找占用大量空间的文件或目录。
du [选项] [文件或目录...]
如果不指定文件或目录,则显示当前目录及其子目录的磁盘使用情况。
| 选项 | 说明 |
|---|---|
-h 或 --human-readable |
以易读格式显示(K、M、G) |
-s 或 --summarize |
仅显示总计,不显示每个子目录的详细情况 |
-c 或 --total |
显示总计信息 |
--max-depth=N |
限制显示目录的深度为N级 |
-a 或 --all |
显示所有文件,包括普通文件(默认只显示目录) |
--time |
显示文件的最后修改时间 |
-x 或 --one-file-system |
不跨越文件系统边界,只统计当前文件系统 |
-t SIZE 或 --threshold=SIZE |
只显示大小超过SIZE的文件或目录 |
--exclude=PATTERN |
排除匹配PATTERN的文件或目录 |
-L 或 --dereference |
跟踪符号链接指向的实际文件 |
-l 或 --count-links |
如果是硬链接,重复计算其大小 |
# 查看当前目录及其所有子目录的磁盘使用情况
du
# 以易读格式显示
du -h
默认以KB为单位显示,使用-h选项会以K、M、G为单位显示,更加直观。
# 查看/var/log目录的大小
du -h /var/log
# 查看多个目录的大小
du -h /var/log /tmp /home
# 只显示目录的总计大小,不显示子目录详情
du -sh /var/log
# 查看多个目录的总计大小并显示总和
du -sch /var/log /tmp /home
示例输出:
12M /var/log
45M /tmp
4.2G /home
4.3G total
# 只显示当前目录下第一级子目录的大小
du -h --max-depth=1
# 显示当前目录下两级子目录的大小
du -h --max-depth=2
# 显示当前目录下所有文件的磁盘使用情况
du -ah
# 按大小排序显示前10个最大的文件
du -ah | sort -rh | head -10
# 查找当前目录下大于100M的文件
du -ah | sort -rh | awk '$1 ~ /M$/ && $1+0 > 100'
# 使用find命令结合du查找大文件
find . -type f -size +100M -exec du -h {} \;
# 排除所有.log文件
du -h --exclude="*.log"
# 排除多个目录
du -h --exclude=node_modules --exclude=.git
# 排除匹配模式的文件
du -h --exclude="*.tmp" --exclude="*.cache"
# 显示文件的最后修改时间和大小
du -ah --time
# 仅显示最近修改的文件
du -ah --time | sort -k2 | tail -20
# 查看当前目录下哪个子目录占用空间最大
du -sh * | sort -rh | head -10
# 查看/var/log目录下哪些日志文件最大
du -ah /var/log | sort -rh | head -20
# 找到大日志文件后可以清理
sudo truncate -s 0 /var/log/syslog
# 使用watch命令实时监控目录大小变化
watch -n 60 'du -sh /var/log'
# 查看指定时间段内的目录大小变化
du -sh /var/log >> log_size_history.txt
date >> log_size_history.txt
# 查看node_modules目录大小
du -sh node_modules
# 查看项目中各依赖包的大小
du -sh node_modules/* | sort -rh | head -20
# 1. 查找当前目录下最大的10个文件或目录
du -sh * | sort -rh | head -10
# 2. 查找指定目录下所有大于100M的文件
find /path/to/dir -type f -size +100M -exec du -h {} \; | sort -rh
# 3. 统计当前目录下不同文件类型的总大小
find . -type f -name "*.jpg" -exec du -ch {} + | grep total
find . -type f -name "*.mp4" -exec du -ch {} + | grep total
# 4. 按月统计目录大小变化
du -sh /var/log > /tmp/log_size_$(date +%Y%m).txt
# 5. 排除隐藏文件查看目录大小
du -sh --exclude=".*" .
sudo-L选项会统计链接指向的实际文件-l选项会重复计算-x选项限制在当前文件系统# 1. 对大目录使用-x选项提高速度
du -hx / # 只统计根文件系统,不跨越其他挂载点
# 2. 限制统计深度避免扫描过多文件
du -h --max-depth=3 /home
# 3. 使用--exclude排除不需要统计的目录
du -h --exclude=node_modules --exclude=.git /project
# 4. 对结果进行排序时注意性能
du -ah /var | sort -rh > /tmp/du_result.txt # 对大结果先保存再排序
除了命令行工具,还有一些可视化工具可以帮助分析磁盘使用情况:
安装示例:sudo apt install ncdu