Linux df命令详解
Linux df 命令详解 🐧📊💽
学习目标 🎯
- 理解
df命令的基本功能与使用场景。 - 掌握查看文件系统磁盘空间使用情况的方法,包括挂载点、使用率、文件系统类型等信息。
- 了解不同 Linux 发行版(如 Ubuntu、CentOS、EulerOS)在默认行为和输出格式上的差异。
- 能结合实际开发、运维、脚本编写等场景灵活运用
df。 - 熟悉常见错误及优化建议,避免误操作导致资源浪费或系统性能下降。
核心重点 ✅
| 类别 | 内容 |
|---|---|
| 命令含义 | disk free 查看磁盘剩余空间 |
| 基本语法 | df [选项] [路径] |
| 核心功能 | - 显示所有挂载点的磁盘使用情况 - 按使用率排序查找“满盘”分区 |
| 常用参数 | -h, -T, -t, -x, -i, --output |
| 权限控制 | 不需要特殊权限,普通用户可执行 |
| 跨平台差异 | 输出字段顺序略有不同,但功能一致 |
详细讲解 💡
1. 基本介绍 📘
📌 功能:
df 是 disk free 的缩写,用于显示当前系统中各个挂载点的磁盘空间使用情况。它是 Linux 中最常用的磁盘监控工具之一,尤其适合用于排查磁盘是否快满了。
📌 语法:
df [选项] [路径]
📌 示例:
df -h
👀 输出示例(Ubuntu):
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 25G 15G 63% /
tmpfs 984M 0 984M 0% /dev/shm
/dev/sdb1 100G 70G 30G 70% /data
2. 常用参数详解 🛠️
✅ -h:人类可读格式(human-readable)
自动将字节转为 KB/MB/GB:
df -h
👀 应用:便于快速阅读磁盘容量。
✅ -T:显示文件系统类型(filesystem type)
df -Th
👀 输出示例:
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 40G 25G 15G 63% /
/dev/sdb1 xfs 100G 70G 30G 70% /data
👀 应用:排查特定文件系统的问题,如 ext4 vs xfs 的兼容性。
✅ -t TYPE:只显示指定类型的文件系统
df -t ext4
👀 应用:过滤出某个文件系统的挂载点。
✅ -x TYPE:排除指定类型的文件系统
df -x tmpfs
👀 应用:忽略临时文件系统,聚焦真实磁盘分区。
✅ -i:按 inode 使用情况显示
df -i
👀 输出示例:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 123456 2497984 5% /
👀 应用:排查 inode 被耗尽问题(即使磁盘没满也可能无法写入新文件)。
✅ --output=FIELD1,FIELD2,...:自定义输出字段
df --output=target,source,size,used,avail
👀 应用:脚本中提取特定字段做处理。
3. 实际应用场景 🏢
🧱 场景一:定时检查磁盘使用率并预警
#!/bin/bash
THRESHOLD=90
while read line; do
use=$(echo $line | awk '{print $5}' | tr -d '%')
if [ "$use" -ge "$THRESHOLD" ]; then
echo "警告:磁盘使用率超过 ${THRESHOLD}%!"
echo $line
fi
done <<< "$(df -h)"
👀 应用:自动化监控服务器磁盘健康状态。
🧱 场景二:查看某个目录所在挂载点的空间
df -h /home/ubuntu/
👀 输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 25G 15G 63% /
👀 应用:确认
/home/ubuntu所在的磁盘分区是否快满了。
🧱 场景三:排查 inode 是否耗尽
df -i
👀 输出示例:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 2621440 2620000 1440 100% /
⚠️ 提示:虽然磁盘未满,但 inode 已满时也会报错“no space left on device”。
🧱 场景四:仅列出本地磁盘(排除远程挂载)
df -x nfs -x cifs
👀 应用:专注于本地存储设备,不关心网络挂载。
4. 不同 Linux 发行版差异对比 🖥️🐧
| 对比项 | Ubuntu | CentOS | EulerOS |
|---|---|---|---|
| 默认 shell | bash | bash | bash |
是否支持 -h |
✅ | ✅ | ✅ |
| 是否默认显示 inode | ❌ | ❌ | ❌ |
| 文件系统类型 | ext4/xfs | ext4/xfs | ext4/xfs/btrfs(部分版本) |
| root 用户权限限制 | sudo 制度严格 | su 更常见 | 政企级安全强化 |
⚠️ 小贴士:某些政企级系统(如 EulerOS)可能默认使用 btrfs 或其他高级文件系统,需注意其对磁盘管理的影响。
5. df vs du 对比 🤔
| 特性 | df |
du |
|---|---|---|
| 查看对象 | 整个文件系统(挂载点) | 单个目录/文件 |
| 显示内容 | 总体使用量、可用空间 | 各目录/文件大小 |
| 是否受软链接影响 | ❌ | ✅ |
| 使用建议 | 查看整体磁盘使用率 | 查找具体占用空间的目录 |
6. 常见问题与解决方案 ❗
❌ 错误 1:df 报告磁盘已满,但 du 统计很小
df -h shows 100% used, but du -sh only shows small usage.
原因:可能是被删除但仍被进程占用的文件
解决:
lsof +L1
👀 找到被占用的文件,重启服务或 kill 进程即可释放空间。
❌ 错误 2:找不到大文件,但磁盘满了
解决:尝试查看 inode 使用情况:
df -i
👀 如果 inode 已满,说明创建了大量小文件。
❌ 错误 3:输出列宽不统一,难以阅读
解决:加 -h 或 --output 控制字段:
df --output=target,source,size,used,avail
7. 小技巧 & 高效用法 🚀
- Tab 补全:输入部分路径后按
Tab键自动补全。 - 历史记录:使用上下箭头键查看之前执行过的
df命令。 - 配合变量使用(脚本中):
MOUNT="/"
USE=$(df -h | grep "$MOUNT" | awk '{print $5}' | tr -d '%')
if [ $USE -gt 90 ]; then
echo "警告:根分区使用率超过 90%!"
fi
- 排序查看最大使用分区:
df -h --output=target,used,size,pcent | sort -hr
8. 实战练习题 🧪
🔍 练习 1:
请写出以下命令的作用:
df -Thi | grep "/data"
📝 答案:
显示 /data 挂载点的文件系统类型、inode 使用情况和磁盘使用情况。
🔍 练习 2:
编写一个脚本 check_disk_full.sh,实现以下功能:
- 检查所有挂载点的使用率
- 如果某个挂载点使用率超过 95%,输出警告信息
📝 答案:
#!/bin/bash
THRESHOLD=95
df -h | tail -n +2 | while read line; do
use=$(echo $line | awk '{print $5}' | tr -d '%')
mount=$(echo $line | awk '{print $6}')
if [ "$use" -ge "$THRESHOLD" ]; then
echo "⚠️ 警告:挂载点 $mount 使用率超过 ${THRESHOLD}%"
fi
done
使用方法:
chmod +x check_disk_full.sh
./check_disk_full.sh
总结 📋
df 是 Linux 中最基础但极其强大的命令之一,尤其在查看磁盘空间使用情况时不可或缺。它不仅适用于日常运维、程序调试、日志分析等多个场景,还广泛用于自动化脚本中。
掌握 df 的各种参数组合,理解不同发行版之间的权限与安全机制差异,并结合实际场景灵活运用,可以显著提升你的工作效率和系统掌控能力。
建议多与 du, find, ls, rm, tar, scp, rsync 等命令配合使用,形成完整的文件管理与磁盘分析流程。

浙公网安备 33010602011771号