【Linux命令-shell】虚拟机中进行条件测试、监控系统信息

2023-05-16

目录

1、条件测试

1.1test测试操作

 1.2字符串比较

 1.3整数值比较

1.4判断登录用户是否超过两个 

1.5文件状态测试

 1.6控制操作符

 1.7组合多个命令

 1.8多条件判断

1.9基础命令

2、监控系统信息

2.1查看当前的时间

2.2查看网卡信息-ip地址

2.3查看剩余内存大小

2.4查看剩余磁盘大小

​2.5查看15min的平均负载

2.6查看登录系统的用户数量

2.7查看当前的进程数量

2.8查询到系统信息达到特定条件发送邮件


1、条件测试

shell脚本的智能化

为命令的执行提供最直接的识别依据

  • 文件或目录的读/写等状态\rightarrow文件是否可读可写
  • 数值的大小\rightarrow内存大于多少或小于多少怎么处理
  • 字符串是否匹配\rightarrow不同用户操作不同
  • 多条件组合\rightarrow既要判断权限又要判断用户

1.1test测试操作

语法格式:

test 选项 参数

[ 选项 参数 ]  \rightarrow推荐使用这种

help test #查看测试帮助

 1.2字符串比较

 基本语法

是否为空   [ -z 字符串 ]

等于          [ 字符串1 == 字符串2 ]

不等于      [ 字符串1 != 字符串2 ]

注意:空格不能省略,因为是没有输出的,所以我们需要通过echo语句来判断当前语句的输出:echo $?   如果结果为0则为null,不为0则不为空

如果判断等于和不等于,则0为真,1为假

 1.3整数值比较

[ 整数值1 操作符 整数值2 ]

-eq  等于Equal

-ne 不等于Not Equal

-ge 大于等于 Greader or Equal

-le 小于等于 Less or Equal

-gt 大于 Greader Than

-lt 小于 Less Than

1.4判断登录用户是否超过两个 

who 查看用户谁在登录,每一行代表一个用户 

 现在登录的用户有几个

who | wc -l

 判断登录用户数是否大于2

 因为只有一个,所以小于2,返回1表示假

1.5文件状态测试

[ 操作符 文件或目录 ]

 -e 判断对象是否存在(Exist),若存在结果为真

-d 判断对象是否为目录(Directory),若是则为真

-f 判断对象是否为一般文件(file),若是则为真

-r 判断对象是否有可读权限(read),若是则为真

-w 判断对象是否有可写权限(write),若是则为真

-x 判断对象是否有可执行权限(excute),若是则为真

 另外查看文件或者目录下的文件的权限,可以使用命令:

ll 文件或目录

 1.6控制操作符

命令1 ; 命令2     先命令1再命令2,命令1和命令2之间可以没有关系
&&命令1 && 命令2  命令1和命令2之间有关系,命令1成功之后再执行命令2
||命令1 || 命令2    命令1执行成功则不执行命令2,命令1不成功则执行命令2

 先进入/etc再列出文件或目录

 /etcxxx不存在,所以报错,但是第二个仍然执行

 命令1执行成功再执行命令2,命令1不成功则不执行命令2

 命令1不成功再执行命令2

 1.7组合多个命令

 1.8多条件判断

使用&&、||进行多个条件判断

[ 判断1 ] && [ 判断2  ]

[ 判断1 ] || [ 判断2  ]

1.9基础命令

tr -s #删除多余重复的字串
cut #过滤数据

2、监控系统信息

2.1查看当前的时间

首先查看一下自己的虚拟机中不同时间单位的符号是什么

date --help

因此我们就可以通过提示编写以下命令查看当前时间

方法1:直接输入date查看

date

方法2:自己编写命令

time=$(date "+%Y/%m/%d %H:%M:%S")

2.2查看网卡信息-ip地址

 ifconfig ens33 | grep netmask | tr -s " " |cut -d " " -f3

 2.3查看剩余内存大小

cat /proc/meminfo |grep Avai | tr -s " " | cut -d" " -f2 

 2.4查看剩余磁盘大小

 df | grep "/$" | tr -s " " | cut -d" " -f4

2.5查看15min的平均负载

 cat /proc/loadavg #查看所有的负载

第一个是1分钟的平均负载,第二个是五分钟的平均负载,第三个是15分钟的平均负载

所以查看第三个就是

 cat /proc/loadavg | cut -d" " -f3

 2.6查看登录系统的用户数量

who | wc -l

  2.7查看当前的进程数量

ps aux | wc -l

 2.8查询到系统信息达到特定条件发送邮件

编写info.sh文件

#!/bin/bash
#本脚本获取系统的个性性能参数指标,并预设阈值进行比较
#time:时间,localip:eth0网卡IP,free_mem:剩余内存大小,free_disk:乘除磁盘大小
#cpu_load:15min平均负载,login_user:登陆系统的用户,procs:当前进程数量
local_time=$(date  "+%Y/%m/%d %H:%M:%S")
local_ip=$(ifconfig ens33 | grep netmask | tr -s " " | cut -d" " -f3)
free_mem=$(cat /proc/meminfo |grep Avai | tr -s " " | cut -d" " -f2)
free_disk=$(df | grep "/$" | tr -s " " | cut -d" " -f4)
cpu_load=$(cat /proc/loadavg | cut -d" " -f3)
login_user=$(who | wc -l)
procs=$(ps aux | wc -l)
#当剩余内存不足1GB,发送邮件给root进行报警
[ $free_mem -lt 1048576 ] && echo "$local_tree Free memory not enough. Free_mem:$free_mem on $local_ip " | mail -s Warning root yang

#当剩余磁盘不足10GB发送邮件给root进行报警
[ $free_disk -lt 10485760 ] && echo " $local_tree Free memory not enough. root_free_disk:$free_disk on $local_ip " | mail -s Warning root yang

#当cpu的15min平均负载超过4时发送邮件给root进行报警
result=$(echo "$cpu_load > 4 " |  bc )
[ $result -eq 1 ] && echo "$local_time CPU load to high, CPU 15 averageload:$cpu_load on $local_ip " | mail -s Warning root yang

#当系统实时在线人数超过3人时发送邮件给root进行报警
[ $login_user -gt 3 ] && echo "$local_time Too many user. $login _user users login to $local_ip " | mail -s Warning root yang

#当实时进程数量大于300时发送邮件给root进行报警
[ $procs -gt 300 ] && echo "$local_time Too many procs $procs proc are running on $local_ip " | mail -s Waring root yang

 然后给文件添加可执行权限

chmod +x info.h

安装mail

sudo apt-get uninstall mailutils

查看mail的版本

sudo postconf mail_version

 执行info.sh,并查看邮件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux命令-shell】虚拟机中进行条件测试、监控系统信息 的相关文章

随机推荐