当前位置: 首页 > news >正文

Shell编程实际应用

 一、脚本编程步骤

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

二、案例分析

1.MAC记录与端口扫描

实验要求:
(1)统计网络中服务器MAC。
(2)检查哪些主机开启FTP。(21)(wget)($?)

netadd="192.168.10."
file="/opt/ethers"
[ -f $file ] && /bin/mv -f $file $file.bak
hostadd=100while [ $hostadd -le 107 ]
doping -c 2 -i 0.2 -W 2 ${netadd}${hostadd}
if [ $? -eq 0 ]
thenarp -n | grep ${netadd}${hostadd} | awk '{print $1,$3}'>>$file
fi
let hostadd++
done
echo "主机列表是:"
cat $file
echo "以下主机开启FTP"
target=$(awk '{print $1}' /opt/ethers)
for IP in $target
do
wget ftp://$IP &>/dev/null
if [ $? -eq 0 ]
thenecho $IPrm -rf index.*
fi
done

 备注:
 [root@localhost ~]# arp -n   (查看MAC地址)

2. 开发监控脚本

实验要求:
(1)CPU,内存,磁盘l利用率
(2)报警
(3)通过邮箱发送邮件

dug=$(df | 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="xxxxx@qq.com"
if [ $dug -gt 80 ]
thenecho "磁盘利用率:${dug}%">>$alog
fi
if [ $cug -gt 80 ]
thenecho "cug利用率:${cug}%">>$alog
fi
if [ $mug -gt 80 ]
thenecho "内存利用率:${mug}%">>$alog
fiif [ -f $alog ]
thencat $alog | mail -s "Host Alert" $amailrm -rf $alog
fi

 备注:
[root@localhost ~]# df     (查看磁盘利用率)
[root@localhost ~]# mpstat  (查看cpu)
[root@localhost ~]# free    (查看内存)
[root@localhost ~]# expr 235044 \* 100 / 3988652  (计算内存利用率,已使用内存空间*100 /总空)

[root@localhost ~]# yum -y install mailx
[root@localhost ~]# vim /etc/mail.rc 
set from=xxxxx@.com smtp=smtp.qq.com
set smtp-auth-user=xxxxx@qq.com smtp-auth-password=xxxx邮箱授权码
set smtp-auth=login

 备注:
set from=user@xxx.com               # 发信人邮箱
set smtp=smtps://smtp.xxx.com:465   #smtp地址
set smtp-auth=login                 # 认证方式
set smtp-auth-user=user@xxx.com     # 邮箱账号
set smtp-auth-password=password     # 邮箱授权码

相关文章:

  • 深度学习-06-手动进行反向传播
  • [数据集][目标检测]RSNA肺炎检测数据集VOC+YOLO格式6012张1类别
  • 手机号脱敏
  • 【前缀“选区-” bat脚本】
  • 汽车IVI中控开发入门及进阶(二十二):video decoder视频解码芯片
  • 深度学习入门-第3章-神经网络
  • 数据结构:链式队列
  • C++ Primer 第五版 第15章 面向对象程序设计
  • 结账和反结账
  • 【学习笔记】Windows GDI绘图(九)Graphics详解(中)
  • JVM 指针压缩
  • 超越Devin!姚班带队,他们创大模型编程新世界纪录
  • Python3 元组
  • 制造企业如何通过PLM系统实现BOM管理的飞跃
  • AI的绘画工具有哪些?
  • 【Leetcode】104. 二叉树的最大深度
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Docker 笔记(2):Dockerfile
  • ECMAScript入门(七)--Module语法
  • Javascript 原型链
  • Js基础——数据类型之Null和Undefined
  • Python十分钟制作属于你自己的个性logo
  • 复习Javascript专题(四):js中的深浅拷贝
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 用Canvas画一棵二叉树
  • Nginx实现动静分离
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $forceUpdate()函数
  • (19)夹钳(用于送货)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (八十八)VFL语言初步 - 实现布局
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (学习日记)2024.01.09
  • .form文件_一篇文章学会文件上传
  • .net 发送邮件
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .NET建议使用的大小写命名原则
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • /etc/fstab 只读无法修改的解决办法
  • /etc/sudoers (root权限管理)
  • ::before和::after 常见的用法
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @RequestBody与@RequestParam
  • @Transactional 参数详解
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [c++] C++多态(虚函数和虚继承)
  • [C++][基础]1_变量、常量和基本类型
  • [CODE:-5504]没有[SYS.SYSOBJECTS]对象的查询权限
  • [Codeforces] number theory (R1600) Part.11
  • [emacs] CUA的矩形块操作很给力啊
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误