Linux命令编写一个用于监控系统资源的脚本

 更新时间:2026年06月02日 09:26:12   作者:不拘小节的竹笋_ecLhal  
这篇文章主要为大家详细介绍了如何通过Linux命令编写一个用于监控系统资源的脚本,支持CPU、内存、磁盘使用率和系统负载等监控项,希望对大家有所帮助

介绍

我给你写一个开箱即用、功能完整、格式清晰的 Linux 监控脚本,支持监控:

  • CPU 使用率
  • 内存使用率
  • 磁盘使用率
  • 系统负载
  • 网络流量
  • 进程 TOP 5

脚本会自动格式化输出,可以定时运行、日志记录、也可配合告警使用。

完整脚本:sys_monitor.sh

#!/bin/bash
# ==============================================
# Linux 系统资源监控脚本
# 功能:CPU / 内存 / 磁盘 / 负载 / 网络 / 进程
# ==============================================
# 日志输出文件(可自定义)
LOG_FILE="/var/log/sys_monitor.log"
# 获取当前时间
CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
# ==============================================
# 1. 输出标题
# ==============================================
echo -e "\n==================================================" | tee -a $LOG_FILE
echo "系统监控报告 - $CURRENT_TIME" | tee -a $LOG_FILE
echo "==================================================" | tee -a $LOG_FILE
# ==============================================
# 2. 系统版本与主机信息
# ==============================================
echo -e "\n📌 主机信息:" | tee -a $LOG_FILE
hostnamectl | grep "Static hostname" | awk '{print "主机名: " $3}' | tee -a $LOG_FILE
hostnamectl | grep "Operating System" | cut -d: -f2 | tee -a $LOG_FILE
hostnamectl | grep "Kernel" | cut -d: -f2 | tee -a $LOG_FILE
# ==============================================
# 3. CPU 使用率
# ==============================================
echo -e "\n📌 CPU 使用情况:" | tee -a $LOG_FILE
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *([0-9.]*)%* id.*/\1/" | awk '{print 100 - $1}')
echo "CPU 总使用率: $CPU_USAGE%" | tee -a $LOG_FILE
# ==============================================
# 4. 内存使用率
# ==============================================
echo -e "\n📌 内存使用情况:" | tee -a $LOG_FILE
free -h | awk 'NR==2{
    printf "总内存: %s\n已用: %s\n空闲: %s\n使用率: %.2f%%\n", $2, $3, $4, $3/$2*100
}' | tee -a $LOG_FILE
# ==============================================
# 5. 系统负载(1/5/15分钟)
# ==============================================
echo -e "\n📌 系统负载:" | tee -a $LOG_FILE
uptime | awk '{print "1分钟负载: " $10 "  5分钟负载: " $11 "  15分钟负载: " $12}' | tee -a $LOG_FILE
# ==============================================
# 6. 磁盘使用率(根分区 /)
# ==============================================
echo -e "\n📌 磁盘使用率:" | tee -a $LOG_FILE
df -h / | awk 'NR==2{
    printf "总容量: %s\n已用: %s\n可用: %s\n使用率: %s\n", $2, $3, $4, $5
}' | tee -a $LOG_FILE
# ==============================================
# 7. 网络流量(网卡名可自行修改)
# ==============================================
echo -e "\n📌 网络流量(网卡 eth0):" | tee -a $LOG_FILE
# 若网卡不是 eth0,用 ip addr 查看后替换
sar -n DEV 1 1 | grep eth0 | awk 'NR==3{
    printf "接收流量: %.2f MB/s\n发送流量: %.2f MB/s\n", $5/1024, $6/1024
}' | tee -a $LOG_FILE
# ==============================================
# 8. 占用资源最高的 5 个进程
# ==============================================
echo -e "\n📌 TOP5 占用 CPU 最高进程:" | tee -a $LOG_FILE
ps -aux --sort=-%cpu | head -6 | awk '{printf "%-8s %-6s %-6s %s\n", $1, $2, $3, $11}' | tee -a $LOG_FILE
echo -e "\n📌 TOP5 占用内存最高进程:" | tee -a $LOG_FILE
ps -aux --sort=-%mem | head -6 | awk '{printf "%-8s %-6s %-6s %s\n", $1, $2, $4, $11}' | tee -a $LOG_FILE
# ==============================================
# 结束
# ==============================================
echo -e "\n==================================================\n" | tee -a $LOG_FILE

