Just Do IT !

Liunx Shell编程入门----编写系统监控脚本与FTP探测脚本

字数统计: 709阅读时长: 3 min
2020/03/12 Share

1. 编写系统监控脚本sysmon.sh

使该脚本实现: 监控系统中内存、cpu、磁盘的占用率

1.1 命令解释

cat /proc/meminfo

在这里插入图片描述

/proc/meminfo是了解Linux系统内存使用状况的主要接口

我们最常用的freevmstat等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比free等命令要丰富得多

Linux bc 命令

bc 命令是任意精度计算器语言,通常在linux下当计算器用。

它类似基本的计算器, 使用这个计算器可以做基本的数学运算。

提示系统没有bc命令,需要yum install bc 安装

监控内存使用率

1
2
3
4
5
6
7
8
9
10
#memory_used_rate
LoadMemory=$(cat /proc/meminfo | awk '{print $2}')
Total=$(echo $LoadMemory | awk '{print $1}')
Free1=$(echo $LoadMemory | awk '{print $2}')
Free2=$(echo $LoadMemory | awk '{print $3}')
Free3=$(echo $LoadMemory | awk '{print $4}')
Used=`expr $Total - $Free1 - $Free2 - $Free3`
Used_Rate=`expr $Used/$Total*100 | bc -l`
Memory_Used_Rate=`expr $Used_Rate/1 | bc`
echo $Memory_Used_Rate%

监控磁盘占用率

使用 df命令查看磁盘 -h格式化为方便查看的格式

1
2
3
4
5
[root@localhost bin]# df -h /dev/sda*
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 475M 0 475M 0% /dev
/dev/sda1 1014M 160M 855M 16% /boot
devtmpfs 475M 0 475M 0% /dev

1
2
3
4
#disk_used_rate
Location=/dev/sda1 # 这里根据自己的磁盘位置修改
Disk_Used_Rate=$(df -h | grep $Location | awk '{print $5}')
echo $Disk_Used_Rate

监控cpu使用率

1
2
3
4
5
6
7
#cpu_used_rate
Log=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
Free=$(echo $Log | awk '{print $4}')
Total=$(echo $Log | awk '{print $1+$2+$3+$4+$5+$6+$7}')
Cpu_Used=`expr $Total - $Free`
Cpu_Used_Rate=`expr $Cpu_Used/$Total*100 |bc -l`
echo $Cpu_Used_Rate

1.2 脚本代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Colors
red='\033[31m' # 定义红色
green='\033[32m' # 定义绿色

#memory_used_rate
LoadMemory=$(cat /proc/meminfo | awk '{print $2}')
Total=$(echo $LoadMemory | awk '{print $1}')
Free1=$(echo $LoadMemory | awk '{print $2}')
Free2=$(echo $LoadMemory | awk '{print $3}')
Free3=$(echo $LoadMemory | awk '{print $4}')
Used=`expr $Total - $Free1 - $Free2 - $Free3`
Used_Rate=`expr $Used/$Total*100 | bc -l`
Memory_Used_Rate=`expr $Used_Rate/1 | bc`

# disk_used_rate
Location=/dev/sda1
Disk_Used_Rate=$(df -h | grep $Location | awk '{print $5}')

#cpu_used_rate
Log=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
Free=$(echo $Log | awk '{print $4}')
Total=$(echo $Log | awk '{print $1+$2+$3+$4+$5+$6+$7}')
Cpu_Used=`expr $Total - $Free`
Cpu_Used_Rate=`expr $Cpu_Used/$Total*100 |bc -l`
cpu_Used_Rate=`expr $Cpu_Used_Rate/1 | bc`

echo -e "+----------------------------------------------------------------"

echo -e "${green} 内存使用率:${red}"$Memory_Used_Rate%
echo -e "${green} 磁盘使用率:${red}"$Disk_Used_Rate
echo -e "${green} Cpu使用率:${red}"$cpu_Used_Rate%

echo -e "+----------------------------------------------------------------"
echo -e " "

在这里插入图片描述

crontab -e进入定时系统,设置计划任务
输入:*/1 * * * * /root/bin/sysmon.sh
在这里插入图片描述
收到邮件:
在这里插入图片描述
在这里插入图片描述

2. 编写FTP探测脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 输入想要查询的ip段
IP1=`echo $1 |awk -F"." '{print $1}'`
IP2=`echo $1 |awk -F"." '{print $2}'`
IP3=`echo $1 |awk -F"." '{print $3}'`
IP4=`echo $1 |awk -F"." '{print $4}'`

for ((i=3; i>0; i--))
do
echo -e "倒数"$i"秒,开始扫描"
done
# 开始连接
wget ftp://$IP1.$IP2.$IP3.$IP4 &>null

# 如果连接成功
if [ $? -eq 0 ]
then echo "$IP1.$IP2.$IP3.$i is open"
fi

在这里插入图片描述

CATALOG
  1. 1. 1. 编写系统监控脚本sysmon.sh
    1. 1.1. 1.1 命令解释
      1. 1.1.1. cat /proc/meminfo
      2. 1.1.2. Linux bc 命令
      3. 1.1.3. 监控内存使用率
      4. 1.1.4. 监控磁盘占用率
      5. 1.1.5. 监控cpu使用率
    2. 1.2. 1.2 脚本代码
  2. 2. 2. 编写FTP探测脚本