首页 / 更多教程 / shell实战训练营Day14
shell实战训练营Day14
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了shell实战训练营Day14,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2993字,纯文字阅读大概需要5分钟。
内容图文
![shell实战训练营Day14](/upload/InfoBanner/zyjiaocheng/977/a10f441502e148259a8f27672442f968.jpg)
输入数字执行命令
输入1执行 date命令
输入2执行 ls命令
可以使用case判断
#!/bin/bash
echo "cmd manu 1 date 2 ls 3 pwd"
read -p"please input a number;" n
if [ -z $n ]
then
echo "shuruyigeshuzi"
exit
fi
n1=echo $n|sed 's/[0-9]//g'
if
[ -n $n1 ]
then
echo "shuruyigechushuzi"
exit
fi
case $n in
1)
date
;;
2)
ls
;;
3)
pwd
;;
*)
echo "range 1-4"
;;
esac
添加user_00-user_09,并设置随机密码,密码要求10位,并包含数字及大小写字母,注意要把每一个用户密码记录到一个日志文件中。
mkpasswd
在脚本中设置随机密码 可以使用echo|passwd 命令
seq实现数字递增
mkpasswd生成随机字符
#!/bin/bash
for i in seq -w 00 09
do
useradd user$i
p=mkpasswd -l 10 -s 0
echo user$i $p >> /tmp/pass.tmp
echo $p|passwd --stdin user$i
done
#for i in seq -w 00 09
;do userdel -r user$i;done
服务器上,写一个监控脚本,要求如下:
每隔10s去检测一次服务器上的httpd进程数,如果大于等于500的时候,就需要自动重启一下apache服务,并检测启动是否成功。
若没有正常启动还需再一次启动,最大不成功数超过5次则需要立即发邮件通知管理员,并且以后不需要再检测!
如果启动成功后,1分钟后再次检测httpd进程数,若正常则重复之前操作(每隔10s检测一次),若还是大于等于500,那放弃重启并需要发邮件给管理员,然后自动退出该脚本。假设其中发邮件脚本为之前使用的mail.py
核心要点
pgrep -l httpd或者ps -C httpd --no-heading检查进程
for循环5次计数器
#!/bin/bash
jianchafuwu()
{
c=0
for i in seq 1 5
do
/usr/local/apache2.4/apachectl -l restart 2 > /tmp/httpd.err
if [ ! $? -eq 0 ]
then
c=$[$c+1]
else
break
fi
done
if [ $c -eq 5 ]
then
python mail.py 123@qq.com "httpd进程数大于500重启失败" "head -1 /tmp/httpd.err
"
exit
fi
}
while :
do
n=ps -C httpd --no -heading|wc -l
if [ $n -ge 500 ]
then
jianchafuwu
sleep 60
n1=ps -C httpd --no -heading|wc -l
if [ $n1 -ge 500 ]
then python mail.py 123@qq.com "apache重启1分钟后进程数大于500" "请排查问题"
exit
fi
fi
sleep 10
done
需求: 根据web服务器上的访问日志,把一些请求量非常高的ip给拒绝掉!并且每隔半小时把不再发起请求或者请求量很小的ip给解封。 假设:
一分钟内请求量高于100次的IP视为不正常请求。
访问日志路径为/data/logs/access_log。
用第2例中的1.log作为演示日志
核心要点
统计ip访问次数,排序
如何标记每隔半小时
iptables计数器是一个重要的判断指标
函数(封IP、解封IP) 日志文件为1.log
#!/bin/bash
block_ip()
{
t1=date -d "-1 min" +%Y:%H:%M
log=/shell100/1.log
egrep "$t1[0-9]+"$log >/tmp/tmp_last_min.log
awk '{print $1}' 1.log|sort -n|uniq -c|sort -n|awk '$2>100 {print}' > /tmp/bad.ip_list
n=wc -l /tmp/bad.ip_list|awk '{print $1}'
if [ $n -ne 0 ]
then
for ip in cat /tmp/bad.ip_list
do
iptables -I INPUT -s $ip -j REJECE
done
fi
}
unblock_ip ()
{
iptables -nvL INPUT |sed '1d'|awk '$1<5 {print $8}'>/tmp/goog.ip_list
n=wc -l /tmp/goog.ip_list|awk '{print $1}'
if [ $n -ne 0 ]
then
for ip in cat /tmp/good_ip.list
do
iptabls -D INPUT -s $ip -j REJECT
done
fi
iptables -Z
}
t=date +%M
if [ $t == "00" ]||[ $t == "30" ]
then
unblock_ip
block_ip
else
block_ip
fi
#将脚本添加到计划任务 crontab
请仔细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字。
10 31 53 77 105 141 …….
核心要点
计算两个数值之间的差值
#!/bin/bash
x=10
y=21
for i in seq 0 15
do
echo $x
x=$[$x+$y]
z=$[2**$i] #幂指数运算
y=$[$y+$z]
done
内容总结
以上是互联网集市为您收集整理的shell实战训练营Day14全部内容,希望文章能够帮你解决shell实战训练营Day14所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。