Shell 编程实战
Posted 纵拥千晚星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell 编程实战相关的知识,希望对你有一定的参考价值。
Shell 编程实战
技能展示:
- 会使用脚本扫描 MAC 记录与端口
- 会使用脚本进行系统监控
脚本编程步骤
脚本编程一般分为以下几个步骤:
需求分析:根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命
令与语句等;
命令测试:将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等;
脚本编程:将测试好的命令写入到脚本 文件中,并通过各种语句将命令执行的结果保
存、判断或者发出报警等;
测试调优:对脚本进行测试,并根据结果进行优化,建议一边编程一边调试以减少错误
的发生。
6.2 MAC 记录与端口扫描脚本
1.需求描述
编写名为 system.sh 的小脚本,记录局域网中各主机的 MAC 地址,保存到/etc/ethers
文件中;若此文件已存在,应先转移进行备份;每行一条记录,第 1 列为 IP 地址,第
2 列为对应的 MAC 地址。
检查有哪些主机开启了匿名 FTP 服务,扫描对象为/etc/ethers 文件中的所有 IP 地址,
扫描的端口为 21。
2.实现步骤
[root@localhost ~]# vi system.sh
#!/bin/bash
1. 定义网段地址、MAC 列表文件
NADD="192.168.10."
FILE="/etc/ethers"
2. 发送 ARP 请求,并记录反馈结果
[ -f $FILE ] && /bin/cp -f $FILE $FILE.old #备份原有文件
HADD=1 #定义起始扫描地址
while [ $HADD -lt 254 ]
do
ping -c 2 -w 1 $NADD$HADD &> /dev/null
if [ $? -eq 0 ]
then
arp -n | grep $NADD$HADD | awk print $1,$3 >> $FILE
fi
let HADD++
done
TARGET=$(awk print $1 /etc/ethers)
echo "以下主机已开放匿名 FTP 服务:"
for IP in $TARGET
do
wget ftp://$IP/ &> /dev/null
if [ $? -eq 0 ] ; then
echo $IP
rm -rf index.html #事先在 ftp 服务器上准备下载文件,测试后删除
fi
done
[root@localhost ~]# chmod +x system.sh
[root@localhost ~]# ./sysem.sh #执行检测程序
[root@localhost ~]# cat /etc/ethers #确认记录结果
开发系统监控脚本
1.需求描述
编写名为 sysmon.sh 的 Shell 监控脚本。
监控内容包括 CPU 使用率、内存使用率、根分区的磁盘占用率。
百分比只需精确到个位,如 7%、12%、23%等。
出现以下任一情况时告警:磁盘占用率超过 90%、CPU 使用率超过 80%、内存使用率超
过 90%,告警邮件通过 mail 命令发送到指定邮箱。
结合 crond 服务,每半小时执行一次监控脚本。
2.实现步骤
(1)编写 Shell 监控脚本
[root@localhost ~]# vi /root/sysmon.sh
#!/bin/bash
提取性能监控指标(磁盘占用、CPU 使用、内存使用)
DUG=$(df -h | grep "/$" | awk print $5 | awk -F% print $1)
CUG=$(expr 100 - $(mpstat | tail -1 | awk print $12 | awk -F. print $1))
MUG=$(expr $(free | grep "Mem:" | awk print $3) \\* 100 / $(free | grep "Mem:"
| awk print $2))
设置告警日志文件、告警邮箱
ALOG="/tmp/alert.txt"
AMAIL="root@localhost"
判断是否记录告警
if [ $DUG -gt 90 ]
then
echo "磁盘占用率:$DUG %" >> $ALOG
fi
if [ $CUG -gt 80 ]
then
echo "CPU 使用率:$CUG %" >> $ALOG
fi
if [ $MUG -gt 90 ]
then
echo "内存使用率:$MUG %" >> $ALOG
fi
判断是否发送告警邮件,最后删除告警日志文件
if [ -f $ALOG ]
then
cat $ALOG | mail -s "Host Alert" $AMAIL
rm -rf $ALOG
fi
[root@localhost ~]# chmod +x /root/sysmon.sh
(2)测试 sysmon.sh 脚本的执行情况
首先确认有可用的邮件服务器(如 Postfix、Sendmail 等),然后调低监控阈值,执行
sysmon.sh 脚本进行测试。
[root@localhost ~]# /root/sysmon.sh
然后查收 root@localhost 的邮箱,确认告警邮件内容。
[root@localhost ~]$ mail
(3)设置 crontab 计划任务
首先确认系统服务 crond 已经运行。
[root@localhost ~]# /etc/init.d/crond status
crond (pid 5839) 正在运行...
然后,添加 crontab 计划任务配置,每半小时调用一次 sysmon.sh 脚本程序。
[root@localhost ~]# crontab -e
*/30 * * * * /root/sysmon.sh
以上是关于Shell 编程实战的主要内容,如果未能解决你的问题,请参考以下文章