用 10 行 Bash 脚本打造轻量级 Linux 系统资源监控工具

2026年01月20日/ 浏览 11

在进行应用部署、系统调试或资源压力测试时,实时掌握系统资源的使用情况至关重要。虽然市面上有很多优秀的开源监控平台(如 Prometheus + Grafana、Zabbix、Netdata 等),但对于临时性、轻量级的监控需求而言,借助 Bash 脚本快速搭建一个简易监控工具,不仅高效实用,更是系统管理员手中的一把利器。

本文将详尽介绍如何使用不足 10 行的 Bash 脚本,在 Linux 环境下实现对 CPU、内存和磁盘使用率的实时监控。该脚本每秒输出一次资源占用信息,并可将结果输出到日志文件中,方便后续导入 Excel 进行可视化分析。适用于测试环境、资源评估以及新应用上线前的压力分析。

一、监控方案概览

本脚本主要分为三部分:

内存使用率监控磁盘使用率监控CPU 使用率监控

并通过 while 循环定时刷新数据,每次输出一行三列的数据表,记录系统资源使用情况。

二、监控内存使用率:free + awk

我们使用如下命令提取当前系统的内存使用百分比:

free -m | awk NR==2{printf "%.2f%%\t\t", $3*100/$2 }

原理解析:

free -m 会输出以 MB 为单位的内存使用情况。
awk NR==2{...} 取第二行(Mem 行)。$3 为已用内存,$2 为总内存,$3*100/$2 即计算使用率。

三、监控磁盘使用率:df + awk

命令如下:

df -h | awk $NF=="/"{printf "%s\t\t", $5}

原理解析:

df -h 输出所有挂载点的磁盘使用情况。$NF=="/" 表示匹配挂载在根目录 / 的那一行。$5 是使用率字段,形如 7%

示例输出:

四、监控 CPU 使用率:top + grep + awktop -bn1 | grep load | awk {printf "%.2f%%\t\t\n", $(NF-2)}

原理解析:

top -bn1:一次性以 batch 模式运行 top 命令。grep load:筛选包含 load average 的行。$(NF-2):倒数第三个字段,即 1 分钟平均负载(例如 0.00),我们将其近似表示为 CPU 使用率。

注意:此方法虽不能精准反映 CPU 百分比,但在轻量级监控中具有代表性,适合趋势观察。

五、组装脚本核心逻辑

将三个子命令分别封装到变量中,并构建一个持续运行的循环:

MEMORY=$(free -m | awk NR==2{printf "%.2f%%\t\t", $3*100/$2 }) DISK=$(df -h | awk $NF=="/"{printf "%s\t\t", $5}) CPU=$(top -bn1 | grep load | awk {printf "%.2f%%\t\t\n", $(NF-2)})

定义运行时长,并以 5 秒为间隔输出数据:

end=$((SECONDS+3600)) # 运行 1 小时 while [ $SECONDS -lt $end ]; do echo "$MEMORY$DISK$CPU" sleep 5 done

六、完整 Bash 脚本(stats.sh)

#!/bin/bash printf "Memory\t\tDisk\t\tCPU\n" end=$((SECONDS+3600)) # 运行一小时,可修改为任意秒数 while [ $SECONDS -lt $end ]; do MEMORY=$(free -m | awk NR==2{printf "%.2f%%\t\t", $3*100/$2 }) DISK=$(df -h | awk $NF=="/"{printf "%s\t\t", $5}) CPU=$(top -bn1 | grep load | awk {printf "%.2f%%\t\t\n", $(NF-2)}) echo "$MEMORY$DISK$CPU" sleep 5 done

执行方式:

chmod +x stats.sh ./stats.sh

七、保存数据到日志文件以供分析

若希望将监控结果保存:

./stats.sh >> resource_log.txt

可在 Excel 中打开 resource_log.txt,使用制表符分隔进行图表分析。

picture loss