实操 : shell编程实战

前言

  • mac记录与端口扫描脚本
  • 开发系统监控脚本

一 : 脚本编程步骤分享

1.1 脚本编程步骤

1.2 需求分析

  • 根据系统管理的需求,分析脚本要实现的功能、功能实现的层次、实现的命令与语句等

1.3 命令测试

  • 将要用到的命令逐个进行测试,以决定使用的选项、要设置的变量等

1.4 脚本编程

  • 将测试好的命令写入到脚本文件中,并通过各种语句将命令执行的结果保存、判断或者发出报警等

1.5 调试优化

  • 对脚本进行测试,并根据结果进行优化
  • 建议一遍编程一边调试,以减少错误的发生

二 : mac记录与端口扫描脚本

2.1 企业环境说明

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

2.2 需求描述

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

2.3 命令测试

  • 分析:记录局域网中各主机的mac地址,保存到/etc/ethers文件中;若此文件已存在,应先转移进行备份;检查有哪些主机开启了匿名ftp服务,扫描对象为/etc/ethers文件的所有ip地址,扫描的端口为21

    • arping -c 2 -w 1 -I 网卡名 ip地址 //发送mac地址解析请求,或者使用ping
    • arp -n 记录mac
    • awk 打印ip与mac地址
    • 使用wget下载的方法测试ftp服务
[[email protected] ~]# arping -c 2 -w 1 -I ens33 192.168.247.134
ARPING 192.168.247.134 from 192.168.247.136 ens33
Unicast reply from 192.168.247.134 [00:0C:29:52:4D:89]  1.452ms
Unicast reply from 192.168.247.134 [00:0C:29:52:4D:89]  1.182ms
Sent 2 probes (1 broadcast(s))
Received 2 response(s)

配置ftp匿名访问模式, 首先输入命令“vi /etc/vsftpd/vsftpd.conf” 打开ftp服务具体配置文件

