快速检查服务器状态脚本

使用一个脚本快速检查服务器当前相关的状态


#!/bin/bash

:<<!
    功能:Linux服务器资源检查脚本。
            1、此脚本可检查目标服务器基础信息、CPU信息、内存信息、磁盘信息、网络信息。
            2、此脚本仅适用于单机服务器,未设计查看远程服务器信息功能。
            3、此脚本适用于符合LSB标准的系统。
    版本:1.2
    作者:lidj
    邮件:dejinx@qq.com
    日期:2021-09-10
!

# 颜色函数
function color_schema() {
    #  色彩    黑  红  绿  黄  蓝  洋红  青  白
    # 前景色   30  31  32  33  34   35   36  37
    # 背景色   40  41  42  43  44   45   46  47
    #
    # 规则 \033[前景色;背景色m

    high_color="\033[1;31m"
    low_color="\033[1;34m"
    medium_color="\033[1;35m"
    default_color="\033[0m"
}

# 服务器基础信息检查函数
function server_basics_message() {
    echo -e -n "--------------------------------基础信息--------------------------------\n"

    local os_name=`grep "PRETTY_NAME" /etc/os-release | cut -d= -f2 | cut -d\" -f2`
    local kernel_release=`uname -r`
    local os_hostname=`hostname`
    local now_time=`date +%Y-%m-%d\ %H:%M:%S`
    local sys_lang=`echo $LANG`

    echo -e "  系    统:\t${os_name}"
    echo -e "  内    核:\t${kernel_release}"
    echo -e "  主 机 名:\t${os_hostname}"
    echo -e "  系统语系: \t${sys_lang}"
    echo -e "  当前时间:\t${now_time}"
}

# CPU基础信息检查函数
function cpu_message() {
    color_schema

    echo -e -n "--------------------------------CPU 信息--------------------------------\n"

    local physical_id=`grep "physical id" /proc/cpuinfo | sort | uniq | wc -l`
    local cpu_cores=`grep "cpu cores" /proc/cpuinfo | uniq | awk '{print $4}'`
    local siblings=`grep "siblings" /proc/cpuinfo | uniq | awk '{print $3}'`
    local processor=`grep "processor" /proc/cpuinfo | wc -l`

    local cpu_availing=`top -n1 -b | grep "%Cpu(s)" | cut -d, -f4 | cut -c 1-5 | sed -e 's/^[ ]*//g' | sed -e 's/[ ]*$//g'`
    local cpu_using=`awk 'BEGIN{printf "%0.2f%%",100-'${cpu_availing}'}'`

    local cpu_using_tmp=`awk 'BEGIN{printf "%0.2f",100-'${cpu_availing}'}'`

    if [ ${cpu_cores} -eq ${siblings} ]; then
        local is_use_hyper_threading="否"
    else
        local is_use_hyper_threading="是"
    fi

    echo -e "  物理CPU总数:        \t${physical_id}"
    echo -e "  逻辑CPU总数:        \t${processor}"
    echo -e "  每颗物理CPU的核心数:\t${cpu_cores}"
    echo -e "  是否使用超线程技术: \t${is_use_hyper_threading}"

    if [ $(echo "${cpu_using_tmp} < "33.33" " | bc) = "1" ]; then
        echo -e "  CPU使用率:          \t${low_color}${cpu_using}${default_color}"
    elif [ $(echo "${cpu_using_tmp} > "66.66" " | bc) = "1" ]; then
        echo -e "  CPU使用率:          \t${high_color}${cpu_using}${default_color}"
    else
        echo -e "  CPU使用率:          \t${medium_color}${cpu_using}${default_color}"
    fi
}

# 内存基本信息检查函数
function mem_message() {
    color_schema

    echo -e -n "--------------------------------内存信息--------------------------------\n"

    local mem_total_tmp=`free | grep "Mem" | awk '{print $2}'`
    local mem_used_tmp=`free | grep "Mem" | awk '{print $3}'`
    local mem_free_tmp=`free | grep "Mem" | awk '{print $4}'`

    local mem_total=`awk 'BEGIN{printf "%0.2f",'${mem_total_tmp}'/1024/1024}'`
    local mem_used=`awk 'BEGIN{printf "%0.2f",'${mem_used_tmp}'/1024/1024}'`
    local mem_avail=`awk 'BEGIN{printf "%0.2f",'${mem_total}'-'${mem_used}'}'`
    local mem_free=`awk 'BEGIN{printf "%0.2f",'${mem_free_tmp}'/1024/1024}'`

    local mem_using=`awk 'BEGIN{printf "%0.2f%%",'${mem_used}'/'${mem_total}'*100}'`

    local mem_using_tmp=`awk 'BEGIN{printf "%0.2f",'${mem_used}'/'${mem_total}'*100}'`

    local swap_total_tmp=`free | grep "Swap" | awk '{print $2}'`
    local swap_total=`awk 'BEGIN{printf "%0.2f",'${swap_total_tmp}'/1024/1024}'`

    local is_exist_swap="Unknow"

    if [ ${swap_total} = "0.00" ]; then
        local is_exist_swap="No"
    else
        local swap_used_tmp=`free | grep "Swap" | awk '{print $3}'`
        local swap_free_tmp=`free | grep "Swap" | awk '{print $4}'`

        local swap_used=`awk 'BEGIN{printf "%0.2f",'${swap_used_tmp}'/1024/1024}'`
        local swap_avail=`awk 'BEGIN{printf "%0.2f",'${swap_total}'-'${swap_used}'}'`
        local swap_free=`awk 'BEGIN{printf "%0.2f",'${swap_free_tmp}'/1024/1024}'`

        local swap_using=`awk 'BEGIN{printf "%0.2f%%",'${swap_used}'/'${swap_total}'*100}'`

        local swap_using_tmp=`awk 'BEGIN{printf "%0.2f",'${swap_used}'/'${swap_total}'*100}'`
    fi

    echo -e "  物理内存:"
    echo -e "\t总量:\t${mem_total}G"
    echo -e "\t使用:\t${mem_used}G"
    echo -e "\t剩余:\t${mem_avail}G"
    echo -e "\tFree态:${mem_free}G"

    if [ $(echo "${mem_using_tmp} < "33.33" " | bc ) = "1" ]; then
        echo -e "\t使用率:${low_color}${mem_using}${default_color}"
    elif [ $(echo "${mem_using_tmp} > "66.66" " | bc ) = "1" ]; then
        echo -e "\t使用率:${high_color}${mem_using}${default_color}"
    else
        echo -e "\t使用率:${medium_color}${mem_using}${default_color}"
    fi

    if [ ${is_exist_swap} = "No" ]; then
        echo -e "  该服务器无交换分区!"
    else
        echo -e "  交换分区:"
        echo -e "\t总量:\t${swap_total}G"
        echo -e "\t使用:\t${swap_used}G"
        echo -e "\t剩余:\t${swap_avail}G"
        echo -e "\tFree态:${swap_free}G"

        if [ $(echo "${swap_using_tmp} < "33.33" " | bc) = "1" ]; then
            echo -e "\t使用率:${low_color}${swap_using}${default_color}"
        elif [ $(echo "${swap_using_tmp} > "66.66" " | bc ) = "1" ]; then
            echo -e "\t使用率:${high_color}${swap_using}${default_color}"
        else
            echo -e "\t使用率:${medium_color}${swap_using}${default_color}"
        fi
    fi
}

