命令简介

df 是 Linux 中常用的命令,用于查看文件系统的磁盘空间使用情况。它显示了每个已挂载的文件系统的可用磁盘空间、已用磁盘空间以及其他相关信息。

命令格式

1
df [选项] [文件]

参数说明

参数 描述 备注
-a 全部文件系统列表,包括系统特有的 /proc 等文件系统 -
-h 以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示 建议使用,方便阅读
-H 以紧凑的指令列出指定文件时所在的文件系统 和文件相关
-i 显示inode的信息 -
-k 以 KBytes 的容量显示现有磁盘的使用情况 -
-l 只显示本地文件系统 对于使用了网络共享的服务,比如 NFS,在查看挂载状态时,一定不能加该参数
-m 以 MBytes 的容量显示现有磁盘的使用情况 -
-P 按分区uuid显示文件系统名称 (伴随 -o uuid 使用) 0.5版本后可用
-t 显示指定文件系统类型的磁盘使用情况 例如: -t ext4
-T 显示文件系统类型 -
-x 不显示指定类型的文件系统 例如: -x tmpfs
–no-sync 忽略同步操作 提高命令执行效率

命令实例

基本使用

1.直接执行 df 命令:

1
2
3
4
5
6
7
8
9
veazhi@vm002-ubuntu2204:~$ df 
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 400540 1180 399360 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 24590672 12648832 10667372 55% /
tmpfs 2002696 0 2002696 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
/dev/vda2 1992552 256816 1614496 14% /boot
tmpfs 400536 4 400532 1% /run/user/1000
10.10.10.203:/data/nfs 24590848 9772544 13543936 42% /data/shared
参数 描述 备注
Filesystem 表示该文件系统位于哪个分区,因此该列显示的是设备名称 -
1K-blocks 此列表示文件系统的总大小,默认以 KB 为单位 -
Used 表示用掉的硬盘空间大小 -
Available 表示剩余的硬盘空间大小 -
Use% 硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行 -
Mounted on 文件系统的挂载点,也就是硬盘挂载的目录位置 -

2.人性化输出

1
2
3
4
5
6
7
8
9
veazhi@vm002-ubuntu2204:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 392M 1.2M 390M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 24G 13G 11G 55% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda2 2.0G 251M 1.6G 14% /boot
tmpfs 392M 4.0K 392M 1% /run/user/1000
10.10.10.203:/data/nfs 24G 9.4G 13G 42% /data/shared

3.指定文件系统类型

1
2
3
4
5
6
7
8
9
10
11
12
# 只显示 ext4 文件系统
veazhi@vm002-ubuntu2204:~$ df -t ext4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 24590672 12648832 10667372 55% /
/dev/vda2 1992552 256816 1614496 14% /boot

# 排除 tmpfs 文件系统
veazhi@vm002-ubuntu2204:~$ df -x tmpfs
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 24590672 12648832 10667372 55% /
/dev/vda2 1992552 256816 1614496 14% /boot
10.10.10.203:/data/nfs 24590848 9772544 13543936 42% /data/shared

这里顺带提下参数 -l 。如果挂载了网络服务,比如 NFS,在使用 df 命令查看挂载时,一定不要加 -l ,而是直接使用 df -h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 加参数 -l 只显示本地文件系统 
veazhi@vm002-ubuntu2204:~$ df -lh
Filesystem Size Used Avail Use% Mounted on
tmpfs 392M 1.2M 390M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 24G 13G 11G 55% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda2 2.0G 251M 1.6G 14% /boot
tmpfs 392M 4.0K 392M 1% /run/user/1000

# 不加参数 -l ,是显示所有的文件系统
veazhi@vm002-ubuntu2204:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 392M 1.2M 390M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 24G 13G 11G 55% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda2 2.0G 251M 1.6G 14% /boot
tmpfs 392M 4.0K 392M 1% /run/user/1000
10.10.10.203:/data/nfs 24G 9.4G 13G 42% /data/shared
### 扩展用法

1.显示更多的特殊文件,参数 `-a` ,会将很多特殊的文件系统显示出来,这些文件系统包含的大多是系统数据,存在于内存中,不会占用硬盘空间,因此你会看到,它们所占据的硬盘总容量为 0。
```bash
veazhi@vm002-ubuntu2204:~$ df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
sysfs sysfs 0 0 0 - /sys
proc proc 0 0 0 - /proc
udev devtmpfs 1944756 0 1944756 0% /dev
devpts devpts 0 0 0 - /dev/pts
tmpfs tmpfs 400540 1180 399360 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 24590672 12648832 10667372 55% /
... ... ... ... ...

2.显示 inodes,参数 -i ,会将各个分区的 inodes 数打印出来

1
2
3
4
5
6
7
8
9
veazhi@vm002-ubuntu2204:~$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
tmpfs 500674 774 499900 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 1572864 230122 1342742 15% /
tmpfs 500674 1 500673 1% /dev/shm
tmpfs 500674 3 500671 1% /run/lock
/dev/vda2 131072 320 130752 1% /boot
tmpfs 100134 25 100109 1% /run/user/1000
10.10.10.203:/data/nfs 1572864 175834 1397030 12% /data/shared

3.根据给出的文件或目录,自动分析出该文件或目录属于哪个分区:

1
2
3
veazhi@vm002-ubuntu2204:~$ df -i /etc/passwd
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 1572864 230122 1342742 15% /

高级用法

1.定期监控磁盘使用情况

可以使用 watch 命令,定期执行 df 命令,监控磁盘使用变化。

1
watch -n 5 df -h

每 5 秒钟执行一次 df -h 命令,实时查看磁盘使用情况。

2.排除特定分区

有时候,我们只关心某些重要分区的使用情况,可以结合管道和 grep 命令进行过滤。

1
df -h | grep '/data'

只显示 /data 分区的使用情况。

3.磁盘使用报警

通过编写脚本,可以在磁盘使用率达到阈值时发出警报。例如:

1
2
3
4
5
6
7
8
9
#!/bin/bash

# 获取根分区使用百分比
usage=$(df -h / | awk '/\// {print $(NF-1)}' | sed 's/%//g')

# 判断使用率是否超过 90%
if [ "$usage" -gt 90 ]; then
echo "Warning: Root partition usage is ${usage}%" | mail -s "Disk Space Alert" [email protected]
fi

这个脚本会检查根分区的使用率,如果超过 90%,就会通过邮件发送警报给管理员。

du命令和df命令的区别

有时我们会发现,使用 du 命令和 df 命令去统计分区的使用情况时,得到的数据是不一样的。那是因为df命令是从文件系统的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df 命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。

而 du 命令是面向文件的,只会计算文件或目录占用的磁盘空间。也就是说,df 命令统计的分区更准确,是真正的空闲空间。