使用方法

创建脚本

vi sys_monitor.sh

把上面代码粘贴进去,保存退出。

赋予执行权限

chmod +x sys_monitor.sh

运行

./sys_monitor.sh

查看日志

cat /var/log/sys_monitor.log

脚本效果预览

==================================================
系统监控报告 - 2025-12-17 15:30:00
==================================================

📌 主机信息:
主机名: localhost
Operating System: CentOS Stream 9
Kernel: Linux 5.14.0-xxx

📌 CPU 使用情况:
CPU 总使用率: 12.5%

📌 内存使用情况:
总内存: 7.6Gi
已用: 2.3Gi
空闲: 4.1Gi
使用率: 30.20%

...

可选增强功能(你可以直接加进去)

超过阈值自动告警(示例)

# 磁盘使用率超过 85% 告警
DISK_USAGE=$(df -h / | grep / | awk '{print $5}' | sed 's/%//g')
if [ $DISK_USAGE -gt 85 ]; then
    echo "⚠️  磁盘使用率过高!当前:$DISK_USAGE%" | tee -a $LOG_FILE
    # 可以发邮件、企业微信、钉钉告警
fi

定时监控(每分钟执行)

crontab -e

添加:

* * * * * /root/sys_monitor.sh

到此这篇关于Linux命令编写一个用于监控系统资源的脚本的文章就介绍到这了,更多相关Linux监控系统资源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux云主机安装pdo详细教程

    linux云主机安装pdo详细教程

    这篇文章主要介绍了linux云主机安装pdo详细教程,网上搜到一个几个还算清晰的教程,但是没加说明,很多站长按照做了,中途出现错误,便不知如何解决了,这里特整理一下方便需要的朋友
    2017-08-08
  • Linux使用Expect脚本实现自动化交互操作

    Linux使用Expect脚本实现自动化交互操作

    Expect是一个基于Tcl的工具,用于自动化处理需要输入的交互式命令,它可以模拟人类与程序交互,实现无人值守的自动化流程,文章介绍了Expect的基础使用、常见场景,并提供了Java集成示例,同时,文章还讨论了Expect的局限性、替代方案及性能优化建议,需要的朋友可以参考下
    2026-04-04
  • Linux 添加永久静态路由的方法

    Linux 添加永久静态路由的方法

    本篇文章主要介绍了Linux 添加永久静态路由的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • linux系统安装msf的过程详解

    linux系统安装msf的过程详解

    这篇文章主要介绍了linux系统安装msf的过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • linux下如何创建守护进程的步骤

    linux下如何创建守护进程的步骤

    本篇文章主要介绍了linux下如何创建守护进程的步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Ubuntu14.04安装、配置与卸载QT5的步骤详解

    Ubuntu14.04安装、配置与卸载QT5的步骤详解

    这篇文章主要介绍了Ubuntu14.04安装、配置与卸载QT5详细步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Ubuntu Apache配置以及cgi配置方法

    Ubuntu Apache配置以及cgi配置方法

    这篇文章主要介绍了Ubuntu Apache配置以及cgi配置方法,需要的朋友可以参考下
    2015-10-10
  • Linux使用join -a1来合并两个文件

    Linux使用join -a1来合并两个文件

    今天小编就为大家分享一篇关于Linux使用join -a1来合并两个文件,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • apache中伪静态配置和使用(Apache虚拟主机下Discuz伪静态)

    apache中伪静态配置和使用(Apache虚拟主机下Discuz伪静态)

    apache中伪静态配置和使用(Apache虚拟主机下Discuz伪静态),需要的朋友可以参考下。
    2012-01-01
  • Linux使用watch命令监控Docker容器状态的操作方法

    Linux使用watch命令监控Docker容器状态的操作方法

    在现代的开发和运维环境中,容器化技术已经成为一种重要的趋势,而Docker作为最流行的容器化平台之一,Linux中的watch命令就是一个非常有用的工具,它可以帮助我们定期执行指定的命令,并全屏显示输出,本文给大家介绍了在Linux中使用watch命令监控Docker容器状态
    2024-10-10

最新评论