《每日一命令14:df——磁盘空间去哪了?》
本期摘要
df是Linux下查看磁盘空间使用情况的命令。与du不同,df看的是文件系统的整体使用情况,而du看的是单个目录/文件的大小。掌握df -h(人类可读)、df -i(查看inode)、df -T(显示文件系统类型),就能快速判断磁盘是否满了、inode是否耗尽、以及哪个分区有问题。本文还提供了df与du结果不一致时的排查思路。
df是什么?
df= Disk Free,报告文件系统的磁盘空间使用情况。它从文件系统层面统计已用、可用、使用百分比。
与du的区别:
| 命令 | 统计范围 | 典型场景 |
|---|---|---|
df | 整个文件系统(分区) | 看磁盘还剩多少空间 |
du | 指定目录或文件 | 定位哪个目录/文件占空间 |
最常用的5种姿势
1. 人类可读格式
bash
df -h
输出示例:
text
Filesystem Size Used Avail Use% Mounted on /dev/sda1 40G 20G 18G 53% /
-h将大小自动转为K、M、G,适合日常查看。
2. 显示所有文件系统(包括虚拟)
bash
df -a
会显示 proc、sysfs、tmpfs 等临时文件系统,一般不用。
3. 查看 inode 使用情况
bash
df -i
inode 用满时即使磁盘还有空间也无法创建新文件。常见于小文件过多的场景(比如邮件服务器、缓存目录)。
4. 显示文件系统类型
bash
df -T
输出会多一列Type,如ext4、xfs、tmpfs。格式化或挂载时很有用。
5. 只查看指定文件系统
bash
df -h /var
只看/var分区,不用翻页。
进阶技巧
结合sort按使用率排序
bash
df -h | awk 'NR==1 || NR>1 {print $5,$6}' | sort -rnawk提取使用率和挂载点,sort -rn按百分比降序排列,最满的分区排最前面。
排除 tmpfs 等虚拟文件系统
bash
df -h -t ext4 -t xfs
只显示 ext4 和 xfs 类型的真实磁盘。
写监控脚本
bash
#!/bin/bash USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//') if [ $USAGE -gt 80 ]; then echo "根分区使用率超过80%" fi真实场景
场景1:磁盘明明有空间,却报“设备已满”
→ 用df -i检查 inode 是否耗尽。如果IUse%达到100%,说明小文件太多,需要删除。
场景2:df 显示已用很大,但 du 找不出大文件
可能性:
有进程删除了文件但未释放句柄(幽灵文件)
文件被挂载点覆盖
排查:
bash
lsof | grep deleted # 找幽灵文件 mount | grep "on /var" # 检查是否有子挂载点遮蔽
场景3:想看看哪个分区最紧张
bash
df -h | sort -k5 -rn | head -5
-k5按第五列(Use%)排序。
常用参数速查
| 参数 | 含义 |
|---|---|
-h | 人类可读 |
-i | 查看inode |
-T | 显示文件系统类型 |
-t | 只显示指定类型 |
-x | 排除指定类型 |
--total | 显示总计 |
下期预告
《每日一命令15:du——深度分析磁盘占用》
