系统监控 / 命令文档
Linux du & df 命令
概述
掌握磁盘空间管理的核心技能
du
命令含义
disk usage - 统计目录或文件所占用的磁盘空间大小
核心功能:递归统计目录及其子目录的大小
使用场景
查找占用空间最大的目录
清理磁盘空间前的空间分析
监控项目目录大小变化
备份前评估数据量
常用参数
-h # 人类可读格式 (K, M, G) -s # 只显示总计 -a # 显示所有文件和目录 -d # 指定递归深度 -x # 不跨越文件系统边界 --max-depth=N # 最大递归深度
df
命令含义
disk free - 显示文件系统的磁盘空间使用情况
核心功能:查看挂载点的总空间、已用空间和可用空间
使用场景
监控系统磁盘使用率
检查是否有磁盘空间不足
了解各个分区的空间分布
系统性能优化分析
常用参数
-h # 人类可读格式 (K, M, G) -T # 显示文件系统类型 -i # 显示inode使用情况 -x # 排除指定文件系统类型 -t # 只显示指定文件系统类型 -a # 显示所有文件系统
du vs df 核心区别
| 对比项 | du 命令 | df 命令 |
|---|---|---|
| 主要功能 | 统计目录/文件实际占用空间 | 显示文件系统总体空间情况 |
| 统计范围 | 指定路径下的内容 | 整个文件系统/分区 |
| 计算方式 | 递归遍历统计文件大小 | 读取文件系统元数据 |
| 执行速度 | 较慢(需要遍历文件) | 很快(读取系统信息) |
| 结果精度 | 显示实际文件占用 | 显示分配的块空间 |
运维实战命令
场景1:系统空间不足排查
# 查看根目录下各目录大小,按大小排序 du -sh /* 2>/dev/null | sort -hr # 查看当前目录下最大的10个目录 du -sh * | sort -hr | head -10 # 递归查找超过100M的目录 du -h --max-depth=2 / | awk '$1 ~ /[0-9]+G|[5-9][0-9][0-9]M|[0-9][0-9][0-9][0-9]M/'
场景2:磁盘使用率监控
# 检查磁盘使用率超过80%的分区
df -h | awk 'NR>1 && $5+0 > 80 {print $0}'
# 显示详细的文件系统信息
df -Th
# 监控inode使用情况(防止小文件过多)
df -i | awk 'NR>1 && $5+0 > 80 {print "inode警告: " $0}'场景3:日志清理分析
# 统计日志目录大小
du -sh /var/log
# 查看日志目录下各子目录大小
du -h --max-depth=1 /var/log | sort -hr
# 查找7天前的大日志文件
find /var/log -name "*.log" -mtime +7 -size +100M -exec du -h {} \;场景4:用户目录管理
# 统计所有用户主目录大小 du -sh /home/* | sort -hr # 查看当前用户目录详细分析 du -h --max-depth=2 ~ | sort -hr # 找出隐藏目录的大小 du -sh ~/.[^.]* 2>/dev/null
专家运维提示
性能优化:
大目录用 du -s 避免过多输出
使用 --max-depth 限制递归深度
combine with find 命令提高效率
定期监控避免空间耗尽
故障排查:
df 和 du 结果不一致检查已删除但未释放的文件
使用 lsof 查找占用已删除文件的进程
inode耗尽比空间耗尽更难处理
定期清理临时文件和日志
进阶运维技巧
#!/bin/bash
echo "=== 系统磁盘空间分析报告 ==="
echo "1. 磁盘使用率:"
df -h | grep -E "^/dev"
echo -e "\n2. 最大的5个目录:"
du -sh /* 2>/dev/null | sort -hr | head -5
echo -e "\n3. inode使用情况:"
df -i | awk 'NR>1 && $5+0 > 70 {print " " $0}'
echo -e "\n4. 临时文件统计:"
du -sh /tmp /var/tmp 2>/dev/null