进行修改(有点改,没有的添)(去“#”号)

参数 作用
anonymous_enable=YES 允许匿名访问模式。
anon_umask=022 匿名用户上传文件的umask值。
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户创建目录
anon_other_write_enable=YES 允许匿名用户修改目录名或删除目录

2.4 脚本编程与调试

  • 通过arping命令发送ARP请求,使用if语句根据反馈结果记录mac地址
  • 将网段地址赋值给变量,作为检测地址的前缀
  • 使用循环语句,重复检测目标并记录mac地址,主机地址为1-254
  • 通过awk命令过滤出/etc/ethers文件中的所有ip地址,赋值给变量,使用循环语句,读取变量中的ip地址,重复探测ftp开启情况
#!/bin/bash
#测试文件是否存在,若存在,就将当前文件备份
[ -f /etc/ethers ]
if [ $? -eq 0 ]
then
cp -p /etc/ethers /etc/ethers.bak
fi
#去ping254个地址,将成功的ip地址和mac追加到/ethers
for ((i=134;i<=139;i++))
do
  ping -c 3 -w 3 192.168.247.$i &> /dev/null
  if [ $? -eq 0 ]
  then
  echo "192.168.247.$i 存活"
  fi
done
arp -n | grep "ether" | awk ‘{print $1,$3}‘ > /etc/ethers
#检查是否安装nmap扫描软件
rpm -q nmap
if [ $? -eq 1 ]
then
yum clean all
yum list
yum install nmap -y
[ $? -eq 0 ] && echo "未安装namp扫描工具,当前已为您安装"
fi
#检查有哪些ip开启了匿名服务ftp服务,即22端口
for a in $(cat /etc/ethers | awk ‘{print $1}‘)
do
m=$(nmap -sT $a -p 21 | awk ‘/ftp/{print $2}‘)
if [ $m = open ]
then
echo "$a 开启ftp服务"
fi
done

三 : 开发系统监控脚本

3.1 企业环境说明

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

3.2 需求描述

  • 编写名为sysmon.sh的shell监控脚本
  • 监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率
  • 百分比只精确到个位,如7%、12%、23%等
  • 出现以下任意情况时告警:磁盘占用率超过90%、cpu使用率超过80%、内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
  • 结合crond服务,每半个小时执行一次监控脚本

3.3 思路与命令测试

  • 分析:监控内容包括cpu使用率、内存使用率、根分区的磁盘占用率
  • df命令
  • awk命令
  • mpstat 命令 (需安装sysstat软件包)
  • free命令
  • crontab命令

3.4 脚本编程与调试

  • 使用df命令提取出根分区的磁盘占用率,赋值给变量DUG
  • 使用mpstat命令提取cpu使用率,赋值给变量CUG
  • 使用free命令提取出内存使用率,赋值给变量MUG
  • 使用if语句判断上述监控项目是否超标,将需要告警的信息保存到/tmp/alert.txt文件;若存在则作为告警邮件发送
  • 调试优化并设置crontab计划
#!/bin/bash
#/根分区的当前占用率
DUG=$(df -Th | grep ‘/$‘ | awk ‘{print $6}‘ | sed  ‘s/%//‘)
#cpu 的当前空闲占用率
CUG=$(mpstat | grep ‘all‘ | awk ‘{print $13}‘ | awk -F. ‘{print $1}‘)
#内存当前占用率
used=$(free | grep ‘Mem‘ | awk ‘{print $3}‘)
total=$(free | grep ‘Mem‘ | awk ‘{print $2}‘)
(( MUG = used*100/total))
genfenquzhanyong=当前根磁盘占用未到警戒线20%
cpukongxian=当前cpu空闲资源未低于警戒线1%
neicunzhanyong=当前内存占用未超过警戒线10%
#当根分区占用率超过10时
if [ $DUG -gt 10 ]
then
echo `date`  >> /tmp/alert.txt
echo "当前磁盘占用超过10%" >> /tmp/alert.txt
genfenquzhanyong=‘当前根磁盘占用超过警戒线20%,为$DUG%‘
fi
#当cpu的空闲内存小于20时
if [ $CUG -lt 1 ]
then
echo `date`  >> /tmp/alert.txt
echo "当前cpu空闲资源小于1%" >> /tmp/alert.txt
cpukongxian=‘当前cpu空闲资源低于警戒线1%,为$CUG‘
fi

if [ $MUG -gt 10 ]
then
echo `date`  >> /tmp/alert.txt
echo "当前内存占用超过10%" >> /tmp/alert.txt
neicunzhanyong=‘当前内存占用超过警戒线10%,为$MUG‘
fi
rpm -q expect
if [ $? -ne 0 ]
then
yum install expect -y
fi
echo "$genfenquzhanyong,$cpukongxian,$neicunzhanyong" | mail "[email protected]"

[[email protected] ~]# crontab -e -u root
[[email protected] ~]# crontab -l
30 * * * *      /usr/bin/sh /root/sysmon.sh

原文地址:https://blog.51cto.com/14558445/2456472

时间: 2024-10-10 20:56:38

实操 : shell编程实战的相关文章

老男孩新书Shell编程实战预定开始了-包邮包答疑

老男孩新书Shell编程实战预定开始了(扫图中二维码购买包邮定期包答疑),亲爱的伙伴们,让你们久等了.电脑用户猛戳 电脑购买链接 注意:包邮包3个月(2017春节后起算)Q群书籍内容答疑,等于白送书,还倒搭答疑服务. 如果觉得给力,请帮忙朋友圈.QQ群.空间转载! 活动优惠仅限本次活动,从其他渠道购买不享受此次的服务承诺. 定价 89元 基本信息 作者: 老男孩 丛书名: Linux/Unix技术丛书 出版社: 机械工业出版社 ISBN:9787111556077 上架时间:2017-1-6 出

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

本文的知识点是关于shell脚本的条件测试的相关内容. 通常在shell脚本中我们需要做各式各样的条件判断,比如,测试一个文件是否存在.是否为文件或目录.是否 具有执行权限等等,所以在shell脚本中,条件判断还是至关重要的.接下来我们进入正题:shell脚本的条件测试. 1.在bash编程中,条件测试常用的语法形式如下表: 提示: 语法1中的test命令和语法2中的[]是等价的.语法3中的[[]]双中括号为扩展的test命令. 语法4中的(())常用于计算. 在双中括号[[]]中可以使用通配符

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算. 1.常见的算术运算符: 提示: 此处对于我自己来说++.--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下: [[email protected] ~]# a=10                  ==>定义变量a[[email protected] ~]# echo $((a++)) ==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.10[[email 

Linux Shell 编程实战技巧

目前,越来越多的企业应用会部署在 Linux 系统上的,而 Linux Shell 脚本可以极大地帮助我们完成这些应用的运维任务.这使得 Linux Shell 开发技能成为开发人员的一项重要的.有竞争力的技能.本文就笔者的实际开发经验,以 Korn Shell 为例分享了脚本开发中的常见问题及相关技巧. 避免定时任务脚本的常见问题 很多脚本在实际使用的时候往往是以定时任务的方式运行,而非手工运行.但是实现同样功能的脚本在这两种运行方式下可能遇到的问题不尽相同. 以定时任务方式运行的脚本往往会遇

老男孩的2017年Shell编程实战新书封皮设计你做主!

各位小伙伴,大家好,老男孩的第二本新书<Shell编程实战>就要和大家见面了(预计2017年1月初)! 请大家参与选择封皮的颜色,大声的告诉老男孩,时间截止到12月22日晚22:00,你的选择将直接决定本书的封皮设计,谢谢大家! 请评论出书喜欢1.蓝色还是2.橙色!也可以加理由! 还可加群关注新书出版具体时间动向,运维Q群 384467551 架构师Q群390642196 1.蓝色 2.橙色 如果有其他建议可以评论.

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶

本文讲解shell变量知识进阶. 以下为知识点的总结,关于练习,本文不不涉及,还需要各位小伙伴自己练习! 1.shell中的特殊位置参数变量,请见下表: 在企业场景下,"$?"的用法: (1)判断命令.脚本或函数等程序是否执行成功: (2)若在脚本中调用执行"exit 数字",则会返回这个数字给"$?"变量: (3)如果是在函数里,则通过"return  数字",把这个数字以函数返回值的形式传给"$?".

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

Shell编程实战

为什么要学习Shell编程 Shell脚本语言是实现Linux/Unix系统管理及自动化运维所必须的重要工具,Linux系统的底层以及基础应用软件的核心大都涉及Shell脚本的内容. 一个合格的Linux系统管理员都必须熟练编写Shell脚本语言,从而提升运维人员的工作效率,减少不必要的重复性工作. 学习Shell所需的基础知识 熟练使用VIm编辑器,熟悉SSH终端等配置 在Linux下开发shell脚本用的最多的就是vim编辑器,熟练使用vim可以使得shell脚本开发事半功倍! 有一定的Li