Linux df 命令详解:从基础到高级应用指南

在 Linux 系统管理中,监控磁盘空间使用情况是一项基础且关键的任务。无论是普通用户查看个人目录占用,还是系统管理员排查服务器存储瓶颈,df 命令都是不可或缺的工具。df(Disk Free 的缩写)用于报告文件系统的磁盘空间使用情况,包括总空间、已用空间、可用空间以及挂载点等信息。

本文将从基础语法到高级应用,全面解析 df 命令的使用方法,结合实际案例帮助读者快速掌握其核心功能,并提供最佳实践建议,让你在日常工作中更高效地管理磁盘空间。

目录#

  1. df 命令概述
  2. 基本语法
  3. 常用选项详解
  4. 实战示例:从基础到进阶
  5. 高级选项与自定义输出
  6. 最佳实践与注意事项
  7. 常见问题与解决方案
  8. 参考资料

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
  • 排除指定类型:排除临时文件系统 tmpfsdevtmpfs(通常无需关注):

    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}'  # 输出:430123456

5. 高级选项与自定义输出#

选项 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#

服务器通常有很多伪文件系统(如 tmpfssysfs),使用 -x tmpfs -x devtmpfs -x sysfs 可简化输出,聚焦真实存储。

5. 脚本中使用 -P--output#

编写自动化脚本时,用 -P 确保输出格式一致,或用 --output 提取特定列,避免因系统差异导致解析错误。

6. 结合 watch 实时监控#

使用 watch df -h 实时刷新磁盘空间变化(默认 2 秒一次),适合监控文件传输、日志写入等场景。

7. 常见问题与解决方案#

问题 1:df 输出中出现大量重复或伪文件系统#

原因:默认显示所有挂载的文件系统,包括 tmpfssysfsproc 等伪文件系统(它们不占用磁盘空间)。
解决:用 -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. 参考资料#


通过本文的学习,相信你已掌握 df 命令的核心用法和进阶技巧。合理利用 df,可以让磁盘空间管理更高效,及时发现并解决存储问题。若有其他疑问,欢迎在评论区交流!