Linux df -h 命令详解:从基础到高级应用
在 Linux 系统管理中,磁盘空间监控是日常运维的基础任务之一。无论是普通用户检查个人目录占用,还是系统管理员排查磁盘爆满问题,df 命令都是不可或缺的工具。其中,df -h 更是最常用的组合之一,因其输出“人类可读”(Human-Readable)的磁盘空间信息而广受欢迎。
本文将从 df 命令的基础原理出发,详细解析 df -h 的用法、输出含义、常见场景及高级技巧,帮助读者全面掌握这一核心工具,提升磁盘管理效率。
目录#
1. df 命令简介#
df(Disk Free 的缩写)是 Linux/Unix 系统中用于报告文件系统磁盘空间使用情况的命令行工具,属于 GNU Coreutils 软件包,几乎所有 Linux 发行版默认预装。其核心功能是显示已挂载文件系统的总容量、已用空间、可用空间及挂载点等信息。
df 命令的历史可追溯至 Unix 早期版本,如今已成为 POSIX 标准的一部分,确保了在不同类 Unix 系统(如 Linux、macOS、FreeBSD)中的兼容性。
2. df -h:人类可读的磁盘空间查看#
默认情况下,df 命令输出的磁盘大小以字节(Bytes) 为单位,数值庞大且难以直观理解(例如 1073741824 字节)。而 -h 选项(--human-readable 的缩写)的作用是将字节转换为人类易读的单位(如 KB、MB、GB、TB),并自动选择最合适的单位(例如 1G 代替 1024M)。
对比示例:
- 默认输出(字节):
Filesystem 512-blocks Used Available Capacity Mounted on /dev/sda1 209715200 52428800 157286400 25% / df -h输出(人类可读):Filesystem Size Used Avail Use% Mounted on /dev/sda1 200G 50G 150G 25% /
显然,df -h 的输出更直观,因此成为日常使用的首选。
3. 基本语法与常用选项#
3.1 基本语法#
df 命令的基本格式为:
df [选项]... [文件系统/挂载点]...- 选项:控制输出格式、过滤文件系统等(如
-h、-T、-i)。 - 文件系统/挂载点:可选参数,指定要查询的文件系统(如
/dev/sda1)或挂载点(如/home),不指定则显示所有已挂载文件系统。
3.2 与 -h 搭配的常用选项#
df -h 可结合其他选项实现更灵活的查询,以下是最常用的搭配:
| 选项 | 全称 | 作用 |
|---|---|---|
-a | --all | 显示所有文件系统(包括大小为 0 的伪文件系统,如 /proc) |
-T | --print-type | 输出中增加“文件系统类型”列(如 ext4、tmpfs、xfs) |
-i | --inodes | 显示 inode 使用情况(替代默认的块使用情况) |
-t | --type=类型 | 仅显示指定类型的文件系统(如 -t ext4) |
-x | --exclude-type=类型 | 排除指定类型的文件系统(如 -x tmpfs) |
-l | --local | 仅显示本地文件系统(排除网络文件系统如 NFS) |
-P | --portable | 输出格式标准化(适合脚本解析,列宽固定) |
4. 输出结果详解#
执行 df -h 后,输出通常包含 6 列,每列含义如下:
4.1 输出列说明#
| 列名 | 含义 | 示例 |
|---|---|---|
Filesystem | 文件系统标识 | /dev/sda1(设备名)、tmpfs(临时文件系统)、UUID=xxx(UUID 标识) |
Size | 文件系统总容量 | 200G(总大小为 200GB) |
Used | 已使用空间 | 50G(已用 50GB) |
Avail | 可用空间(非 root 用户) | 145G(普通用户可使用 145GB) |
Use% | 使用率百分比 | 25%(已用 25%) |
Mounted on | 挂载点 | /(根目录)、/home(用户目录) |
4.2 关键注意点#
-
Avail与“Size - Used”的差异:
Avail通常小于Size - Used,因为 Linux 会默认保留 5% 的空间给 root 用户(防止普通用户占满磁盘导致系统不可用)。可通过tune2fs -l /dev/sda1 | grep "Reserved block count"查看保留空间。 -
Filesystem的多种形式:
可能显示设备路径(如/dev/sda1)、UUID(如UUID=8a3...)或标签(如LABEL=ROOT),具体取决于/etc/fstab配置。 -
虚拟文件系统:
如tmpfs(临时内存文件系统)、devtmpfs(设备文件系统)等,其Size通常基于物理内存,重启后数据会丢失。
5. 常见用法示例#
以下是 df -h 结合不同选项的实战场景,覆盖日常 90% 的使用需求。
5.1 基础用法:查看所有已挂载文件系统#
df -h输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 200G 50G 145G 26% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/sdb1 500G 200G 275G 43% /data
5.2 查看指定挂载点的磁盘使用#
如需单独检查 /home 目录的空间:
df -h /home输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 30G 65G 32% /home
5.3 显示文件系统类型(-T)#
排查“某目录为何占用异常”时,文件系统类型是重要线索(如 tmpfs 基于内存,空间满了需清理临时文件):
df -hT输出:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 200G 50G 145G 26% /
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/sdb1 xfs 500G 200G 275G 43% /data
5.4 查看 inode 使用情况(-i)#
磁盘爆满不一定是“空间不足”,也可能是“inode 耗尽”(每个文件/目录需占用 1 个 inode)。通过 -i 选项可查看 inode 状态:
df -hi输出:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 12.5M 1.2M 11.3M 10% /
tmpfs 2.0M 64 2.0M 1% /dev/shm
注意:若
IUse%接近 100%,即使Use%较低,也会提示“无空间可用”。
5.5 过滤特定类型的文件系统(-t/-x)#
- 仅显示 ext4 类型:
df -ht ext4 - 排除 tmpfs 和 devtmpfs(虚拟文件系统):
df -hx tmpfs -x devtmpfs
5.6 查看所有文件系统(包括伪文件系统,-a)#
默认 df -h 会忽略伪文件系统(如 /proc、/sys),-a 选项可显示所有文件系统(常用于调试):
df -ha输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 200G 50G 145G 26% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
tmpfs 7.8G 0 7.8G 0% /dev/shm
6. 高级选项与场景#
6.1 自定义输出列(--output)#
通过 --output 选项可指定需要显示的列,减少冗余信息(适合脚本解析)。例如,仅显示“挂载点、使用率、类型”:
df -h --output=source,fstype,pcent,target输出:
Filesystem Type Use% Mounted on
/dev/sda1 ext4 26% /
/dev/sdb1 xfs 43% /data
6.2 计算磁盘总占用(--total)#
--total 选项会在输出末尾增加一行“总计”,方便统计所有文件系统的总空间:
df -h --total输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 200G 50G 145G 26% /
/dev/sdb1 500G 200G 275G 43% /data
total 700G 250G 420G 38% -
6.3 排查网络文件系统(NFS/CIFS)#
通过 -l 选项排除本地文件系统,仅显示网络文件系统(如 NFS):
df -hl --exclude-type=ext4 --exclude-type=xfs7. 日常使用习惯#
以下是结合 df -h 的常见操作场景,帮助形成高效的磁盘管理习惯:
7.1 定期检查磁盘使用率#
普通用户可通过 df -h 快速了解个人目录(如 /home/用户名)的空间占用,避免因下载大文件导致磁盘爆满。
7.2 安装软件前确认空间#
安装大型软件(如 Docker、数据库)前,用 df -h /var 检查 /var 目录(软件安装默认路径)是否有足够空间。
7.3 清理日志/缓存后验证效果#
删除 /var/log 下的大日志文件后,通过 df -h /var 确认空间是否释放(注意:若日志文件被进程占用,需重启进程才能释放空间)。
7.4 脚本中解析磁盘使用率#
结合 -P 选项(标准化输出)和 awk 提取使用率,用于监控告警脚本:
# 检查根目录使用率是否超过 80%
root_usage=$(df -hP / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $root_usage -gt 80 ]; then
echo "根目录使用率超过 80%!"
fi8. 最佳实践#
8.1 始终使用 -h 提高可读性#
除非脚本需要原始字节数据,否则优先使用 df -h,避免因数字冗长导致误判。
8.2 结合 -T 识别文件系统类型#
排查磁盘问题时,df -hT 可快速区分“本地磁盘”(ext4/xfs)、“内存文件系统”(tmpfs)和“网络磁盘”(nfs),针对性处理(如 tmpfs 满了需清理 /tmp)。
8.3 定期监控 inode 使用(df -hi)#
inode 耗尽是隐性问题,建议与磁盘空间监控同步进行(如每周执行 df -hi 检查)。
8.4 排除无关虚拟文件系统#
日常检查时,用 -x tmpfs -x devtmpfs 排除内存文件系统,聚焦真实磁盘:
df -hx tmpfs -x devtmpfs8.5 避免频繁查询不存在的挂载点#
若指定的挂载点未挂载(如 df -h /mnt/usb),df 会报错并显示所有文件系统,建议先通过 mount | grep /mnt/usb 确认挂载状态。
9. 常见问题与排查#
9.1 问题:删除文件后磁盘空间未释放#
现象:执行 rm bigfile.log 后,df -h 显示空间未减少。
原因:文件被进程占用(如日志文件被 rsyslog 进程锁定),删除后仅目录项被移除,实际空间需进程释放后才释放。
解决:
- 用
lsof +L1查找“已删除但仍被占用的文件”:lsof +L1 | grep bigfile.log - 重启占用进程(如
systemctl restart rsyslog)或通过kill -HUP 进程ID刷新文件句柄。
9.2 问题:Avail 显示为负数#
现象:df -h 中 Avail 列出现负数(如 -10G)。
原因:root 预留的 5% 空间也被用尽,通常是异常程序占用大量磁盘(如日志无限增长)。
解决:
- 紧急清理大文件(如
du -sh /var/log/*定位大日志)。 - 临时调整预留空间(仅临时生效):
tune2fs -m 1 /dev/sda1 # 将预留空间改为 1%
9.3 问题:网络文件系统(NFS)显示大小异常#
现象:df -h 显示 NFS 挂载点大小与服务器实际不符。
原因:NFS 客户端缓存或服务器端配置问题。
解决:
- 清除客户端缓存:
mount -o remount /mnt/nfs。 - 检查服务器端
df -h确认实际空间。
10. 参考资料#
通过本文,相信你已全面掌握 df -h 的用法。从基础查询到高级过滤,从日常监控到问题排查,这一命令将成为你 Linux 系统管理的得力助手。记住:磁盘空间管理的核心是“预防为主”,定期执行 df -h 和 df -hi,让磁盘问题无处遁形!