分享

Shell脚本项目服务实战

BGnv5 2020-11-19 18:54:10 发表于 实践型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 1924
问题导读:
1、如何检查哪些主机开启了匿名FTP服务?
2、如何进行ftp在线测试?
3、如何对CPU使用率,内容使用率,根分区的磁盘占有率进行监控?


脚本编程步骤分享

脚本编程步骤

1.需求分析
2.命令测试
3.脚本编程
4.测试调优

步骤解析

1.需求分析
根据系统管理的需求,分析脚本要实现的功能,功能实现的层次,实现的命令与语句等
2.命令测试
将要用到的命令逐个进行测试,以决定使用的选项,要设置的变量等
3.脚本编程
将测试好的命令写入到脚本文件中,并通过各种语句将命令执行的结果保存,判断或者发出报警等
4.调试优化
对脚本进行测试,并根据结果进行优化
建议一边编程一边调试,以减少错误的发生

项目实战

MAC记录与端口扫描脚本

企业环境说明

随着业务的不断发展,某公司所使用的Linux服务器也越来越多。在系统管理和维护过程中,经常需要编写一些实用的小脚本,以辅助运维工作,通过工作效率

需求描述

1.编写名为system.sh的脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若此文件已存在,应先转移进行备份;每行一条记录,第一列位IP地址,第2列为对应的MAC地址
2.检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ethers文件中的所有IP地址,扫描的端口为21

命令类型

1.分析:记录局域网中各主机的MAC地址;检查有哪些主机开启了匿名FTP服务
2.ping -c 3 -i 0.2 -w 1 ip :发送MAC地址解析请求
3.arp -n:记录MAC
4.awk :打印ip与MAC地址
5.使用wget下载的方法测试FTP服务

项目流程

  1. [root@server1 ~]# ping -c 3 -i 0.2 -W 3 20.0.0.11 > a.txt
  2. [root@server1 ~]# cat a.txt
  3. [root@server1 ~]# arping -c 3 -I ens33 -w 3 20.0.0.11 > a.txt
  4. [root@server1 ~]# cat a.txt
  5. [root@server1 ~]# arping -c 1 -I ens33 -w 3 20.0.0.11 > a.txt
  6. [root@server1 ~]# cat a.txt
复制代码


-c:连接次数
-i:时间间隔
-I:使用网卡
-w:超时时间

  1. [root@server1 ~]# awk '{print $4,$5}' a.txt > b.txt
  2. [root@server1 ~]# cat b.txt
复制代码


两个主机安装ftp,查看21端口状态

  1. [root@server1 ~]# yum -y install vsftpd
  2. [root@server1 ~]# systemctl start vsftpd
  3. [root@server1 ~]# netstat -anpt | grep 21
复制代码

  1. [root@server2 ~]# yum -y install vsftpd   
  2. [root@server2 ~]# systemctl start vsftpd
  3. [root@server2 ~]# netstat -napt | grep 21
  4. [root@server2 ~]# nmap -p 21 20.0.0.10    查看对应主机21端口是否开启
复制代码

  1. [root@server2 ~]# nmap -p 21 20.0.0.10 &> /dev/null
  2. [root@server2 ~]# wget ftp://20.0.0.10      匿名下载,下载文件名为index.html
复制代码


选择一台新的进行shell脚本测试

1.进行记录在线用户并测试其是否开放21号端口

  1. [root@client1 ~]# vi system.sh
  2. [root@client1 ~]# chmod +x system.sh
  3. [root@client1 ~]# ./system.sh
  4. [root@client1 ~]# sort -u /etc/ethers   
复制代码


sort -u:等同于uniq,表示相同的数据仅显示一行

  1. #!/bin/bash
  2. # 记录在线用户并测试其是否开放21号端口
  3. net="20.0.0."                                 定义变量地址段
  4. file=/etc/ethers                              义变量记录文件位置
  5. [ -f /etc/ethers ] && cp -f $file $file.bak   文件存在判断,存在备份
  6. add=1                                         循环测试的起始变量
  7. while [ $add -le 20 ]                         循环条件
  8. do                               20.0.0.   1
  9.    ping -c 3 -i 0.2 -w 1 ${net}${add} &> /dev/null   
  10.    if [ $? -eq 0 ]                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   追加
  11.    then arp -n | grep ${net}${add} | awk '{print $1,$3}' >> $file   
  12.    fi 以数字形式显示
  13.    let add++
  14. done
复制代码


