Appearance
df 命令:磁盘空间使用情况分析利器
1. 命令简介
df
(Disk Free 的缩写)是一个强大的 Unix/Linux 命令行工具,用于报告文件系统磁盘空间的使用情况。它可以显示文件系统的总大小、已用空间、可用空间以及使用率等信息。这个命令在系统管理、存储规划和故障排查中扮演着关键角色。
2. 基本语法
bash
df [选项] [文件系统]
3. 常用选项详解
-h
或--human-readable
: 以人类可读的格式显示大小(如 KB, MB, GB)-T
或--print-type
: 显示文件系统类型-i
或--inodes
: 显示 inode 信息而不是块使用量-a
或--all
: 包括伪文件系统、重复项和不可访问的文件系统-x
或--exclude-type
: 排除指定类型的文件系统--total
: 显示总计行-P
或--portability
: 使用 POSIX 输出格式
4. 基础用法示例
4.1 显示所有文件系统的使用情况
bash
df -h
输出示例:
shell
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 13G 6.2G 68% /
/dev/sda2 100G 52G 48G 52% /home
tmpfs 3.9G 0 3.9G 0% /dev/shm
4.2 显示特定文件系统的使用情况
bash
df -h /home
输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 52G 48G 52% /home
4.3 显示文件系统类型
bash
df -T
输出示例:
shell
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sda1 ext4 20511356 13123460 6351512 68% /
/dev/sda2 ext4 103081248 52428800 50652448 52% /home
tmpfs tmpfs 4017032 0 4017032 0% /dev/shm
5. 高级用法和技巧
5.1 显示 Inode 使用情况
bash
df -i
输出示例:
shell
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1310720 279886 1030834 22% /
/dev/sda2 6553600 135168 6418432 3% /home
5.2 排除特定类型的文件系统
bash
df -h -x tmpfs -x devtmpfs
这将显示所有文件系统的使用情况,但排除 tmpfs 和 devtmpfs 类型。
5.3 只显示本地文件系统
bash
df -hl
5.4 结合 Awk 提取特定信息
bash
df -h | awk '$NF=="/" {print $5}'
这将只显示根文件系统的使用百分比。
6. 实际应用场景
6.1 监控磁盘空间并发送警报
bash
#!/bin/bash
# disk_space_monitor.sh
THRESHOLD=90
EMAIL="admin@example.com"
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $THRESHOLD ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" | \
mail -s "Alert: Almost out of disk space $usep%" $EMAIL
fi
done
这个脚本检查所有分区的使用情况,如果任何分区的使用率超过 90%,就会发送一封警报邮件。
6.2 创建磁盘使用报告
bash
#!/bin/bash
# disk_usage_report.sh
echo "Disk Usage Report for $(date +"%Y-%m-%d")" > disk_report.txt
echo "================================================" >> disk_report.txt
echo "" >> disk_report.txt
echo "Overall Disk Usage:" >> disk_report.txt
df -h --total | grep total >> disk_report.txt
echo "" >> disk_report.txt
echo "Disk Usage by Filesystem:" >> disk_report.txt
df -h | grep -v tmp >> disk_report.txt
echo "" >> disk_report.txt
echo "Inodes Usage:" >> disk_report.txt
df -i | grep -v tmp >> disk_report.txt
echo "Report generated and saved as disk_report.txt"
这个脚本创建一个包含磁盘使用情况的详细报告,包括总体使用情况、各文件系统的使用情况和 inode 使用情况。
7. 性能考虑
df
命令通常执行速度很快,但在有大量挂载点的系统上可能会稍慢。- 频繁运行
df
命令(如在循环中)可能会导致不必要的 I/O 操作。考虑缓存结果或减少调用频率。
8. 安全注意事项
df
命令本身不会修改任何系统设置,但它可能会暴露系统结构信息。- 在多用户系统中,普通用户可能无法看到某些挂载点的信息。
- 避免在公开脚本中硬编码敏感的文件系统路径。
9. 与其他工具的集成
- 结合
awk
,sed
,grep
等命令可以实现更复杂的磁盘空间分析。 - 可以与
cron
一起使用来定期检查磁盘空间。 - 与
du
命令结合使用可以提供更详细的磁盘使用情况分析。
10. 故障排除
- 如果
df
命令卡住,可能是由于 NFS 挂载点响应缓慢。使用df -l
只显示本地文件系统。 - 在某些系统上,
df
和du
命令可能显示不一致的结果,这通常是由于文件系统的特性(如快照、压缩)或正在运行的进程占用空间导致的。
11. 相关命令
du
: 估算文件和目录的空间使用量fdisk
: 磁盘分区工具mount
: 挂载文件系统lsblk
: 列出块设备信息findmnt
: 查找文件系统的挂载信息
通过掌握这些 df
命令的高级用法和技巧,系统管理员和开发人员可以更有效地监控和管理磁盘空间,从而确保系统的稳定运行和性能优化。