美文网首页Linux学习之路LinuxLinux学习|Gentoo/Arch/FreeBSD
shell场景脚本实战二(系统信息监控脚本)

shell场景脚本实战二(系统信息监控脚本)

作者: 李菜菜同学 | 来源:发表于2020-01-19 14:43 被阅读0次

    一、操作系统信息获取

    1.概述

    脚本system_monitor.sh

    功能1:提取操作系统信息(内核、系统版本、网络地址等)

    功能2:分析系统的运行状态(cpu负载、内存及磁盘使用率等)

    基本框架内容:

    clear //清屏

    if  [[ $# -eq 0 ]]  //提取位置参数的个数

     then   

     #

     reset_teminal=$(tput sgr 0)  //定义一个变量作为高亮输出

     fi

    2.获取操作系统基本信息

    # Check OS Type   //系统类型

    uname -o

     #Check OS Release Version and Name  //系统版本和主机名

    os=$(cat /etc/issue |grep -e "\S"

     #Check Architecture  //cpu架构

    uname -m

     #Check Kernel Release  //内核版本

    uname -r

     #Check hostname  //主机名

    hostname

    或者:

    uname -n

    cat /etc/issue   //查看系统版本

    3.获取网络配置信息

    #Check Internal IP  //内网ip

    hostname -I

     #Check External IP  //公网ip

    curl -s http://ipecho.net/plain  //会将自己的出口ip返回

     #Check DNS  //dns

    cat /etc/resolv.conf |grep -E "\<nameserver[ ]+"|awk '{print $NF}'   //根据其配置文件查询出nameserver[ ]格式的数据和其地址,awk作为列筛选。NF是迷人以空格作为分割

     #Check if connected to Internet or not  //网络是否通畅

    ping -c 2 www.baidu.com &>/dev/null && echo "Internet:Connecter" |echo "Internet:Disconnected"  //ping两次百度,-c是次数。并将输出结果保存到空文件中,如果成功显示“Internet:Connecter”

     #Check Logged In users  //当前登录的用户

    Who>/tmp/who  //输出系统登录的用户,并将其写入到临时文件中

    4.脚本优化

    rm -rf  /tmp/who  //清除临时文件的内容,避免输出上一次文件中保存的内容

    假如高亮显示等。使得输出美观

    脚本内容如下:

     #!/bin/bash

       clear

       if [[ $# -eq 0 ]]

     then

             reset_teminal=$(tput sgr 0)

     fi

     #Check OS Type

     os=$(uname -o)

     echo -e '\E[32m'"Operating System Type :" $reset_teminal $os

     #Check OS Release Version and Name

    os_name=$(cat /etc/issue|grep -e "\S")

     echo -e '\E[32m'"Check OS Release Version and Name :"$reset_teminal $os_name

     #Check Architecture

     architecture=$(uname -m)

     echo -e '\E[32m'"Check Architecture :" $reset_teminal $architecture

     #Check Kernel Release

     kernerrelease=$(uname -r)

      echo -e '\E[32m'"Check Kernel Release  :" $reset_teminal $kernerrelease

     #Check hostname

     hostname=$(uname -n)

      echo -e '\E[32m'"Check hostnam  :" $reset_teminal $hostname

     #Check Internal IP

     internalip=$(hostname -I)

     echo -e '\E[32m'"Check Internal IP :" $reset_teminal $internalip

     #Check External IP

     externalip=$(curl -s http://ipecho.net/plain)

     echo -e '\E[32m'"Check External IP :" $reset_teminal $externalip

     #Check DNS

     nameserver=$(cat /etc/resolv.conf |grep -E "\<nameserver[ ]+"|awk '{print $NF}')

     echo -e '\E[32m'"Check DNS :" $reset_teminal $nameserver

     #Check if connected to Internet or not)

     ping -c 2 www.baidu.com &>/dev/null && echo "Internet:Connected" ||echo "Internet:Disconnected"

     #Check Logged In users

     who>/tmp/who

     echo -e '\E[32m' "Check Logged In users" $reset_teminal && cat /tmp/who

     rm -rf /tmp/who

    执行脚本后的输出结果

    二、分析系统运行状态

    1.分析操作系统内存

    系统使用内存和应用使用内存的区别:

    系统使用内存=Total-Free

    应用使用内存=Total-(Free+Cached+Buffers)

    free -m //显示出当前操作系统的状态

    cache和buffer区别

    操作系统运行状态的分析脚本内容:

    system_mem_usages=$(awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024}' /proc/meminfo )

     echo -e '\E[35m' "System memuserages" $reset_teminal $system_mem_usages

     apps_mem_usages=$(awk'/MemTotal/{total=$2}/MemFree/{free=$2}/^Cached/{cached=$2}/Buffers/{buffers=$2}END{print (total-free-cached-buffers)/1024}' /proc/meminfo)

     echo -e '\E[35m' "Apps memuserages " $reset_teminal $apps_mem_usages

    输出结果图示

    命令详细解释:

    操作系统运行状态值读取位置:

     cat /proc/meminfo

    图示

    取得对应MemTotal第二列的值:

    awk '/MemTotal/{print $2}' /proc/meminfo

    图示

    取MemTotal、MenFree第二列的值,并将它赋予到临时变量里,结束运算后输出:

    awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print total,free}' /proc/meminfo

    图示

    计算系统使用内存,并转化为以兆为单位。

    awk '/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024}' /proc/meminfo

    图示

    ^Cached  //匹配以Cached开头的

    2.分析操作系统负载

    top -n 1 -b //读取一次,-b将信息打印的更加全面

    top -n 1 -b |grep "load average:" |awk '{print $10 $11 $12}'

    图示

    操作系统负载脚本内容:

     loadaverge=$(top -n 1 -b |grep "load average:" |awk '{print $10 $11 $12}')

     echo -e '\E[33m' "load averges " $reset_teminal $loadaverge

    输出结果图示

    3.分析操作系统磁盘容量

    磁盘容量信息

    过滤掉不需要的内容:

    v:反选 E:元字符  P:行列

    df -hP|grep -vE 'Filesystem|tmpfs'|awk '{print $1 " " $5}'

    操作系统磁盘容量内容脚本:

    diskaverage=$(df -hP|grep -vE 'Filesystem|tmpfs'|awk '{print $1 " " $5}')

     echo -e '\E[34m' "disk averges " $reset_teminal $diskaverage

    输出结果图示:

    system_monitor.sh的脚本全部内容:

    system_monitor.sh

    相关文章

      网友评论

        本文标题:shell场景脚本实战二(系统信息监控脚本)

        本文链接:https://www.haomeiwen.com/subject/qmvczctx.html