📊 一、命令基础:核心功能与定位
-
df
(Disk Free)- 功能 :显示文件系统级别的磁盘空间使用情况,包括总容量、已用空间、可用空间、使用率百分比及挂载点。
- 适用场景 :快速检查磁盘分区是否空间不足,例如监控根分区(
/
)或数据盘(/data
)的剩余空间。
-
du
(Disk Usage)- 功能 :统计目录或文件级别的磁盘占用空间,支持递归计算子目录。
- 适用场景 :定位大文件/大目录(如日志目录
/var/log
),分析存储消耗来源。
🛠️ 二、命令详解:选项与示例
1. df
命令常用选项及示例
选项 | 作用 | 示例命令 | 输出说明 |
---|---|---|---|
-h |
人类可读格式(KB/MB/GB) | df -h |
显示易读的磁盘使用情况 |
-T |
显示文件系统类型(如ext4、xfs) | df -T /home |
输出包含文件系统类型的分区信息 |
-i |
显示inode使用情况 | df -i |
检查inode是否耗尽(小文件过多时常见) |
--total |
显示所有文件系统的总计 | df -h --total |
末尾汇总所有分区的空间使用 |
典型输出:
bash
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 20G 15G 4.0G 79% /
/dev/sdb1 xfs 100G 60G 40G 60% /data
2. du
命令常用选项及示例
选项 | 作用 | 示例命令 | 输出说明 |
---|---|---|---|
-h |
人类可读格式 | du -h ~/Documents |
显示目录下各文件/子目录大小 |
-s |
仅显示汇总值(不展开子目录) | du -sh /var/log |
输出目录总大小(如1.2G /var/log ) |
--max-depth=N |
限制递归深度 | du -h --max-depth=1 /usr |
仅显示/usr 下一级子目录大小 |
-a |
包括文件在内的所有项 | `du -ah /tmp | sort -rh` |
-c |
显示总计 | du -ch *.log |
计算所有.log文件总大小 |
典型场景:
bash
# 查找当前目录下占用最大的前5个目录
$ du -h --max-depth=1 | sort -rh | head -n 5
12G ./database
8.4G ./logs
3.2G ./backups
1.1G ./downloads
24G . # 当前目录总计
⚖️ 三、核心区别:df
vs du
维度 | df |
du |
原因说明 |
---|---|---|---|
作用范围 | 文件系统整体(分区/挂载点) | 具体目录或文件 | df 读取文件系统元数据;du 遍历文件 |
输出内容 | 总容量、可用空间、使用率百分比 | 目录/文件的实际占用空间 | df 关注剩余空间;du 关注已用空间 |
性能影响 | 低(直接读取内核缓存) | 高(需递归遍历文件树) | 大目录下du 可能消耗较多I/O资源 |
不一致场景 | 显示100%已用,但du 统计值更少 |
统计值小于df 的已用空间 |
文件被删除但未释放(进程仍占用句柄) |
💡 关键差异示例 :
若
rm
删除一个大文件后,du
统计值立即减少,但df
显示空间未释放------因文件被进程占用(可通过lsof | grep deleted
定位进程并重启释放)。
🔍 四、典型应用场景
1. 磁盘空间不足排查
- 步骤1 :用
df -h
定位满盘的分区(如/
分区使用率95%)。 - 步骤2 :用
du -sh /* --max-depth=1
检查根目录下各子目录大小,找到最大占用(如/var
)。 - 步骤3 :逐层深入分析:
du -h --max-depth=1 /var
→du -h /var/log | sort -rh
。
2. Inode耗尽问题
- 现象:创建文件失败,但
df -h
显示空间充足。 - 解决:
df -i
检查inode使用率,若100%则清理小文件(如临时文件、缓存)。
3. 自动化监控脚本
bash
# 磁盘空间超过90%时邮件告警
THRESHOLD=90
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
echo "警告:根分区使用率 ${USAGE}%" | mail -s "磁盘告警" admin@example.com
fi
🧩 五、命令组合技巧
-
快速定位大文件
bashdu -ah / | sort -rh | head -n 20 # 全盘查找最大的20个文件
-
排除特定目录
bashdu -h --exclude="*.cache" --max-depth=2 # 忽略.cache目录
-
跨文件系统统计
bashdu -x / # 跳过其他文件系统(如NFS挂载点)
💎 总结
-
df
:监控分区整体空间,用于预防磁盘耗尽。 -
du
:分析具体存储消耗来源,用于清理大文件/目录。 -
黄金组合 :
bashdf -h → 定位问题分区 → du --max-depth逐层排查 → 清理目标
⚠️ 操作注意 :生产环境慎用
rm -rf
,建议先truncate -s 0 大文件
清空内容,再逐步删除。对关键目录操作前备份(如tar -czvf backup.tar.gz /path
)。