df(disk free)命令用于报告文件系统的磁盘空间使用情况,包括已用空间和可用空间。
基本语法
df [选项]... [文件]...
直接输入命令,不加任何参数即可使用。
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 61202244 6409624 51651296 12% /
tmpfs 65536 0 65536 0% /dev
shm 65536 0 65536 0% /dev/shm
/dev/vda1 61202244 6409624 51651296 12% /etc/hosts
tmpfs 2006452 0 2006452 0% /proc/scsi
tmpfs 2006452 0 2006452 0% /sys/firmware
- 显示已挂载文件系统的空间使用情况。
- 默认以 1024 字节为单位显示。
你也可以指定文件或目录作为参数,df 会显示包含该文件或目录的文件系统信息。
$ df /home
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 61202244 6409624 51651296 12% /
$ df /dev/shm
Filesystem 1K-blocks Used Available Use% Mounted on
shm 65536 0 65536 0% /dev/shm
- 显示包含指定文件或目录的文件系统信息。
- 如果参数是已挂载文件系统的设备文件(如
/dev/sda1),则显示该文件系统的空间信息。
1. 显示所有文件系统 (-a/--all)
df -a
df --all
使用该参数,输出将包括:
- 虚拟文件系统(如
/proc)
- 重复挂载的文件系统
- 不可访问的文件系统
$ df --all
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 61202244 6409624 51651296 12% /
proc 0 0 0 - /proc
tmpfs 65536 0 65536 0% /dev
devpts 0 0 0 - /dev/pts
sysfs 0 0 0 - /sys
cgroup 0 0 0 - /sys/fs/cgroup
mqueue 0 0 0 - /dev/mqueue
shm 65536 0 65536 0% /dev/shm
/dev/vda1 61202244 6409624 51651296 12% /etc/resolv.conf
...
2. 人性化显示 (-h/--human-readable, -H/--si)
默认的输出单位是1K-blocks,阅读起来不够直观。-h 参数可以让数据更易读。
df -h
df --human-readable
- 使用易读的单位(K、M、G、T)。
- 使用 1024 为基数(1K=1024 字节)。
$ df -h
Filesystem Size Used Avail Use% Mounted on
overlay 59G 6.2G 50G 12% /
tmpfs 64M 0 64M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/vda1 59G 6.2G 50G 12% /etc/hosts
tmpfs 2.0G 0 2.0G 0% /proc/scsi
tmpfs 2.0G 0 2.0G 0% /sys/firmware
而 -H 参数使用国际单位制(SI),以1000为基数。
df -H
df --si
- 使用 SI 单位制(1000 为基数)。
- 1M=1,000,000 字节。
$ df -H
Filesystem Size Used Avail Use% Mounted on
overlay 63G 6.6G 53G 12% /
tmpfs 68M 0 68M 0% /dev
shm 68M 0 68M 0% /dev/shm
/dev/vda1 63G 6.6G 53G 12% /etc/hosts
tmpfs 2.1G 0 2.1G 0% /proc/scsi
tmpfs 2.1G 0 2.1G 0% /sys/firmware
3. 指定块大小 (-B/--block-size=SIZE, -k)
如果你希望以特定的块大小为单位显示,可以使用 -B 参数。
df -B 1G
df --block-size=1G
- 指定显示单位。
- 支持:K、M、G、T、P、E、Z、Y。
$ df -B 1G
Filesystem 1G-blocks Used Available Use% Mounted on
overlay 59 7 50 12% /
tmpfs 1 0 1 0% /dev
shm 1 0 1 0% /dev/shm
/dev/vda1 59 7 50 12% /etc/hosts
tmpfs 2 0 2 0% /proc/scsi
tmpfs 2 0 2 0% /sys/firmware
-k 参数则强制使用 1024 字节块显示,等价于 --block-size=1K。
$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 61202244 6409624 51651296 12% /
tmpfs 65536 0 65536 0% /dev
...
4. 显示 inode 信息 (-i/--inodes)
磁盘空间充足,但系统依然报“设备无剩余空间”?这可能是因为 inode 耗尽了。df -i 命令可以帮你排查这个问题。
df -i
df --inodes
- 显示 inode 使用情况而非块使用情况。
- inode 包含文件的元数据(所有者、权限、时间戳等)。
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
overlay 3907584 225278 3682306 6% /
tmpfs 501613 17 501596 1% /dev
shm 501613 1 501612 1% /dev/shm
/dev/vda1 3907584 225278 3682306 6% /etc/hosts
tmpfs 501613 1 501612 1% /proc/scsi
tmpfs 501613 1 501612 1% /sys/firmware
5. 限制显示范围 (-l/--local, -t/--type, -x/--exclude-type)
如果你只想查看本地文件系统,排除网络挂载(如NFS),可以使用 -l 参数。
df -l
df --local
- 仅显示本地文件系统。
- 默认显示所有(包括网络文件系统)。
要筛选特定类型的文件系统,可以使用 -t 参数。
df -t ext4
df --type=ext4
- 仅显示指定类型的文件系统。
- 可多次使用以指定多种类型,例如
df -t ext4 -t xfs。
$ df -t ext4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 61202244 6409624 51651296 12% /etc/hosts
反过来,你也可以使用 -x 参数排除特定类型的文件系统。
df -x nfs
df --exclude-type=nfs
- 排除指定类型的文件系统。
- 同样可多次使用以排除多种类型。
$ df -x ext4
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 61202244 6409624 51651296 12% /
tmpfs 65536 0 65536 0% /dev
shm 65536 0 65536 0% /dev/shm
tmpfs 2006452 0 2006452 0% /proc/scsi
tmpfs 2006452 0 2006452 0% /sys/firmware
6. 自定义输出格式 (--output)
当你需要将 df 的输出用于脚本或仅关心特定字段时,--output 参数提供了极大的灵活性。
df --output=target,size,used,avail,pcent
- 自定义显示的列及其顺序。
- 有效字段包括:
source:挂载源(设备)。
fstype:文件系统类型。
target:挂载点。
size:总块数。
used:已用块数。
avail:可用块数。
pcent:使用百分比。
itotal:总 inode 数。
iused:已用 inode 数。
iavail:可用 inode 数。
ipcent:inode 使用百分比。
file:命令行指定的文件名。
示例:
$ df --output=target,size,used,avail,pcent
Mounted on 1K-blocks Used Avail Use%
/ 61202244 6409624 51651296 12%
/dev 65536 0 65536 0%
/dev/shm 65536 0 65536 0%
/etc/hosts 61202244 6409624 51651296 12%
/proc/scsi 2006452 0 2006452 0%
/sys/firmware 2006452 0 2006452 0%
不加字段参数时,--output 会显示所有可用字段。
$ df --output
Filesystem Type Inodes IUsed IFree IUse% 1K-blocks Used Avail Use% File Mounted on
overlay overlay 3907584 225278 3682306 6% 61202244 6409624 51651296 12% - /
tmpfs tmpfs 501613 17 501596 1% 65536 0 65536 0% - /dev
...
7. POSIX 兼容模式 (-P/--portability)
为了确保脚本在不同Unix系统间的可移植性,可以使用POSIX兼容模式。
df -P
df --portability
- 使用 POSIX 输出格式。
- 每行显示一个完整的文件系统信息。
- 输出格式不受环境变量影响(除非设置了
POSIXLY_CORRECT)。
$ df --portability
Filesystem 1024-blocks Used Available Capacity Mounted on
overlay 61202244 6409624 51651296 12% /
tmpfs 65536 0 65536 0% /dev
...
8. 显示文件系统类型 (-T/--print-type)
想快速了解各个挂载点使用的是什么类型的文件系统吗?-T 参数可以帮你。
df -T
df --print-type
- 在输出中增加一列,显示每个文件系统的类型。
- 常见类型:ext4、xfs、btrfs、nfs、ntfs、vfat 等。
$ df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
overlay overlay 61202244 6409624 51651296 12% /
tmpfs tmpfs 65536 0 65536 0% /dev
shm tmpfs 65536 0 65536 0% /dev/shm
/dev/vda1 ext4 61202244 6409624 51651296 12% /etc/hosts
...
9. 同步数据 (--sync, --no-sync)
在某些系统上,为了获取最新的磁盘使用数据,可以在执行 df 前先调用 sync 系统调用。
df --sync
- 获取数据前调用 sync 系统调用。
- 在某些系统上(如 Solaris)可获得更新数据。
- 但会使
df 命令运行变慢。
如果追求速度,可以使用 --no-sync 参数(这也是默认行为)。
df --no-sync
- 不调用 sync。
- 运行更快,但数据可能不是最新的。
10. 显示总计 (--total)
当你需要了解所有显示的文件系统空间总和时,--total 参数非常有用。
df --total
$ df --total
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 61202244 6409624 51651296 12% /
tmpfs 65536 0 65536 0% /dev
shm 65536 0 65536 0% /dev/shm
/dev/vda1 61202244 6409624 51651296 12% /etc/hosts
tmpfs 2006452 0 2006452 0% /proc/scsi
tmpfs 2006452 0 2006452 0% /sys/firmware
total 126548464 12819248 107446568 11% -
最佳实践与总结
- 日常使用推荐:
df -h。这是最常用、可读性最高的组合,能快速概览磁盘使用情况。
- 排查磁盘满问题:同时检查
df -h 和 df -i。磁盘空间和 inode 数量是两个独立的资源,任一耗尽都会导致“磁盘已满”错误。
- 脚本中使用:使用
--output 参数。这能确保输出格式稳定,便于后续用 awk、grep 等工具进行解析。
- 需要最新数据时(某些系统):使用
--sync,但需注意性能损耗。
- 性能优先时:使用
--no-sync(默认行为)。
尤其是在排查磁盘空间满的问题时,除了容量外,查看 inode 使用情况是一个关键步骤。当然,inode 的规划需要根据服务器的预期用途,在格式化磁盘时就做好相应的设置。希望这篇在云栈社区分享的指南能帮助你更高效地使用 df 命令进行磁盘管理。