Shell脚本综合实战案例
Shell脚本综合实战案例前言实验环境VMware Workstation 15centos7虚拟机若干台1.案例一:1.需求描述1.1编写名为system.sh的小脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若是文件已存在,应先转移进行备份;每行一条记录,第一列为IP地址,第二列为对应的MAC地址1.2检查有哪些主机开启了FTP服务,扫描对象为/et...
Shell脚本综合实战案例
前言
实验环境
VMware Workstation 15
centos7虚拟机若干台
1.案例一:
1.需求描述
1.1编写名为system.sh的小脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若是文件已存在,应先转移进行备份;每行一条记录,第一列为IP地址,第二列为对应的MAC地址
1.2检查有哪些主机开启了FTP服务,扫描对象为/etc/ethers文件中所有的IP地址,扫描的端口为21
2.命令测试
2.1分析:
记录局域网中个主机的MAC地址,保存到/etc/ethers文件中;若此文件已经存在,应先转移进行备份;检查有哪些主机开启了FTP服务,扫描对象为/etc/ethers文件中的所有的IP地址,扫描的端口为21
2.2arping -c 2 -w 1 ip: 发送MAC地址解析请求
2.3arp -n:记录MAC
2.4awk:打印ip与MAC地址
2.5使用nmap端口扫描方法测试FTP服务
3.脚本编程与调试
3.1通过arping命令发送ARP请求,使用if语句根据反馈结果记录MAC地址
3.2通过awk命令过滤出/etc/ethers文件中的所有IP地址,重复探测ftp的开启情况
4.需求实现
4.1查看局域网中主机对应的的MAC地址
arping -c 2 -w 1 -I ens33 192.168.73.132
-c 发送包的数量
-w 最长等待时间
-I 指定arping测试的网卡设备
命令测试的结果:
[root@localhost opt]# arping -c 2 -w 1 -I ens33 192.168.73.132
ARPING 192.168.73.132 from 192.168.73.133 ens33
Unicast reply from 192.168.73.132 [00:0C:29:93:7A:63] 1.547ms
Unicast reply from 192.168.73.132 [00:0C:29:93:7A:63] 0.906ms
Sent 2 probes (1 broadcast(s))
Received 2 response(s)
//我们需要的信息:192.168.73.132 [00:0C:29:93:7A:63]
//上面是成功的,下面我们展示不成功的
[root@localhost opt]# arping -c 2 -w 1 -I ens33 192.168.73.130
ARPING 192.168.73.130 from 192.168.73.133 ens33
Sent 2 probes (2 broadcast(s))
Received 0 response(s)
//没有重要的信息
4.2我们用grep语句过滤Unicast开头的这一行
[root@localhost opt]# arping -c 2 -w 1 -I ens33 192.168.73.132 |grep "^Unicast"
Unicast reply from 192.168.73.132 [00:0C:29:93:7A:63] 1.776ms
Unicast reply from 192.168.73.132 [00:0C:29:93:7A:63] 0.812ms
//有我们需要的信息
4.3我们用sed工具来将[]删除掉
[root@localhost opt]# arping -c 2 -w 1 -I ens33 192.168.73.132 |grep "^Unicast"| sed -n "s/\[//p" //先删除[的这个括号
Unicast reply from 192.168.73.132 00:0C:29:93:7A:63] 1.362ms
Unicast reply from 192.168.73.132 00:0C:29:93:7A:63] 1.170ms
[root@localhost opt]# arping -c 2 -w 1 -I ens33 192.168.73.132 |grep "^Unicast"| sed -n "s/\[//p" |sed -n "s/\]//p" //再删除]这个括号
Unicast reply from 192.168.73.132 00:0C:29:93:7A:63 0.841ms
Unicast reply from 192.168.73.132 00:0C:29:93:7A:63 0.967ms
4.4我们用awk工具来筛选出ip地址和MAC地址
[root@localhost opt]# arping -c 2 -w 1 -I ens33 192.168.73.132 |grep "^Unicast"| sed -n "s/\[//p" |sed -n "s/\]//p" | awk '{print $4,$5}'
192.168.73.132 00:0C:29:93:7A:63
192.168.73.132 00:0C:29:93:7A:63
4.5我们来判断/etc/ethers这个文件是否存在
[root@localhost opt]# vim system.sh
#!/bin/bash
if [ ! -f /etc/ethers ]
then
touch /etc/ethers
else
mv /etc/ethers /etc/ethers.bak
touch /etc/ethers
fi
4.6将arping命令放入循环中,来实现对该局域网中所有主机的ip地址与mac地址的对应关系,并将之写入/etc/ethers文件夹中。
[root@localhost opt]# vim system.sh
#!/bin/bash
if [ ! -f /etc/ethers ]
then
touch /etc/ethers
else
mv /etc/ethers /etc/ethers.bak
touch /etc/ethers
fi
for ((j=1;j<=254;j++))
do
arping -c 2 -w 1 -I ens33 192.168.73.$j |grep "^Unicast"|sed -n "s/\[//p" |sed -n "s/\]//p" | awk '{print $4,$5}' | uniq >> /etc/ethers
done
4.7我们可以用另一种方法来实现,用nmap工具来扫描已开启的主机是否开启了ftp,我们知道ftp的端口号为21。
[root@localhost opt]# vim system.sh
#!/bin/bash
if [ ! -f /etc/ethers ]
then
touch /etc/ethers
else
mv /etc/ethers /etc/ethers.bak
touch /etc/ethers
fi
for ((j=1;j<=254;j++))
do
arping -c 2 -w 1 -I ens33 192.168.73.$j |grep "^Unicast"|sed -n "s/\[//p" |sed -n "s/\]//p" | awk '{print $4,$5}' | uniq >> /etc/ethers
done
ipconnections=`awk '{print $1}' /etc/ethers`
for i in $ipconnections
do
echo "$i" >> /opt/duankou.txt | nmap -sT $i | grep "21" >> /opt/duankou.txt
done
4.8我们给予这个system.sh这个文件可执行的权限。
[root@localhost opt]# chmod +x system.sh
4.9我们执行这个脚本来看看结果
[root@localhost opt]# ./system.sh
由于需要arping测试的主机太多,我们需要等待一段时间
4.10我们来查看一下/etc/ethers
[root@localhost opt]# cat /etc/ethers
192.168.73.1 00:50:56:C0:00:08
192.168.73.2 00:50:56:F5:0C:AE
192.168.73.132 00:0C:29:93:7A:63
192.168.73.254 00:50:56:F6:D3:17
4.11再来看看/opt/duankou.txt
[root@localhost opt]# cat /opt/duankou.txt
192.168.73.1
192.168.73.2
192.168.73.132
192.168.73.254
这个结果表示局域网中的主机没有开启ftp服务,所以我们没法进行ftp文件传输。
2.案例二
1.企业环境说明
某公司随着业务的不断发展,所使用的的Linux服务器也越来越多。管理员希望编写一个简单的性能的监控脚本,放到服务器的红,当监控指标出现异常时放出警告邮件
2.需求描述
2.1编写名为sysmon.sh的Shell监控脚本
2.2监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
2.3百分比只需要精确到个位,如7%、12%、23%等
2.4出现以下任一情况时警告:磁盘占用率超过90%、CPU使用率超过80%、内存使用率超过90%,警告邮件通过mail命令发送到指定邮箱
2.5结合crond服务,每半小时执行一次监控脚本
3.思路与命令测试
3.1分析
监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
3.2df命令
3.3awk命令
3.4mpstat 命令(需要安装sysstat)
3.5free命令
3.6crontab命令
4.脚本编程与调试
4.1使用df命令提取根分区的磁盘占用率,赋值给变量DUG
4.2使用mpstat命令提取CPU使用率,赋值给变量DUG
4.3使用free命令提取出内存使用率,赋值给变量MUG
4.4使用if语句判断上述监控项目是否超标,将需要警告的信息保存到/tmp/alert.txt文件;若存在则作为警告邮件发送
4.5调试优化并设置crontab计划
5.程序代码
[root@python opt1]# cat sysmon.sh
#!/bin/bash
DUG=`df | grep "/$" |awk '{print $5}'|sed -n 's/%//p'`
a=`free | grep "Mem" |awk '{print $3,$2}' | awk {'print $1}'`
b=`free | grep "Mem" |awk '{print $3,$2}' | awk {'print $2}'`
MUG=`expr $a \* 100 / $b `
c=`mpstat |tail -1|awk '{print $12}'|awk -F. '{print $1}'`
CUG=`expr 100 - $c`
if [ $DUG -gt 90 ]
then
echo "磁盘的使用率超过90了。请尽快添加磁盘" >> /tmp/alert.txt
fi
if [ $MUG -gt 90 ]
then
echo "内存使用的使用情况超过了90了,请尽快添加内存" >> /tmp/alert.txt
fi
if [ $CUG -gt 80 ]
then
echo "CPU的使用率超过了80,请尽快添加CPU" >> /tmp/alert.txt
fi
if [ -f /tmp/alert.txt ]
then
cat /tmp/alert.txt | mail -s "警告" root@python
rm -rf /tmp/alert.txt
fi
更多推荐
所有评论(0)