Linux du & df
概述
磁盘使用分析双剑合璧 - 系统运维存储管理核心工具
du 命令
Disk Usage - 磁盘使用情况统计工具,用于查看目录和文件占用的磁盘空间大小。
统计目录/文件的实际占用空间
支持递归统计子目录
可以按大小排序显示
帮助定位占用空间的大文件
支持多种显示格式
df 命令
Disk Free - 文件系统磁盘空间使用情况报告工具,显示挂载的文件系统的可用空间。
显示文件系统总容量
显示已用和可用空间
显示使用百分比
查看挂载点信息
监控磁盘空间预警
du vs df 核心区别
| 对比维度 | du 命令 | df 命令 |
|---|---|---|
| 主要用途 | 统计目录/文件占用空间 | 显示文件系统剩余空间 |
| 分析对象 | 具体的目录和文件 | 整个文件系统/分区 |
| 显示信息 | 目录大小、文件大小 | 总容量、已用、可用、使用率 |
| 使用场景 | 查找占用空间的大文件/目录 | 监控磁盘空间是否充足 |
| 性能消耗 | 需要遍历目录,相对较慢 | 读取文件系统信息,速度快 |
运维实战命令大全
du 实战命令 df 实战命令 组合应用 监控脚本
基础用法
du -h /root/Dir_D_new/
以人类可读格式显示/root/Dir_D_new/目录大小
1.2G /root/Dir_D_new/
查找大目录
du -h --max-depth=1 /root/ | sort -hr
显示/root/下一级目录大小并按大小排序
1.5G /root/ 1.2G /root/Dir_D_new 235M /root/.cache 39M /root/tar_test 896K /root/backup 164K /root/.config 112K /root/ShellSummary 16K /root/backups 12K /root/.ssh 8.0K /root/.pki 8.0K /root/.pip 8.0K /root/Dir_A 8.0K /root/app 4.0K /root/Dir_C 4.0K /root/Dir_B 4.0K /root/chmod_test
TOP N 最大文件
du -ah /var | sort -hr | head -10
找出/var目录下占用空间最大的前10个文件/目录
指定大小阈值
du -h /home --threshold=1G
只显示大于1GB的目录
实时监控
watch -n 5 'du -sh /var/log'
每5秒钟监控/var/log目录大小变化
生成报告
du -h /home > disk_usage_report.txt 2>&1
将磁盘使用情况导出到报告文件
基础查看
df -h
以人类可读格式显示所有挂载的文件系统
Filesystem Size Used Avail Use% Mounted on /dev/sda1 20G 8.5G 11G 45% / /dev/sda2 100G 45G 50G 48% /home tmpfs 2.0G 0 2.0G 0% /dev/shm
监控特定分区
df -h /home
只显示/home分区的使用情况
显示inode使用情况
df -i
显示inode使用情况,对于小文件很多的情况很有用
Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 1310720 145678 1165042 12% /
磁盘空间预警
df -h | awk '$5 > 80 {print "WARNING: " $0}'
显示使用率超过80%的分区预警
排除特定文件系统
df -h -x tmpfs -x devtmpfs
排除临时文件系统,只显示实际磁盘分区
按文件系统类型筛选
df -t ext4
只显示ext4文件系统的使用情况
磁盘空间完整分析
echo "=== 文件系统概览 ===" && df -h && echo -e "\n=== 大目录TOP5 ===" && du -h /home --max-depth=1 | sort -hr | head -5
组合显示文件系统使用情况和最大目录
深度磁盘分析
df -h | grep -vE '^Filesystem|tmpfs|cdrom|udev' | awk '{print $5 " " $1}' | while read output; do echo $output; if [ ${output%\%} -ge 85 ]; then du -h ${output#* } --max-depth=1 | sort -hr | head -5; fi; done
对使用率超过85%的分区进行详细分析
生成磁盘使用报告
{ echo "磁盘使用情况报告 - $(date)"; echo "=================="; df -h; echo -e "\n大文件TOP10:"; find /home -type f -size +100M -exec ls -lh {} \; | sort -k5 -hr | head -10; } > disk_report.txt
生成包含磁盘使用和大文件信息的综合报告
一键清理分析
df -h && echo -e "\n可清理的大文件:" && find /tmp /var/tmp -type f -size +50M -mtime +7 -ls
显示磁盘使用情况并找出可清理的临时大文件
磁盘监控脚本
#!/bin/bash # 磁盘空间监控脚本 THRESHOLD=80 df -h | awk 'NR>1 {gsub(/%/,"",$5); if($5 > '$THRESHOLD') print "WARNING: " $0}'
创建磁盘空间监控脚本,超过阈值时发出警告
邮件报警脚本
#!/bin/bash USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//') if [ $USAGE -gt 85 ]; then echo "磁盘使用率达到${USAGE}%" | mail -s "磁盘空间警告" admin@company.com fi
磁盘使用率超过85%时自动发送邮件警告
定时清理脚本
# 添加到crontab: 0 2 /path/to/cleanup.sh #!/bin/bash find /tmp -type f -mtime +7 -delete find /var/log -name ".log" -mtime +30 -delete logger "自动清理脚本执行完成"
定时清理临时文件和旧日志,释放磁盘空间
运维实战技巧
性能优化技巧
du命令在大目录上执行较慢,可使用 --max-depth 限制深度
使用 du -x 避免跨文件系统统计
大文件查找时结合 find 命令更高效
常见陷阱
du统计的是文件实际占用空间,df显示的是文件系统可用空间
删除大文件后df显示空间未释放,可能是进程仍在使用该文件
软链接文件du只统计链接本身大小,不统计目标文件
运维最佳实践
定期使用cron任务监控磁盘使用率
设置磁盘使用率阈值警告(建议85%)
建立日志轮转机制,定期清理旧日志文件
记忆口诀
du: Directory Usage - 目录使用情况
df: Disk Free - 磁盘剩余空间
-h: human readable - 人类可读格式
-i: inode - 文件节点信息