Linux 服务器实时监控Shell 脚本

1. 实时刷新

bash 复制代码
#!/bin/bash

# realtime_monitor.sh - Linux 服务器实时监控脚本

# 清屏函数
clear_screen() {
    clear
}

# 显示头部信息
show_header() {
    echo "========================================"
    echo "    Linux 服务器实时监控 (按 q 退出)    "
    echo "========================================"
    echo "更新时间: $(date)"
    echo
}

# 显示系统基本信息
show_system_info() {
    echo "1. 系统基本信息"
    echo "----------------"
    echo "主机名: $(hostname)"
    echo "运行时间: $(uptime | awk -F',' '{print $1}' | awk -F'up' '{print $2}')"
    echo "负载平均值: $(uptime | awk -F'load average:' '{print $2}')"
    echo
}

# 显示CPU和内存使用情况
show_cpu_memory() {
    echo "2. CPU 和内存使用情况"
    echo "----------------------"
    # 获取CPU使用率
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
    echo "CPU 使用率: ${cpu_usage}%"
    
    # 显示内存信息
    free -h | grep -E 'Mem|Swap'
    echo
}

# 显示磁盘使用情况
show_disk_usage() {
    echo "3. 磁盘使用情况"
    echo "----------------"
    df -h | grep -E '^Filesystem|/' | head -5
    echo
}

# 显示网络接口状态
show_network_status() {
    echo "4. 网络接口状态"
    echo "----------------"
    ip -br addr show | grep UP | head -3
    echo
}

# 显示最占用资源的进程
show_top_processes() {
    echo "5. 最占用资源的进程 (Top 5)"
    echo "----------------------------"
    ps aux --sort=-%cpu | head -6 | awk '{printf "%-8s %-8s %-5s %-5s %s\n", $1, $2, $3, $4, $11}' | head -1
    ps aux --sort=-%cpu | head -6 | tail -5 | awk '{printf "%-8s %-8s %-5s %-5s %s\n", $1, $2, $3"%", $4"%", $11}'
    echo
}

# 主监控循环
main_monitor() {
    while true; do
        clear_screen
        show_header
        show_system_info
        show_cpu_memory
        show_disk_usage
        show_network_status
        show_top_processes
        
        echo "========================================"
        echo "按 'q' 退出, 其他键刷新"
        echo "========================================"
        
        # 非阻塞读取用户输入
        read -n1 -t 3 key
        if [[ $key == "q" ]] || [[ $key == "Q" ]]; then
            echo
            echo "退出实时监控..."
            break
        fi
    done
}

# 检查是否支持所需命令
check_commands() {
    local commands=("top" "free" "df" "ip" "ps")
    for cmd in "${commands[@]}"; do
        if ! command -v "$cmd" &> /dev/null; then
            echo "错误: 找不到命令 '$cmd'"
            exit 1
        fi
    done
}

# 初始化检查
check_commands

# 启动主监控
main_monitor

效果:

bash 复制代码
========================================
    Linux 服务器实时监控 (按 q 退出)    
========================================
更新时间: Fri Nov 21 05:59:04 AM EET 2025

1. 系统基本信息
----------------
主机名: 
运行时间:  26 days
负载平均值:  0.22, 0.41, 0.33

2. CPU 和内存使用情况
----------------------
CPU 使用率: 3.1%
Mem:            30Gi        25Gi       276Mi        42Mi       5.1Gi       5.0Gi
Swap:             0B          0B          0B

3. 磁盘使用情况
----------------
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs           6.1G   43M  6.1G   1% /run
/dev/nvme0n1p2  100G   38G   63G  38% /

4. 网络接口状态
----------------
eth0             UP             192.168.1.114/24 fe80::ee:1bff:feb4:7b03/64 

5. 最占用资源的进程 (Top 5)
----------------------------
USER     PID      %CPU  %MEM  COMMAND
op       1927653  10.7% 20.7% /project/server/jdk/bin/java
op       88868    6.4%  4.6%  /project/server/jdk/bin/java
op       2717493  2.2%  6.6%  /project/server/jdk/bin/java
op       2702376  1.6%  7.9%  /project/server/jdk/bin/java
op       2702463  1.4%  15.5% /project/server/jdk/bin/java

========================================
按 'q' 退出, 其他键刷新
========================================

2. 一次执行

bash 复制代码
#!/bin/bash

# server_monitor.sh - Linux 服务器配置和负载监控脚本

echo "========================================"
echo "    Linux 服务器配置和负载监控报告      "
echo "========================================"
echo

# 系统基本信息
echo "1. 系统基本信息"
echo "----------------"
echo "主机名: $(hostname)"
echo "系统时间: $(date)"
echo "运行时间: $(uptime | awk -F',' '{print $1}' | awk -F'up' '{print $2}')"
echo "系统版本: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo

# CPU 信息
echo "2. CPU 信息"
echo "------------"
lscpu | grep -E "Architecture|Model name|CPU\(s\)|Thread\(s\) per core|Core\(s\) per socket"
echo

# 内存信息
echo "3. 内存信息"
echo "------------"
free -h
echo

# 磁盘使用情况
echo "4. 磁盘使用情况"
echo "----------------"
df -h
echo

# 网络接口信息
echo "5. 网络接口信息"
echo "----------------"
ip -br addr show | grep UP
echo

# 当前系统负载
echo "6. 当前系统负载"
echo "----------------"
uptime
echo

# 最占用资源的进程 (Top 5)
echo "7. 最占用 CPU 的进程 Top 5"
echo "----------------------------"
ps aux --sort=-%cpu | head -6
echo

echo "8. 最占用内存的进程 Top 5"
echo "--------------------------"
ps aux --sort=-%mem | head -6
echo

# 网络连接状态
echo "9. 网络连接状态"
echo "----------------"
echo "TCP 连接数: $(ss -t | wc -l)"
echo "活跃连接数: $(ss -t state established | wc -l)"
echo

# 最后显示实时监控提示
echo "========================================"
echo "如需实时监控,可使用以下命令:"
echo "- top 或 htop (CPU/内存实时监控)"
echo "- iotop (磁盘I/O实时监控)"
echo "- nethogs (网络流量实时监控)"
echo "========================================"
bash 复制代码
========================================
    Linux 服务器配置和负载监控报告      
========================================

1. 系统基本信息
----------------
主机名:
系统时间: Fri Nov 21 12:19:55 PM EET 2025
运行时间:  27 days
系统版本: CentOS Stream 9

2. CPU 信息
------------
Architecture:                       x86_64
CPU(s):                             4
On-line CPU(s) list:                0-3
Model name:                         AMD EPYC 7R13 Processor
Thread(s) per core:                 2
Core(s) per socket:                 2
NUMA node0 CPU(s):                  0-3

3. 内存信息
------------
               total        used        free      shared  buff/cache   available
Mem:            30Gi        22Gi       1.8Gi        42Mi       6.4Gi       7.8Gi
Swap:             0B          0B          0B

4. 磁盘使用情况
----------------
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs            16G     0   16G   0% /dev/shm
tmpfs           6.1G   43M  6.1G   1% /run
/dev/nvme0n1p2  100G   40G   61G  40% /
tmpfs           3.1G     0  3.1G   0% /run/user/1100
tmpfs           3.1G     0  3.1G   0% /run/user/1101

5. 网络接口信息
----------------
eth0             UP             192.168.1.114/24 fe80::ee:1bff:feb4:7b03/64 

6. 当前系统负载
----------------
 12:19:55 up 27 days,  1:37,  3 users,  load average: 0.21, 0.91, 2.52

7. 最占用 CPU 的进程 Top 5
----------------------------


8. 最占用内存的进程 Top 5
--------------------------
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

op       2717493  2.4  7.5 5670256 2413548 ?     Sl   Nov20  37:55 
op       3141909 41.9  7.2 5269516 2324868 ?     Sl   11:57   9:34 /project/server/jdk/bin/java 8.0.0.jar
op       3141703 36.4  7.2 5395032 2296836 ?     Sl   11:57   8:18 /project/server/jdk/bin/java 8.0.0.jar
op       3141952 42.6  7.1 5214716 2266128 ?     Sl   11:57   9:43 /project/server/jdk/bin/java 8.0.0.jar

9. 网络连接状态
----------------
TCP 连接数: 335
活跃连接数: 318

========================================
如需实时监控,可使用以下命令:
- top 或 htop (CPU/内存实时监控)
- iotop (磁盘I/O实时监控)
- nethogs (网络流量实时监控)
========================================
相关推荐
顾安r1 小时前
11.21 脚本 网页优化
linux·前端·javascript·算法·html
last demo1 小时前
iscsi服务器
linux·运维·服务器·php
qq_282195311 小时前
嵌入式音频USB Audio调试
linux·音视频
海域云-罗鹏1 小时前
电商掘金日本:SDWAN专线刚需原因
服务器·网络·网络协议
Predestination王瀞潞2 小时前
Cuda的安装
linux·人工智能·深度学习
ClassOps2 小时前
Chrome 插件记录
前端·chrome
石像鬼₧魂石2 小时前
如何使用Kali Linux自带字典进行密码破解?
linux·运维·服务器
JiMoKuangXiangQu3 小时前
Linux 时间子系统 (1):基础框架概述
linux·timer·时间子系统·timekeeping