检测系统信息sys_check_info

#!/bin/bash -
#===============================================================================
#
#          FILE: check_sys_info.sh
#
#   DESCRIPTION:表格形式输出系统的基本信息,纯属蛋疼作,新手,有什么不足的地方请见谅
# 欢迎改进,有更好的方法,不吝赐教。
#          BUGS: ---
#        AUTHOR: 猪头饼 , liaodehai@126.com
#       CREATED: 10/28/2012 11:10:19 AM CST
#         VESION: 1.0
#      REVISION: ---
#===============================================================================

set -o nounset                              # Treat unset variables as an error
#首先trap 1 2 3 15信号,重要
#trap 'kill -9 $BG_PID;echo;exit 2' 1 2 3 15
function trap_exit
{
    tput cnorm
    clear
    kill -9 $BG_PID
}
trap 'trap_exit;exit 2' 1 2 3 15 #捕捉1 2 3 15 信号,执行命令

#---------------------------------------------
#检测判断基础值
#---------------------------------------------
SYS_NO=5.6        #定义版本号
BIT=32         #定义位数
DISK_SPEED_INIT=150 #基本速度



#---------------------------------------------
#TPUT命令定义
#---------------------------------------------
tput init                             #开启tput
BOLD=`tput bold`                         #粗体
B_LINK=`tput blink`                     #闪烁
REV=`tput rev`                       #逆转视图
NORMAL=`tput sgr0`                     #正常屏幕
CURSOR_OFF=`tput civis`             #隐藏光标
CURSOR_ON=`tput cnorm`              #开始光标
TPUT_RED=`echo -e "\e[40;31m"`         #红色字体
P_COL=`tput cols`                 #获取屏幕行数
P_ROW=`tput lines`                 #获取屏幕列数
HOLD_C=`expr ${P_COL} / 2 `         #一半列数
HOLD_R=`expr ${P_ROW} / 2 + 15 `     #定位行数
#错误输出
OUT_PUT_ERROR="${BOLD}${TPUT_RED}${B_LINK}* ${NORMAL}${BOLD}${TPUT_RED}"
##定义结束


#---------------------------------------------
#函数开始
#---------------------------------------------
##进度条打印函数
bars ()
{
    stty -echo >/dev/null 2>&1
    i=0
    b=''
    while true
    do
        ((i+=2))
        echo -ne "\e[${HOLD_R};30H正在创建报表---"
        #    if [ $i -gt 100 ];then
        #        continue
        #    else
        printf "进度:[%-50s]%d%%\r" $b $i
        #fi
        sleep 1.1
        b=#$b
    done
    stty echo
    echo
}    # ----------  end of function BARS  ----------

##高亮函数
colour ()
{
    #背景色_前景色
    case $1 in
        black_red)
        echo -e "\e[40;31m"
        ;;

        black_green)
        echo -e "\e[40;32m"
        ;;

        black_yellow)
        echo -e "\e[40;33m"
        ;;

    esac    # --- end of case ---

}    # ----------  end of function colour  ----------
##函数结束


#---------------------------------------------
# 主程序开始
#---------------------------------------------
${CURSOR_OFF}
clear
#首先使bars函数后台运行
bars &
BG_PID=$!


#-------- 主机信息 --------

##信息获取
##系统当前时区
TIME_ZONE=$(date -R | awk '{print $NF}')

##系统当前日期与时间
DATE=$(date +%F)
TIME=$(date +%T)

##服务器制造商
PRODUCT_NAME=$(dmidecode | grep "Product Name" |awk 'NR==1{print $NF}')

##主机名
MACHINE_NAME=$(uname -n)

##系统发行版本
SYS_RELEASE=$(cat /etc/issue|head -1)
SYS_DENFI_VER=$(echo ${SYS_RELEASE} | grep "${SYS_NO}")        #过滤此版本
if [[ -z "${SYS_DENFI_VER}" ]];then
    SYS_RELEASE="${OUT_PUT_ERROR}${SYS_RELEASE}${NORMAL}"
fi        #如果版本不为定义版本则标红输出

##系统架构(位数)
SYS_FRAMEWORK=$(file /sbin/init | awk '{print $3}')
if [[ ${SYS_FRAMEWORK%%-*} -ne ${BIT} ]];then
    SYS_FRAMEWORK="${OUT_PUT_ERROR}${SYS_FRAMEWORK}${NORMAL}"
fi

##系统内核版本
SYS_CORES_VER=$(uname -r)

##CPU类型
CPU_TYPE=$(cat /proc/cpuinfo|grep "name" | cut -d: -f2 |uniq -c| column -t)

##CPU主频
CPU_CLOCK_SPEED=$(cat /proc/cpuinfo|grep "MHz"|uniq|awk -F: '{print $2"MHZ"}'|column -t)

##CPU物理个数
PHYSICS_CPU=$(cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l)

##单棵CPU核心数
#ONE_CPU_CORE=$(cat /proc/cpuinfo|grep "cores"|uniq|awk -F: '{print $2}'|column -t)

