Linux df 命令详解:磁盘空间查看与管理

Linux df 命令详解:磁盘空间查看与管理

什么是 df 命令

df(disk free)是 Linux 系统中用于显示磁盘空间使用情况的命令。它可以查看所有已挂载文件系统的磁盘使用情况,包括总容量、已用空间、可用空间和使用百分比。

基本语法

1
df [选项] [文件系统或挂载点]

输出字段说明

执行 df 命令后,输出结果包含以下字段:

字段 说明
Filesystem 文件系统设备名
Size 总容量
Used 已使用空间
Available 可用空间
Use% 使用百分比
Mounted on 挂载点

思维导图:df 命令使用场景

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
                         ┌─────────────────────────────────────────┐
                         │          df 命令使用场景              │
                         └─────────────────────────────────────────┘
          ┌─────────────────────────────────┼─────────────────────────────────┐
          │                                 │                                 │
          ▼                                 ▼                                 ▼
┌─────────────────────┐        ┌─────────────────────┐        ┌─────────────────────┐
│    基本显示         │        │    格式化输出        │        │    过滤与查找        │
│                     │        │                     │        │                     │
└─────────────────────┘        └─────────────────────┘        └─────────────────────┘
          │                                 │                                 │
          ├─查看所有文件系统                 ├─人类可读格式(-h)               ├─查看特定挂载点
          ├─查看特定文件系统                 ├─显示 inode 信息(-i)            ├─获取根目录利用率
          └─显示伪文件系统                  └─显示总量(-T)                  └─过滤特定类型
                              ┌─────────────────────────────────┐
                              │        常用组合技巧             │
                              ├─────────────────────────────────┤
                              │ • df | awk 提取数据            │
                              │ • du 配合查找大文件            │
                              │ • 监控脚本集成                 │
                              └─────────────────────────────────┘

常用场景示例

1. 基本显示所有文件系统

1
2
3
4
5
# 显示所有文件系统(包括伪文件系统)
df

# 显示真实的文件系统(排除伪文件系统)
df -a

2. 人类可读格式显示

1
2
3
4
5
6
7
8
# 以 KB/MB/GB 显示(更易读)
df -h

# 以 MB/GB 显示(使用 1024)
df -h

# 以 1000 为单位显示(与厂商一致)
df -H

3. 查看特定挂载点或文件系统

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看根目录所在文件系统
df /

# 查看 /home 挂载点
df /home

# 查看特定设备
df /dev/sda1

# 查看所有 ext4 文件系统
df -t ext4

# 排除特定类型
df -x tmpfs

4. 获取系统根目录磁盘利用率

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 方法一:直接获取根目录使用率百分比
df | awk '$6=="/"{gsub("%","",$5); print $5}'

# 方法二:更详细的输出
df -h / | awk 'NR==2{print $5}'

# 方法三:获取已用空间(以 GB 为单位)
df -BG / | awk 'NR==2{print $3}'

# 方法四:获取可用空间(以 GB 为单位)
df -BG / | awk 'NR==2{print $4}'

5. 显示 inode 信息

Inode 是文件系统中的索引节点,存储文件元数据。如果 inode 耗尽,即使磁盘空间充足也无法创建新文件。

1
2
3
4
5
6
7
8
# 显示 inode 使用情况
df -i

# 查看特定挂载点的 inode
df -i /

# 人类可读格式显示 inode
df -i -h

6. 显示文件系统类型

1
2
3
4
5
# 显示文件系统类型列
df -T

# 排除 tmpfs 显示
df -T -x tmpfs

7. 显示总量汇总

1
2
3
4
5
# 显示所有行并加上总量行
df -a --total

# 只显示总量
df --total

8. 格式化输出

1
2
3
4
5
6
7
8
9
# 仅显示指定列(使用 POSIX 输出格式)
df -P

# 显示本地文件系统
df -l

# 输出时每行一个文件系统
df -k    # 以 KB 为单位
df -m    # 以 MB 为单位

9. 高级过滤示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看已使用超过 80% 的文件系统
df -h | awk '$5>80{print}'

# 查看根分区和 home 分区的使用情况
df -h / /home

# 显示特定列(挂载点、使用率、可用空间)
df -h | awk '{print $1, $5, $4}'