# 磁盘基本信息检查函数
function disk_message() {
    color_schema

    echo -e -n "--------------------------------磁盘信息--------------------------------\n"

    local disk_dev_list=`fdisk -l | grep " /dev" | awk '{print $2}' | sed 's/:/ /g' | sed 's/:/ /g' | awk '{print $1}'`

    for disk_dev in ${disk_dev_list}; do
        local partition_list=`df | grep "${disk_dev}" | awk '{print $1}'`
        local partition_sum=`df | grep "${disk_dev}" | awk '{print $1}' | wc -l`

        local disk_dev_size=`fdisk -l | grep " ${disk_dev}" | sed 's/:/ /g' | sed 's/:/ /g' | sed 's/,/ /g' | sed 's/,/ /g' | awk '{print $3,$4}'`

        echo -e "  磁盘名称:\t${disk_dev}\t\t磁盘大小:${disk_dev_size}"

        if [ ${partition_sum} = "0" ]; then
            echo -e "    未找到磁盘设备${disk_dev}的挂载点!"
        else
            for partition in ${partition_list}; do
                local mount_point=`df | grep "${partition}" | awk '{print $6}'`
                local mount_size_sum=`df | grep "${partition}" | awk '{printf "%0.2f", $2/1024/1024}'`
                local mount_size_used=`df | grep "${partition}" | awk '{printf "%0.2f", $3/1024/1024}'`
                local mount_size_avail=`df | grep "${partition}" | awk '{printf "%0.2f", $4/1024/1024}'`
                local mount_size_using=`awk 'BEGIN{printf "%0.2f%%",'${mount_size_used}'/'${mount_size_sum}'*100}'`

                local mount_size_using_tmp=`awk 'BEGIN{printf "%0.2f",'${mount_size_used}'/'${mount_size_sum}'*100}'`

                echo -e "    挂载点:\t${mount_point}"
                echo -e "\t总量:\t${mount_size_sum}G"
                echo -e "\t使用:\t${mount_size_used}G"
                echo -e "\t剩余:\t${mount_size_avail}G"

                if [ $(echo "${mount_size_using_tmp} < "33.33" " | bc) = "1" ]; then
                    echo -e "\t使用率:${low_color}${mount_size_using}${default_color}"
                elif [ $(echo "${mount_size_using_tmp} > "66.66" " | bc) = "1" ]; then
                    echo -e "\t使用率:${high_color}${mount_size_using}${default_color}"
                else
                    echo -e "\t使用率:${medium_color}${mount_size_using}${default_color}"
                fi
            done
        fi
    done
}

# 网络基本信息检查函数
function network_message() {
    echo -e -n "------------------------------物理网卡信息------------------------------\n"

    local physical_network_card_list=`ls /sys/class/net/ | grep -v "\`ls /sys/devices/virtual/net/\`"`

    for physical_network_card in ${physical_network_card_list}; do
        local ipaddress_and_prefix=`ip addr | grep -A10 "${physical_network_card}" | awk '/inet/' | awk 'NR==1{print}' | awk '{print $2}'`
        local gateway=`ip addr | grep -A10 "${physical_network_card}" | awk '/inet/' | awk 'NR==1{print}' | awk '{print $4}'`

        if [ -z ${ipaddress_and_prefix} ]; then
            local ipaddress_and_prefix="未查询到${physical_network_card}网卡的IP地址!"
        fi
        if [ -z ${gateway} ]; then
            local gateway="未查询到${physical_network_card}网卡的网关地址!"
        fi

        echo -e "  网卡名称:\t${physical_network_card}"
        echo -e "    I P 地址:\t${ipaddress_and_prefix}"
        echo -e "    网关地址:\t${gateway}"
    done
    echo -e -n "\n"
}

clear

# 主函数
function main() {
    server_basics_message
    cpu_message
    mem_message
    disk_message
    network_message
}

# 运行
main

显示效果如下图所示:


image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容