脚本中Df空间查看如何人性化

wen 实用脚本 8

本文目录导读:

脚本中Df空间查看如何人性化

  1. 直接使用 df -h(最常用)
  2. 带标题和分隔线(适合日志或邮件报告)
  3. 只显示使用率超标的挂载点(预警式输出)
  4. 转换为 GiB/TiB 并添加颜色(极端人性化)
  5. 对于脚本内处理(非人类看,但保持可读)
  6. 总结:如何选择?

在脚本中人性化地查看磁盘空间(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 的输出直接可以给人类看,但在脚本中进一步处理(如做数值比较)时,GBMB 字符会干扰计算,需要用 df -B1df --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),排序(按使用率降序),加颜色或符号(⚠️ ✅),只显示阈值的行,这样才算真正“人性化”。

抱歉,评论功能暂时关闭!