##单棵核心中CPU线程数
CPU_NT_THREAD=$(cat /proc/cpuinfo | grep physical |sort | uniq -c | awk 'NR==1{print $1}'|column -t)

##CPU总核心数(物理个数*单棵CPU的线程数)
VIRTUAL_CPU=$(cat /proc/cpuinfo|grep "name" | cut -d: -f2 |uniq -c | awk '{print $1}')


##内存大小
MEM_SIZE=$(free -m|grep -i "mem"|awk '{print $2"MB"}')

##swap大小
SW_SIZE=$(free -m | grep -i "swap" | awk '{print $2"MB"}')

##硬盘状态
DISK_STATUS=$(smartctl  -H `df -h | grep boot | grep -v grep | awk '{print $1}' `  | grep Status | awk -F'[ :]' '{print $NF}')
if [[ "${DISK_STATUS}" != "OK" ]];then
    DISK_STATUS="Error Or Empty"
    DISK_STATUS="${OUT_PUT_ERROR}${DISK_STATUS}${NORMAL}"
fi

##硬盘大小
DISK_SIZE=$(fdisk -l |grep :|awk '/\/dev\/sd[a-z]/{print $2,$3"G"}')

##硬盘分区
DISK_PARTITION=$(df -lh | grep -v tmpfs |awk '{print $1,"\t",$2,"\t",$6}'| column -t)

##硬盘读写速度
TEST_COUNT=1 #开始数值
TEST_TIMES=3 #检测次数
while [[ "$TEST_COUNT" -le "$TEST_TIMES" ]]; do
    ###dd写测速
    DD_W_TEST[$TEST_COUNT]=$(dd if=/dev/zero bs=1024 count=1000000 of=/tmp/1Gb.file  2>&1 |awk -F'[, ]+' '/sec/{print $8}')
    if [[ "${DD_W_TEST[$TEST_COUNT]}" -lt "${DISK_SPEED_INIT}" ]];then
        DD_W_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${DD_W_TEST[$TEST_COUNT]}${NORMAL}"
    fi
    ###dd读测速 (默认130Mb/s)
    DD_R_TEST[$TEST_COUNT]=$(dd if=/tmp/1Gb.file bs=64k 2>&1 |dd of=/dev/null 2>&1 |awk -F'[, ]+' '/sec/{print $8}')
    if [[ "${DD_R_TEST[$TEST_COUNT]}" -lt "130" ]] ;then
        DD_R_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${DD_R_TEST[$TEST_COUNT]}${NORMAL}"
    fi
    ###hdparm读测速
    HD_TEST[$TEST_COUNT]=$(hdparm -t `df -h | grep boot | grep -v grep | awk '{print $1}'` | awk -F'[ =]+' '{print $11}'| column -t)
    if [[ "${HD_TEST[$TEST_COUNT]%%.*}" -lt "${DISK_SPEED_INIT}" ]] ;then
        HD_TEST[$TEST_COUNT]="${OUT_PUT_ERROR}${HD_TEST[$TEST_COUNT]}${NORMAL}"
    fi
    ((TEST_COUNT++))
done

#iptable状态
if (service iptables status |grep INPUT 2>&1 1>/dev/null) ; then
    FIREWALL_STATUS="iptables 已经开启"
else
    FIREWALL_STATUS="iptables 没有开启"
fi

##SeLINUX状态
SE_STATUS=$(cat /etc/selinux/config | grep "SELINUX=" | grep -v "^#" | cut -d= -f2)

##系统包安装情况
ADMIN_PACKAGE=$(rpm -qa |grep system |wc -l | awk '{print"系统工具包:"$0 }')
BASE_PACKAGE=$(rpm -qa |grep base |wc -l |awk '{print"基础包:"$0 }')


#-------- 网络信息 --------

##网卡个数
N_CARD_NUMBER=$(ifconfig | egrep "^eth[0-1]|^em[0-1]" | egrep -v "^eth[0-1]:[0-1]|^em[0-1]:[0-1]"  |awk '{print $1}'|wc -l)

##所有网卡资讯
N_CARD=($(ifconfig | egrep "^eth[0-1]|^em[0-1]" | egrep -v "^eth[0-1]:[0-1]|^em[0-1]:[0-1]"  |awk '{print $1}'))

N_COUNT=0 #开始数值
while [[ $N_COUNT -lt $N_CARD_NUMBER ]]; do
    ##网卡IP地址
    N_CARD_IPADDR[$N_COUNT]=$(ifconfig ${N_CARD[$N_COUNT]} | awk -F'[ :]+' 'NR==2{print $4}')
    ##网卡速率
    N_CARD_SPEED[$N_COUNT]=$(ethtool ${N_CARD[$N_COUNT]} | awk '/[Ss]peed/{print $2}' |  grep -v "Unknown")
    N_CARD_SPEED[$N_COUNT]=${N_CARD_SPEED[$N_COUNT]:-0Mb/s}
    if [ "${N_CARD_SPEED[$N_COUNT]%%M*}" -ne 1000 ];then
        N_CARD_SPEED[$N_COUNT]="${OUT_PUT_ERROR}${N_CARD_SPEED[$N_COUNT]}${NORMAL}"
    fi
    ((N_COUNT++))
