Appearance
du 命令:深入分析磁盘使用情况的利器
1. 命令简介
du
(Disk Usage 的缩写)是一个强大的 Unix/Linux 命令行工具,用于估算文件和目录的磁盘空间使用情况。与df
命令不同,du
可以深入到文件系统的目录结构中,提供更详细的磁盘使用分析。这个命令在系统管理、存储优化和故障排查中非常有用。
2. 基本语法
bash
du [选项] [文件...]
3. 常用选项详解
-h
或--human-readable
: 以人类可读的格式显示大小(如 K, M, G)-s
或--summarize
: 仅显示总计-c
或--total
: 显示总计和所有参数的总和-a
或--all
: 显示所有文件的大小,而不仅仅是目录-d N
或--max-depth=N
: 显示目录总计的最大深度--apparent-size
: 显示表面大小而不是磁盘使用量--time
: 显示最后修改时间-x
或--one-file-system
: 跳过不同文件系统上的目录
4. 基础用法示例
4.1 显示当前目录及其子目录的磁盘使用情况
bash
du -h
输出示例:
4.0K ./dir1/subdir1
8.0K ./dir1
4.0K ./dir2
16K .
4.2 显示特定目录的总磁盘使用量
bash
du -sh /home/user
输出示例:
5.2G /home/user
4.3 显示多个目录的磁盘使用情况
bash
du -sh /var /opt /usr
输出示例:
1.2G /var
420M /opt
4.8G /usr
5. 高级用法和技巧
5.1 按大小排序显示目录
bash
du -h /path/to/directory | sort -rh | head -n 10
这将显示指定目录下最大的 10 个子目录或文件。
5.2 显示指定深度的目录使用情况
bash
du -h --max-depth=2 /
这将显示根目录下两层深度的磁盘使用情况。
5.3 排除特定目录
bash
du -h / --exclude=/proc --exclude=/sys
这将显示根目录的磁盘使用情况,但排除 /proc 和 /sys 目录。
5.4 只显示超过特定大小的文件或目录
bash
du -h /path | awk '$1 ~ /G/ {print $0}'
这将只显示大小为 GB 级别的文件或目录。
6. 实际应用场景
6.1 查找并删除大文件
bash
#!/bin/bash
# find_and_delete_large_files.sh
DIRECTORY="/path/to/search"
SIZE="100M" # 设置大文件的阈值,这里是 100MB
echo "Finding files larger than $SIZE in $DIRECTORY"
find "$DIRECTORY" -type f -size +$SIZE -print0 | xargs -0 du -h | sort -rh
echo "Do you want to delete these files? (y/n)"
read answer
if [ "$answer" = "y" ]; then
find "$DIRECTORY" -type f -size +$SIZE -delete
echo "Files deleted."
else
echo "Operation cancelled."
fi
这个脚本会找出指定目录下超过特定大小的文件,并给用户选择是否删除这些文件。
6.2 创建磁盘使用报告
bash
#!/bin/bash
# disk_usage_report.sh
REPORT_FILE="disk_usage_report_$(date +%Y%m%d).txt"
echo "Disk Usage Report - $(date)" > $REPORT_FILE
echo "=======================================" >> $REPORT_FILE
echo -e "\nLargest Directories:" >> $REPORT_FILE
du -h / 2>/dev/null | sort -rh | head -n 20 >> $REPORT_FILE
echo -e "\nLargest Files:" >> $REPORT_FILE
find / -type f -exec du -Sh {} + 2>/dev/null | sort -rh | head -n 20 >> $REPORT_FILE
echo -e "\nFile Types and Their Total Sizes:" >> $REPORT_FILE
find / -type f -name '*.*' 2>/dev/null | sed 's|.*\.||' | sort | uniq -c | sort -rn | head -n 20 >> $REPORT_FILE
echo "Report generated: $REPORT_FILE"
这个脚本创建一个详细的磁盘使用报告,包括最大的目录、文件以及按文件类型统计的使用情况。
7. 性能考虑
- 对于大型文件系统,
du
可能需要较长时间执行,特别是使用-a
选项时。 - 使用
--apparent-size
选项可能会更快,但可能不会反映实际的磁盘使用情况。 - 在有大量小文件的目录中,
du
可能会很慢。考虑使用-S
选项来分别显示目录的总大小。
8. 安全注意事项
- 在多用户系统中,普通用户可能无法访问某些目录,导致不完整的结果。
- 避免在公开脚本中硬编码敏感的文件路径。
- 在执行自动化清理脚本时要格外小心,确保不会删除重要文件。
9. 与其他工具的集成
- 结合
find
命令可以进行更复杂的文件搜索和大小分析。 - 与
awk
,sed
,sort
等命令配合使用可以实现更高级的数据处理和展示。 - 可以与
cron
结合使用,定期生成磁盘使用报告。
10. 故障排除
- 如果
du
显示的大小与预期不符,检查是否有隐藏文件或者符号链接导致的重复计算。 - 在 NFS 或其他网络文件系统上,
du
可能会变得非常慢。考虑使用-x
选项限制在单一文件系统内。 - 如果遇到权限问题,可以使用
sudo
运行du
,但要谨慎使用。
11. 相关命令
df
: 报告文件系统磁盘空间使用情况ncdu
: 提供交互式的磁盘使用分析find
: 搜索文件和目录ls
: 列出目录内容sort
: 对文本进行排序xargs
: 从标准输入构建和执行命令行
通过掌握这些 du
命令的高级用法和技巧,系统管理员和开发人员可以更有效地分析和管理磁盘空间,优化存储使用,并快速识别可能的问题区域。