本文目录导读:

- 直接使用
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),排序(按使用率降序),加颜色或符号(⚠️ ✅),只显示阈值的行,这样才算真正“人性化”。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播