Linux df 命令详解:从基础到高级应用指南
在 Linux 系统管理中,监控磁盘空间使用情况是一项基础且关键的任务。无论是普通用户查看个人目录占用,还是系统管理员排查服务器存储瓶颈,df 命令都是不可或缺的工具。df(Disk Free 的缩写)用于报告文件系统的磁盘空间使用情况,包括总空间、已用空间、可用空间以及挂载点等信息。
本文将从基础语法到高级应用,全面解析 df 命令的使用方法,结合实际案例帮助读者快速掌握其核心功能,并提供最佳实践建议,让你在日常工作中更高效地管理磁盘空间。
目录#
1. df 命令概述#
df 命令的核心功能是扫描系统中所有已挂载的文件系统(或指定的文件系统),并以块(block)或人类可读的单位(如 GB、MB)显示其空间使用状态。它的数据来源于 /etc/mtab(挂载表)或 /proc/mounts(实时挂载信息),因此仅能识别当前已挂载的文件系统(除非使用特定选项)。
关键作用:
- 快速查看磁盘空间整体占用情况;
- 定位空间不足的文件系统;
- 识别文件系统类型(如 ext4、xfs、tmpfs 等);
- 监控 inode 使用情况(避免因 inode 耗尽导致无法创建文件)。
2. 基本语法#
df 命令的基本语法如下:
df [选项]... [文件系统/路径]...- 选项:控制输出格式、过滤内容等(详见下文);
- 文件系统/路径:可选参数,指定要查询的文件系统或挂载点(如
/、/home、/dev/sda1)。若不指定,则默认显示所有已挂载的文件系统。
3. 常用选项详解#
df 提供了丰富的选项,以下是最常用的几个:
| 选项 | 功能描述 |
|---|---|
-h/--human-readable | 以人类可读的单位(GB、MB、KB)显示空间大小,自动转换最适合的单位。 |
-a/--all | 显示所有文件系统,包括伪文件系统(如 tmpfs、sysfs)和大小为 0 的文件系统。 |
-T/--print-type | 显示文件系统类型(如 ext4、xfs、tmpfs)。 |
-i/--inodes | 显示 inode 信息(总 inode 数、已用、可用),而非块空间。 |
-t/--type=TYPE | 仅显示指定类型的文件系统(如 -t ext4 只显示 ext4 类型)。 |
-x/--exclude-type=TYPE | 排除指定类型的文件系统(如 -x tmpfs 排除 tmpfs)。 |
-P/--portability | 以 POSIX 标准格式输出,列对齐且不包含多余空格,适合脚本解析。 |
4. 实战示例:从基础到进阶#
示例 1:基础用法(默认输出)#
直接执行 df 命令,显示所有已挂载文件系统的空间使用情况(默认以 1KB 块为单位):
df输出示例:
Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
/dev/sda2 488386584 23456780 430123456 5% 586789 487799795 0% /
devtmpfs 8192000 0 8192000 0% 0 0 - /dev
tmpfs 8204560 1234 8203326 1% 123 8204437 0% /dev/shm
/dev/sda1 52428800 123456 52305344 1% 456 52428344 0% /boot
输出说明:
Filesystem:文件系统的设备名(如/dev/sda2)或伪文件系统标识(如tmpfs);512-blocks:总空间(以 512 字节块为单位,不同系统可能默认块大小不同);Used/Available:已用/可用空间(块单位);Capacity:已用空间百分比;iused/ifree/%iused:inode 相关信息(默认不显示,需-i选项);Mounted on:挂载点(文件系统挂载的目录)。
示例 2:人类可读格式(-h,最常用)#
使用 -h 选项将空间单位转换为 GB、MB 等易读格式:
df -h输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 466G 23G 410G 5% /
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.9G 1.2M 7.9G 1% /dev/shm
/dev/sda1 50G 123M 50G 1% /boot
优势:Size(总空间)、Used(已用)、Avail(可用)均以人类习惯的单位显示,Use% 直接显示使用率,一目了然。
示例 3:显示文件系统类型(-T)#
结合 -T 选项查看文件系统类型,帮助识别不同存储介质(如本地磁盘、网络存储、临时文件系统):
df -hT输出示例:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 466G 23G 410G 5% /
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.9G 1.2M 7.9G 1% /dev/shm
/dev/sda1 ext4 50G 123M 50G 1% /boot
//server/share cifs 100G 30G 70G 30% /mnt/share
说明:Type 列显示文件系统类型,如 ext4(本地磁盘)、tmpfs(内存临时文件系统)、cifs(网络共享)。
示例 4:检查指定目录/挂载点#
查看某个具体目录(如 /home)所在文件系统的空间使用情况:
df -h /home输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 931G 150G 734G 17% /home
原理:df 会自动解析目录所在的文件系统(通过 stat 获取挂载点),并显示该文件系统的信息。
示例 5:查看 inode 使用情况(-i)#
磁盘空间充足但无法创建文件?可能是 inode 耗尽!使用 -i 选项查看 inode 占用:
df -hi输出示例:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 300M 50M 250M 17% /
devtmpfs 2.0M 45 2.0M 1% /dev
tmpfs 2.0M 123 2.0M 1% /dev/shm
/dev/sda1 32M 123 32M 1% /boot
说明:
Inodes:总 inode 数;IUsed/IFree:已用/可用 inode 数;IUse%:inode 使用率。
注意:文件系统格式化时会预分配 inode,每个文件/目录占用一个 inode。若 IUse% 接近 100%,即使磁盘有空间也无法创建新文件。
示例 6:过滤文件系统类型(-t/-x)#
-
仅显示指定类型:如只看
ext4文件系统(本地磁盘常用类型):df -hT -t ext4 -
排除指定类型:排除临时文件系统
tmpfs和devtmpfs(通常无需关注):df -hT -x tmpfs -x devtmpfs
输出示例:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 466G 23G 410G 5% /
/dev/sda1 ext4 50G 123M 50G 1% /boot
示例 7:POSIX 格式输出(-P,适合脚本)#
-P 选项以标准化格式输出,列对齐且无多余空格,方便脚本通过 awk/grep 解析:
df -P /输出示例:
Filesystem 512-blocks Used Available Capacity Mounted on
/dev/sda2 488386584 23456780 430123456 5% /
脚本应用:提取 / 分区的可用空间(单位:KB):
df -P / | awk 'NR==2 {print $4}' # 输出:4301234565. 高级选项与自定义输出#
选项 1:添加总计行(--total)#
使用 --total 在输出末尾添加所有文件系统的总计行:
df -h --total输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 466G 23G 410G 5% /
/dev/sda1 50G 123M 50G 1% /boot
tmpfs 7.9G 1.2M 7.9G 1% /dev/shm
total 1.5T 173G 1.3T 12% -
选项 2:指定块大小(-B)#
默认块大小可能因系统而异,使用 -B 自定义单位(如 -BM 为 MB,-BG 为 GB,-BK 为 KB):
df -BM / # 以 MB 为单位显示 / 分区输出示例:
Filesystem 1M-blocks Used Available Capacity Mounted on
/dev/sda2 476940 23000 420000 5% /
选项 3:自定义输出列(--output)#
使用 --output 指定需要显示的列,支持的列名包括:source(设备)、fstype(类型)、size(总空间)、used(已用)、avail(可用)、pcent(使用率)、target(挂载点)等。
示例:仅显示设备名、类型、可用空间和挂载点:
df -h --output=source,fstype,avail,target输出示例:
Filesystem Type Avail Mounted on
/dev/sda2 ext4 410G /
devtmpfs devtmpfs 7.8G /dev
tmpfs tmpfs 7.9G /dev/shm
/dev/sda1 ext4 50G /boot
6. 最佳实践与注意事项#
1. 优先使用 -h 提高可读性#
日常使用时,df -h 是最常用的命令,避免直接看块单位导致的数值混乱。
2. 结合 -T 识别文件系统类型#
排查存储问题时,df -hT 能快速区分本地磁盘(ext4/xfs)、网络存储(nfs/cifs)和临时文件系统(tmpfs),避免误判。
3. 定期检查 inode 使用(-i)#
养成使用 df -hi 的习惯,尤其是在创建大量小文件的场景(如日志、缓存),防止 inode 耗尽。
4. 过滤无关文件系统(-x)#
服务器通常有很多伪文件系统(如 tmpfs、sysfs),使用 -x tmpfs -x devtmpfs -x sysfs 可简化输出,聚焦真实存储。
5. 脚本中使用 -P 或 --output#
编写自动化脚本时,用 -P 确保输出格式一致,或用 --output 提取特定列,避免因系统差异导致解析错误。
6. 结合 watch 实时监控#
使用 watch df -h 实时刷新磁盘空间变化(默认 2 秒一次),适合监控文件传输、日志写入等场景。
7. 常见问题与解决方案#
问题 1:df 输出中出现大量重复或伪文件系统#
原因:默认显示所有挂载的文件系统,包括 tmpfs、sysfs、proc 等伪文件系统(它们不占用磁盘空间)。
解决:用 -x 排除:df -h -x tmpfs -x devtmpfs -x sysfs -x proc。
问题 2:df 显示的可用空间与实际不符#
原因:部分文件系统(如 ext4)会预留 5% 空间给 root 用户(防止普通用户占满导致系统故障),df 显示的 Avail 已扣除预留空间。
验证:用 tune2fs -l /dev/sda2 | grep 'Reserved block count' 查看预留空间。
调整:若为非系统分区,可减少预留:tune2fs -m 1 /dev/sda2(预留 1%)。
问题 3:磁盘空间未满但无法创建文件#
原因:极可能是 inode 耗尽(df -hi 显示 IUse% 接近 100%)。
解决:删除无用小文件释放 inode,或重新格式化文件系统时增加 inode 数量(需谨慎)。
问题 4:df 报错 "df: cannot read table of mounted file systems"#
原因:/etc/mtab 文件损坏或无权限读取。
解决:直接读取 /proc/mounts(实时内核数据):df -h --mtab /proc/mounts。
8. 参考资料#
- 官方文档:
man df(Linux 手册页,最权威来源); - GNU Coreutils 文档:df 命令官方说明;
- Linux 系统管理指南:《鸟哥的 Linux 私房菜》磁盘管理章节;
- inode 详解:Understanding Inodes in Linux。
通过本文的学习,相信你已掌握 df 命令的核心用法和进阶技巧。合理利用 df,可以让磁盘空间管理更高效,及时发现并解决存储问题。若有其他疑问,欢迎在评论区交流!