Linux df命令详解

Linux df 命令详解 🐧📊💽


学习目标 🎯

  • 理解 df 命令的基本功能与使用场景。
  • 掌握查看文件系统磁盘空间使用情况的方法,包括挂载点、使用率、文件系统类型等信息。
  • 了解不同 Linux 发行版(如 Ubuntu、CentOS、EulerOS)在默认行为和输出格式上的差异。
  • 能结合实际开发、运维、脚本编写等场景灵活运用 df
  • 熟悉常见错误及优化建议,避免误操作导致资源浪费或系统性能下降。

核心重点 ✅

类别 内容
命令含义 disk free 查看磁盘剩余空间
基本语法 df [选项] [路径]
核心功能 - 显示所有挂载点的磁盘使用情况
- 按使用率排序查找“满盘”分区
常用参数 -h, -T, -t, -x, -i, --output
权限控制 不需要特殊权限,普通用户可执行
跨平台差异 输出字段顺序略有不同,但功能一致

详细讲解 💡

1. 基本介绍 📘

📌 功能:

dfdisk 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 等命令配合使用,形成完整的文件管理与磁盘分析流程。

posted @ 2025-06-19 21:51  红尘过客2022  阅读(167)  评论(0)    收藏  举报