本文目录导读:

- 直接使用
df -h(最常用) - 带标题和分隔线(适合日志或邮件报告)
- 只显示使用率超标的挂载点(预警式输出)
- 转换为 GiB/TiB 并添加颜色(极端人性化)
- 对于脚本内处理(非人类看,但保持可读)
- 总结:如何选择?
在脚本中人性化地查看磁盘空间(df),核心目标是让人类一眼就能看懂,而不是去看那些冰冷的字节数,以下是几种在 Shell 脚本中实现人性化 df 输出的方法,按推荐程度排序:
直接使用 df -h(最常用)
这是最简单、最“人性化”的内置选项。-h 代表 --human-readable。
# 查看所有挂载点
df -h
# 只看特定目录(例如根目录)
df -h /
# 只看本地文件系统(排除 tmpfs, devtmpfs 等虚拟文件系统)
df -h -x tmpfs -x devtmpfs
# 只显示已用容量大于 50% 的分区(利用 awk 过滤)
df -h | awk 'NR>1 && $5 ~ /[0-9]+%/ { if ( int($5) > 50 ) print }'
优点:标准、简单、所有 Linux 发行版都支持。 输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 15G 4.6G 76% /
/dev/sdb1 100G 30G 70G 30% /data
注意:df -h 的输出直接可以给人类看,但在脚本中进一步处理(如做数值比较)时,GB、MB 字符会干扰计算,需要用 df -B1 或 df --block-size=1 获取原始字节。
和分隔线(适合日志或邮件报告)
当输出要给运维人员看,或作为报告发送时,可以加上格式化,让它更清晰易读。
#!/bin/bash
echo "=========================================="
echo " 磁盘空间使用情况报告"
echo "=========================================="
printf "%-20s %-8s %-8s %-8s %-5s %s\n" "文件系统" "总大小" "已用" "可用" "使用%" "挂载点"
df -h | tail -n +2 | while read fs size used avail use mount; do
printf "%-20s %-8s %-8s %-8s %-5s %s\n" "$fs" "$size" "$used" "$avail" "$use" "$mount"
done
echo "=========================================="
效果:列对齐,一眼看到重点。
只显示使用率超标的挂载点(预警式输出)
在监控脚本中,用户只关心“危险”的盘,忽略正常的。
#!/bin/bash
THRESHOLD=80
echo "检查磁盘使用率(> ${THRESHOLD}% 报警):"
df -h | grep -vE '^Filesystem|tmpfs|devtmpfs' | while read line; do
usage=$(echo $line | awk '{print $5}' | sed 's/%//')
mount_point=$(echo $line | awk '{print $6}')
if [ "$usage" -ge "$THRESHOLD" ]; then
echo "⚠️ 警告: $mount_point 使用率已达 ${usage}%"
else
echo "✅ 正常: $mount_point ($usage%)"
fi
done
优点:只显示用户关心的信息,减少认知负担。
转换为 GiB/TiB 并添加颜色(极端人性化)
利用 tput 或 ANSI 转义码,在终端输出带颜色的结果。
#!/bin/bash
# 颜色定义
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
RESET=$(tput sgr0)
df -h | grep -vE '^Filesystem|tmpfs|devtmpfs' | while read fs size used avail use mount; do
use_pct=${use%\%} # 去掉 % 符号
if [ "$use_pct" -ge 90 ]; then
color=$RED
elif [ "$use_pct" -ge 70 ]; then
color=$YELLOW
else
color=$GREEN
fi
printf "${color}%-20s %-8s %-8s %-8s %-5s %s${RESET}\n" "$fs" "$size" "$used" "$avail" "$use" "$mount"
done
效果:绿色正常、黄色预警、红色危险,一目了然。
对于脚本内处理(非人类看,但保持可读)
如果脚本需要读取数值做逻辑判断(比如判断根目录是否超过 90%),但你还想打印一条人性化的消息:
# 获取已用百分比(整数),同时打印人类可读的行
used_pct=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
echo "当前根分区使用率: ${used_pct}%"
if [ "$used_pct" -gt 90 ]; then
echo "警告:根分区即将耗尽!"
fi
如何选择?
| 场景 | 推荐命令 | 原因 |
|---|---|---|
| 终端直接看 | df -h |
最原生、快 |
| 看关键盘 | df -h / /data /var |
只列关心的 |
| 写监控脚本 | df | awk + 条件判断 |
可做数学计算 |
| 发送邮件/报表 | 格式化 printf + 表头 |
整洁、专业 |
| 给非技术同事看 | 图形化进度条 + 颜色 | 无理解门槛 |
核心思路:输出时尽量去掉无用字段(如 tmpfs),排序(按使用率降序),加颜色或符号(⚠️ ✅),只显示阈值的行,这样才算真正“人性化”。