功能:1.查看CPU状态 2.内存状态 3.硬盘状态 4.tcp链接状态
#!/bin/bash
#查看服务器状态脚本
cpu() {
#us+sy 用户和系统进程消耗cpu百分比之和
check_cpu=$(vmstat|awk '{if(NR==3) print$13+$14}')
#磁盘io响应使用率
check_io=$(vmstat|awk '{if(NR==3) print$16}')
echo "CPU使用率为$check_cpu%, 磁盘io响应率为$check_io%"
}
memory() {
#总内存,printf 是输出命令 %f格式化为小数,%.1f是后面保留1位小数。如: 1.0,这里/1024是将以G为单位显示
total=$(free -m|awk '{if(NR==2)printf "%.1f",$2/1024 }')
#内存使用量=总量-可用
used=$(free -m|awk '{if(NR==2)printf "%.1f",($2-$NF)/1024 }')
#可用
available=$(free -m|awk '{if(NR==2)printf "%.1f",$NF/1024 }')
echo "内存信息- 总大小为${total}G, 已使用:${used}G,剩余量为${available}G"
}
disk() {
#只看根分区/ 和boot分区。所以要awk去匹配文件系统为/dev/开头的,下面devlist输出/,/boot
#$1代表分区列,如/dev/sda1 $NF-最后一列(代表挂载点一列)如/ /boot
devlist=$(df -h|awk '/^\/dev/{print $1}')
for i in $devlist
do
mouted=$(df -h|awk -v i=$i '$1==i{print $NF}')
size=$(df -h|awk -v i=$i '$1==i{print $2}')
used=$(df -h|awk -v i=$i '$1==i{print $3}')
use_free=$(df -h|awk -v i=$i '$1==i{print $5}')
echo "硬盘信息- 挂载点: $mouted, 总大小: $size,已使用: $used,使用率:$use_free "
done
}
tcp() {
#$6是连接数那一列,将状态名存入awk设定的数组中作为key,数组取名s。++代表每遇到一个key,它的value会累加1,END结束,循环输出键值。
netstat -antp|awk '{s[$6]++}END{for (i in s) print i,"当前连接数为" s[i]}'
}
main() {
echo "----------服务器巡检信息---------------"
cpu
echo "---------------------------------------"
memory
echo "---------------------------------------"
disk
echo "---------------------------------------"
tcp
echo "---------------------------------------"
}
main
脚本中,硬盘部分思路:先df -h查看整体的结构
image.png
awk '/^/dev/{print $1}' awk匹配以dev开头的行,得出/,/boot挂载点的分区列表/dev/开头的(这种分区才是我们自己分的)才是主要查看的。此作为遍历池。
mouted变量是df -h 后用awk -v 赋予变量i 让其等于for循环中的变量i (/dev/sda1等/dev/开头的分区)
后面来判断,当(第一列-分区列)字符==变量i(/dev/sda1等/dev/开头的分区)的时候,符合条件,输出挂载点那一列。这里S1==i是做了一个判断,awk这里可以不加if 直接进行判断
后面的size等,一样的道理。只要是想要的哪一行匹配上了,输出那一行,指定的列。
硬盘部分脚本运行结果
image.png
脚本运行结果:
image.png
网友评论