# 格式化输出:设备名 | 大小 | 已用 | 可用 | 使用率 | 挂载点
df -h | awk '{printf "%-20s %10s %10s %10s %-10s %s\n", $1, $2, $3, $4, $5, $6}'

10. 在脚本中使用

1
2
3
4
5
6
7
8
9
#!/bin/bash
# 检查根目录使用率,超过 80% 时告警

USAGE=$(df -h / | awk 'NR==2 {gsub("%","",$5); print $5}')

if [ "$USAGE" -gt 80 ]; then
    echo "Warning: Root partition usage is ${USAGE}%"
    # 发送告警通知
fi

11. 监控多个挂载点

1
2
3
4
5
# 检查多个关键挂载点
for mount in / /home /data /var; do
    usage=$(df -h "$mount" 2>/dev/null | awk 'NR==2 {print $5}')
    echo "$mount: $usage"
done

常用参数汇总

参数 说明
-a 显示所有文件系统(包括伪文件系统)
-h 人类可读格式(自动选择单位)
-H 以 1000 为单位(与厂商一致)
-T 显示文件系统类型
-i 显示 inode 信息
-l 仅显示本地文件系统
-k 以 KB 为单位
-m 以 MB 为单位
-P POSIX 格式输出(每行一个文件系统)
-x 排除指定类型的文件系统
-t 仅显示指定类型的文件系统
--total 显示总量

实际应用案例

案例 1:获取根目录磁盘利用率

1
2
3
4
5
6
7
8
# 获取根目录磁盘使用率百分比
df | awk '$6=="/"{gsub("%","",$5); print $5}'

# 示例输出:
# 49

# 获取更详细的根目录信息
df -h /

输出示例:

1
2
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G   49G   51G  49% /

案例 2:查找使用率最高的分区

1
2
3
4
5
6
# 按使用率排序显示
df -h | grep -v 'tmpfs\|devtmpfs' | sort -k5 -hr

# 示例输出:
# /dev/sda2       500G  450G   50G  90% /data
# /dev/sda1       100G   80G   20G  80% /

案例 3:找出 inode 即将耗尽的文件系统

1
2
3
4
5
# 查找 inode 使用率超过 80% 的文件系统
df -i | awk '$5>80{print}'

# 完整显示 inode 信息
df -i -h

案例 4:排除伪文件系统查看磁盘

1
2
# 排除 tmpfs 和 devtmpfs,只看真实磁盘
df -h -x tmpfs -x devtmpfs -x squashfs

案例 5:与 du 命令配合使用

1
2
3
4
5
# 找出占用空间最大的目录
du -sh /* 2>/dev/null | sort -rh | head -10

# 查看特定目录属于哪个文件系统
df -h /var/log

df 与 du 的区别

特性 df du
全称 disk free disk usage
作用 显示文件系统整体使用情况 显示目录/文件占用空间
原理 读取文件系统元数据 遍历目录计算实际占用
适用场景 查看磁盘剩余空间 查找哪些目录占用空间多

常见问题

Q: 为什么 df 显示的已用空间比 du 多?

A: df 显示的是文件系统层面的已分配空间,而 du 只计算实际使用的文件。可能的原因:

  • 已删除但仍被进程占用的文件
  • 文件系统保留空间
  • 目录缓存

Q: 如何查看 inode 使用情况?

A: 使用 df -i 命令

Q: 为什么 /dev/sda 显示 0 可用但 df 显示有空间?

A: 文件系统通常保留 5% 空间供 root 使用,使用 tune2fs -m 0 可调整(慎用)。

总结

df 命令是 Linux 系统管理中最常用的工具之一,主要用于:

  • 查看磁盘空间使用情况
  • 监控系统存储状态
  • 在脚本中进行自动化监控

核心命令模板:

1
2
3
4
5
# 基本查看
df -h

# 获取根目录利用率
df | awk '$6=="/"{gsub("%","",$5); print $5}'

参考命令汇总

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 基本显示
df

# 人类可读格式
df -h

# 查看特定挂载点
df /

# 获取根目录使用率
df | awk '$6=="/"{gsub("%","",$5); print $5}'

# 显示 inode
df -i

# 显示文件系统类型
df -T

# 排除伪文件系统
df -h -x tmpfs

# 查看使用率超过 80% 的分区
df -h | awk '$5>80{print}'