2.进行ftp在线测试

  1. [root@client1 ~]# vi system.sh
  2. [root@client1 ~]# chmod +x system.sh
  3. [root@client1 ~]# ./system.sh
复制代码

  1. #!/bin/bash
  2. # 记录在线用户并测试其是否开放21号端口
  3. net="20.0.0."
  4. file=/etc/ethers
  5. [ -f /etc/ethers ] && cp -f $file $file.bak
  6. add=1
  7. while [ $add -le 20 ]
  8. do
  9.    ping -c 3 -i 0.2 -w 1 ${net}${add} &> /dev/null
  10.    if [ $? -eq 0 ]
  11.    then arp -n | grep ${net}${add} | awk '{print $1,$3}' >> $file
  12.    fi
  13.    let add++
  14. done
  15. sort -u $file >> /root/file1.txt
  16. target=$(awk '{print $1}' /root/file1.txt)
  17. for ip in $target
  18. do
  19.    wget ftp://$ip &> /dev/null                  匿名下载
  20.    if [ $? -eq 0 ]                                      如果下载成功
  21.    then echo "$ip 主机ftp开启"              
  22.    rm -rf index.html                       删除下载的文件。因为每次测试下载的都是它  
  23.    fi
  24. done
复制代码


开发系统监控脚本

企业环境说明

某公司随着业务的不断发展,所使用的Linux服务器也越来越多。管理员希望编写一个简单的性能监控脚本,放到各服务器中,当监控指标出现异常时发送告警邮件

需求描述

1.编写名为sysmon.sh的Shell监控脚本
2.监控内容包括CPU使用率,内存使用率,根分区的磁盘占有率
3.百分比只需精确到个位,如7%,12%,23%等
4.出现以下任意情况时告警:磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱

思路与命令类型

1.分析:监控内容包括CPU使用率,内容使用率,根分区的磁盘占有率
2.df命令
3.awk命令
4.mpstat命令(需安装sysstat软件包)
5.free命令

1.磁盘占有率

  1. [root@client1 ~]# df -Th | grep '/
  2. 2.CPU使用率
  3. <div class="blockcode"><blockquote>[root@client1 ~]# mpstat
  4. [root@client1 ~]# mpstat | tail -1 | awk '{print $12}'
  5. [root@client1 ~]# mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}
  6. [root@client1 ~]# expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}')
  7. [root@client1 ~]# CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
复制代码


3.内存使用率

  1. [root@client1 ~]# free -m
  2. [root@client1 ~]# free -m | grep "Mem:" | awk '{print $7}'
  3. [root@client1 ~]# free -m | grep "Mem:" | awk '{print $2}'
  4. [root@client1 ~]# expr $(free -m | grep "Mem:" | awk '{print $7}') / $(free -m | grep "Mem:" | awk '{print $2}')
  5. [root@client1 ~]# expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}')
  6. mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
复制代码


4.配置文件

  1. [root@client1 ~]# rpm -qa mailx
  2. mailx-12.5-16.el7.x86_64
  3. [root@client1 ~]# vi /etc/mail.rc
  4. [root@client1 ~]# echo "122333" | mail -s "test" ***********@qq.com
复制代码

  1. set from=***********@qq.com  发送邮箱地址
  2. set smtp=smtp.qq.com       邮箱使用的smtp服务器的域名
  3. set smtp-auth-user=1609325444@qq.com  smtp邮件发送时登录的账号
  4. set smtp-auth-password=........    授权码
  5. set smtp-auth=login           smtp的状态,登录状态
复制代码


5.编辑配置告警脚本

  1. [root@client1 ~]# vim sysmon.sh
  2. [root@client1 ~]# chmod +x sysmon.sh
  3. [root@client1 ~]# ./sysmon.sh
复制代码

  1. #!/bin/bash
  2. # 磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%告警发送邮件
  3. disk=$(df -Th | grep '/ | awk '{print $6}' | awk -F% '{print $1}')
  4. CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
  5. mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
  6. A=/root/alert.txt
  7. B=*************@qq.com
  8. if [ $disk -ge 90 ]
  9. then echo "磁盘占有率超过90%" >> $A
  10. fi
  11. if [ $CPU -ge 80 ]
  12. then echo "CPU使用率超过80%" >> $A
  13. fi
  14. if [ $mem -ge 90 ]
  15. then echo "内存使用率超过90%" >> $A
  16. fi
  17. if [ -f $A ]
  18. then
  19. cat $A | mail -s "alert report" $B
  20. rm -rf $A
  21. fi
复制代码


最新经典文章,欢迎关注公众号



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条