Linux命令編寫一個用于監(jiān)控系統(tǒng)資源的腳本
介紹
我給你寫一個開箱即用、功能完整、格式清晰的 Linux 監(jiān)控腳本,支持監(jiān)控:
- CPU 使用率
- 內(nèi)存使用率
- 磁盤使用率
- 系統(tǒng)負載
- 網(wǎng)絡(luò)流量
- 進程 TOP 5
腳本會自動格式化輸出,可以定時運行、日志記錄、也可配合告警使用。
完整腳本:sys_monitor.sh
#!/bin/bash
# ==============================================
# Linux 系統(tǒng)資源監(jiān)控腳本
# 功能:CPU / 內(nèi)存 / 磁盤 / 負載 / 網(wǎng)絡(luò) / 進程
# ==============================================
# 日志輸出文件(可自定義)
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 "系統(tǒng)監(jiān)控報告 - $CURRENT_TIME" | tee -a $LOG_FILE
echo "==================================================" | tee -a $LOG_FILE
# ==============================================
# 2. 系統(tǒng)版本與主機信息
# ==============================================
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. 內(nèi)存使用率
# ==============================================
echo -e "\n?? 內(nèi)存使用情況:" | tee -a $LOG_FILE
free -h | awk 'NR==2{
printf "總內(nèi)存: %s\n已用: %s\n空閑: %s\n使用率: %.2f%%\n", $2, $3, $4, $3/$2*100
}' | tee -a $LOG_FILE
# ==============================================
# 5. 系統(tǒng)負載(1/5/15分鐘)
# ==============================================
echo -e "\n?? 系統(tǒng)負載:" | tee -a $LOG_FILE
uptime | awk '{print "1分鐘負載: " $10 " 5分鐘負載: " $11 " 15分鐘負載: " $12}' | tee -a $LOG_FILE
# ==============================================
# 6. 磁盤使用率(根分區(qū) /)
# ==============================================
echo -e "\n?? 磁盤使用率:" | tee -a $LOG_FILE
df -h / | awk 'NR==2{
printf "總?cè)萘? %s\n已用: %s\n可用: %s\n使用率: %s\n", $2, $3, $4, $5
}' | tee -a $LOG_FILE
# ==============================================
# 7. 網(wǎng)絡(luò)流量(網(wǎng)卡名可自行修改)
# ==============================================
echo -e "\n?? 網(wǎng)絡(luò)流量(網(wǎng)卡 eth0):" | tee -a $LOG_FILE
# 若網(wǎng)卡不是 eth0,用 ip addr 查看后替換
sar -n DEV 1 1 | grep eth0 | awk 'NR==3{
printf "接收流量: %.2f MB/s\n發(fā)送流量: %.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 占用內(nèi)存最高進程:" | 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
# ==============================================
# 結(jié)束
# ==============================================
echo -e "\n==================================================\n" | tee -a $LOG_FILE使用方法
創(chuàng)建腳本
vi sys_monitor.sh
把上面代碼粘貼進去,保存退出。
賦予執(zhí)行權(quán)限
chmod +x sys_monitor.sh
運行
./sys_monitor.sh
查看日志
cat /var/log/sys_monitor.log
腳本效果預覽
==================================================
系統(tǒng)監(jiān)控報告 - 2025-12-17 15:30:00
==================================================
?? 主機信息:
主機名: localhost
Operating System: CentOS Stream 9
Kernel: Linux 5.14.0-xxx
?? CPU 使用情況:
CPU 總使用率: 12.5%
?? 內(nèi)存使用情況:
總內(nèi)存: 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
# 可以發(fā)郵件、企業(yè)微信、釘釘告警
fi定時監(jiān)控(每分鐘執(zhí)行)
crontab -e
添加:
* * * * * /root/sys_monitor.sh
到此這篇關(guān)于Linux命令編寫一個用于監(jiān)控系統(tǒng)資源的腳本的文章就介紹到這了,更多相關(guān)Linux監(jiān)控系統(tǒng)資源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux使用Expect腳本實現(xiàn)自動化交互操作
Expect是一個基于Tcl的工具,用于自動化處理需要輸入的交互式命令,它可以模擬人類與程序交互,實現(xiàn)無人值守的自動化流程,文章介紹了Expect的基礎(chǔ)使用、常見場景,并提供了Java集成示例,同時,文章還討論了Expect的局限性、替代方案及性能優(yōu)化建議,需要的朋友可以參考下2026-04-04
apache中偽靜態(tài)配置和使用(Apache虛擬主機下Discuz偽靜態(tài))
apache中偽靜態(tài)配置和使用(Apache虛擬主機下Discuz偽靜態(tài)),需要的朋友可以參考下。2012-01-01
Linux使用watch命令監(jiān)控Docker容器狀態(tài)的操作方法
在現(xiàn)代的開發(fā)和運維環(huán)境中,容器化技術(shù)已經(jīng)成為一種重要的趨勢,而Docker作為最流行的容器化平臺之一,Linux中的watch命令就是一個非常有用的工具,它可以幫助我們定期執(zhí)行指定的命令,并全屏顯示輸出,本文給大家介紹了在Linux中使用watch命令監(jiān)控Docker容器狀態(tài)2024-10-10