done

##网卡驱动类型
N_CARD_DRIVE=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==1{print $NF}'| column -t )

##网卡驱动版本
N_CARD_VER=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==2{print $NF}'|column -t)

##网卡驱动固件版本
N_CARD_FIR_VER=$(ethtool -i ${N_CARD[0]} |awk -F: 'NR==3{print $NF}'|column -t)

##结束打印进程
kill -9 $BG_PID
${CURSOR_ON}


#-------- 显示菜单 --------
#菜单坐标函数定义
xy()
{
    _R=$1 #行
    _C=$2 #列
    _TEXT=$3
    tput cup $_R $_C
    echo -n $_TEXT
}   #XY光标显示位置

center()
{   
    _STR=$2 #字符串
    _ROW=$3
    LEN=`echo $_STR | wc -l`
    COLS=`tput cols` #列数目
    HOLD_COL=`expr $COLS - $LEN`
    case $1 in
        all)
        NEW_COL=`expr $HOLD_COL / 2 `   #中心位置显示文本=列数-字符串长度/2
        ;;

        half)
        NEW_COL=`expr $HOLD_COL / 4 `    #开始一半的2/1位置显示
        ;;

        eighth)
        NEW_COL=`expr $HOLD_COL / 8 `    #一半的一半
        ;;

    esac  
    tput cup $_ROW $NEW_COL
    echo -n $_STR
}
#函数结束



#开始制表
tput clear
colour black_green
center "half" "${BOLD}<<系统基本信息表>>${NORMAL}" 1
xy 2 1 "日期:$DATE"
xy 2 20 "时间:${TIME}"
#第一条横线
xy 3 1 "-"
#横向打印
for ((i=2;i<${HOLD_C};i++));do
    printf "%s" -
done

#向下打印
xy 4 0 "|"
for ((i=4;i<=${HOLD_R};i++));do
    printf "|"
    printf "\n"
done

#中沿线
for ((i=4;i<${HOLD_R};i++));do
    center "all" "|" $i
    #eighth_center "|" $i
    center "eighth" "|" $i
done

colour black_yellow
xy 5 2 "${BOLD}信息名称"
center "half" "${BOLD}参考值${NORMAL}" 5

#第二条横线
xy 7 1 "-"
#横向打印
for ((i=2;i<${HOLD_C};i++));do
    printf "%s" -
done


#输出关键字
OUTPUT_NAME="服务器制造商
主机名
系统发行版本
系统架构
系统内核版本
CPU类型
CPU主频
CPU物理个数
单棵核心中线程数
CPU总核心数
内存大小
swap大小
硬盘状态
硬盘大小
iptable状态
SeLINUX状态
系统包安装情况
DD写速度(参考:${DISK_SPEED_INIT})
DD读速度(参考:130)
hdparm读(参考:${DISK_SPEED_INIT})
网卡个数
所有网卡名称
网卡ip地址
网卡速率
网卡驱动类型
网卡驱动版本
网卡驱动固件版本
硬盘分区"

#值变量
OUTPUT_VAR="${PRODUCT_NAME}
${MACHINE_NAME}
${SYS_RELEASE}
${SYS_FRAMEWORK}
${SYS_CORES_VER}
${CPU_TYPE}
${CPU_CLOCK_SPEED}
${PHYSICS_CPU}
${CPU_NT_THREAD}
${VIRTUAL_CPU}
${MEM_SIZE}
${SW_SIZE}
${DISK_STATUS}
${DISK_SIZE}
${FIREWALL_STATUS}
${SE_STATUS}
${ADMIN_PACKAGE}|${BASE_PACKAGE}
第一次:${DD_W_TEST[1]} |第二次:${DD_W_TEST[2]} |第三次:${DD_W_TEST[3]} (单位:MB/s)
第一次:${DD_R_TEST[1]} |第二次:${DD_R_TEST[2]} |第三次:${DD_R_TEST[3]} (单位:MB/s)
第一次:${HD_TEST[1]} |第二次:${HD_TEST[2]} |第三次:${HD_TEST[3]} (单位:MB/s)
${N_CARD_NUMBER}
${N_CARD[*]}
${N_CARD_IPADDR[*]}
${N_CARD_SPEED[*]}
${N_CARD_DRIVE}
${N_CARD_VER}
${N_CARD_FIR_VER}
${DISK_PARTITION}"

#关键字输出
_x=8
for S_NAME in ${OUTPUT_NAME};do
    _y=1
    xy $_x $_y "${S_NAME}:"
    ((_x++))
done

#更改IFS输出值
OLD_IFS=$IFS
IFS=$'\x0A'

#值输出
_xx=8
for S_VAR in ${OUTPUT_VAR};do
    _yy=22
    xy $_xx $_yy "${S_VAR}"
    ((_xx++))
done
IFS=$OLD_IFS

#尾部横线
xy ${HOLD_R} 1 "-"
#横向打印
for ((i=2;i<${HOLD_C};i++));do
    printf "%s" -
done
printf "\n\n"


##--------程序结束-------

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS