Linux学习之路LinuxLinux学习|Gentoo/Arch/FreeBSD

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

2020-01-19  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读