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中改变文件权限的chmod命令详析

    Linux中改变文件权限的chmod命令详析

    在 Linux 命令中,chmod用于修改文件或者目录的权限。下面这篇文章主要给大家介绍了关于Linux中改变文件权限的chmod命令的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面来一学习学习吧
    2018-06-06
  • windows安装apache系统中无apache2服务解决方案

    windows安装apache系统中无apache2服务解决方案

    一直都是用WIN开发PHP,今天有用户反映SHUGUANG CMS在APACHE+PHP中不能正常运行,只好自己机器配置个环境测试,遇到点小问题,搜索相关资料,终于解决
    2011-09-09
  • 实战 LAMP 服务器配置 完整篇

    实战 LAMP 服务器配置 完整篇

    LAMP 服务器配置 按部就班篇,大家可以学习试试。
    2009-06-06
  • Linux命令每天必学(5)之rm命令

    Linux命令每天必学(5)之rm命令

    rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变
    2016-01-01
  • Linux切换用户环境变量消失问题及解决

    Linux切换用户环境变量消失问题及解决

    这篇文章主要介绍了Linux切换用户环境变量消失问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Linux系统下安装jdbc与tomcat的图文教程

    Linux系统下安装jdbc与tomcat的图文教程

    本文通过图文并茂的形式给大家介绍了Linux系统下安装jdbc与tomcat的方法,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友参考下吧
    2018-01-01
  • linux实现除了某个文件或某个文件夹以外的全部删除

    linux实现除了某个文件或某个文件夹以外的全部删除

    下面小编就为大家带来一篇linux实现除了某个文件或某个文件夹以外的全部删除。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Linux下安装jdk1.8并配置环境变量的教程

    Linux下安装jdk1.8并配置环境变量的教程

    这篇文章主要介绍了Linux下安装jdk1.8并配置环境变量的教程,需要的朋友可以参考下
    2018-03-03
  • 深入理解Apache Airflow 调度器(最新推荐)

    深入理解Apache Airflow 调度器(最新推荐)

    Apache Airflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并遵循最佳优化实践,你可以确保数据管道高效可靠地运行,本文介绍Apache Airflow 调度器的相关知识,感兴趣的朋友一起看看吧
    2025-02-02
  • linux文件上传,给文件或目录添加apache权限的方法

    linux文件上传,给文件或目录添加apache权限的方法

    下面小编就为大家带来一篇linux文件上传,给文件或目录添加apache权限的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11

最新评论