文章目录

  • 批量设置密码
  • 当前在线用户
  • 解决DOS攻击
  • 打印字母
  • 打印菜单
  • rsync系统启动脚本
  • 抓阄脚本
  • 检测网址
  • 解密脚本

今天继续上一篇的内容,研究几段常用的运维代码。

批量设置密码

写一个脚本,批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串)。
参考答案:网上找到的其中一段代码如下(已验证通过):

#!/bin/bash
for i in `seq 01 10`
douseradd oldboy$ipassword=`tr -cd 'a-zA-Z0-9'  </dev/urandom  |head -c8`echo "$password |passwd --stdin oldboy$i"
done

当前在线用户

写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多)
参考答案:的确有很多方法,这里写一个最简单的(已验证通过),大家好记忆:

nmap -sP 192.168.1.0/24

解决DOS攻击

写一个脚本,解决DOS攻击生产案例
提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -A INPUT -s 10.0.1.10 -j DROP。(请用至少两种方法实现!)
参考答案:
第一种方法(未经验证):

#!/bin/bash
#tt=awk '{a[$1$4]++ }END{for (i in a) print i,a[i]}' localhost_access_log.2017-11-24.txt|sort -nk2|tail -10
#获取同一时间段和同一IP共同作为下标的数组,数组下标具有唯一性
#获取后按照第二列IP进行排序,取最大10条.
#第二个awk获取IP,准备下一步防火墙封IP
#tt2=$(awk '{a[$1$4]++ }END{for (i in a) print i,a[i]}' localhost_access_log.2017-11-24.txt|sort -nk2|tail -10|awk  -F'[' '{print $1}'|sort|uniq)
#
#awk '{a[$1$4]++ }END{for (i in a) print i,a[i]}' localhost_access_log.2017-11-24.txt|sort -nk2|tail -10|awk  -F'[' '{print $1,$2}'|awk '$3>3{print $1}'|sort|uniq -c
#
for i in $(awk '{a[$1$4]++ }END{for (i in a) print i,a[i]}' localhost_access_log.2017-11-24.txt|sort -nk2|tail -10|awk  -F'[' '{print $1,$2}'|awk '$3>3{print $1}'|sort|uniq)
doecho  $iecho "iptables-I INPUT -s $i -j DROP"
done

第二种方法(未经验证):

#!/bin/bash
while true
doawk '{print $1}' access.log|grep -v "^$"|sort|uniq -c > /tmp/tmp.logexec </tmp/tmp.logwhile read linedoip=`echo $link|awk'{print $2}'`count=`echo $line|awk '{print $1}'`if [ $count -gt 3 ] && [ `iptables -L -n|grep "$ip"|wc -l` -lt 1 ]theniptables -I INPUT -s $ip -j DROPecho "$line is dropped" >>/tmp/droplist.logfidonesleep 5
done

打印字母

bash for循环打印下面这句话中字母数不大于6的单词。(请用至少两种方法实现!)
I am oldboy teacher welcome to oldboy trainingclass.
参考答案:
代码一(已验证):

#!/bin/sh
string="I am oldboy teacher welcome to oldboy trainingclass"
number="`echo $string|grep -o " "|wc -l`"
number=`expr $number + 1`
for n in `seq $number`
dochar=`echo $string|awk -F " " '{print$'"$n"'}'`num=`echo $char|wc -L`if [ $num -le 6 ]then echo $charfi
done

代码二(已验证):

#!/bin/sh
for n in I am oldboy teacher welcome to oldboy trainingclass
doif [ ${#n} -le 6 ];thenecho $nfi
done

打印菜单

打印选择菜单,一键安装Web服务:
[root@oldboyscripts]# sh menu.sh
1.[install lamp]
2.[install lnmp]
3.[exit]
pls input the num you want:
要求:
1、当用户输入1时,输出“startinstalling lamp.”然后执行/server/scripts/lamp.sh,脚本内容输出"lamp is installed"后退出脚本;
2、当用户输入2时,输出“startinstalling lnmp.” 然后执行/server/scripts/lnmp.sh输出"lnmp is installed"后退出脚本;
3、当输入3时,退出当前菜单及脚本;
4、当输入任何其它字符,给出提示“Input error”后退出脚本。
5、要对执行的脚本进行相关条件判断,例如:脚本是否存在,是否可执行等。
参考答案(已验证,不完全一样,道理一致):

#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK_COLOR='\E[1;35m'
RES='\E[0m'
cat <<EOF   #要打印的菜单
1.[install lamp]
2.[install lnmp]
3.[install mysql]
4.[install php]
5.[exit]
EOF
read -p"pls input the num you want:" a   #请输入一个参数
case $a in
1)echo -e "$BLUE_COLOR startinstalling lamp $RES"    #给输出的内容加上颜色lampScripts=/server/scripts/lamp.sh[-f$lampScripts] && sh $lampScripts|| exit1   #判断要执行的lamp文件是否存在;;2)echo -e "$PINK_COLOR startinstalling lnmp $RES"lnmpScripts=/server/scripts/lnmp.sh[-f$lnmpScripts] && sh $lnmpScripts|| exit2;;3)echo -e "$GREEN_COLOR startinstalling mysql $RES"mysqlScripts=/server/scripts/mysql.sh[-f$mysqlScripts] && sh $mysqlScripts|| exit3;;4)echo-e "$PINK_COLOR startinstalling php $RES"phpScripts=/server/scripts/mysql.sh[-f$phpScripts] && sh $phpScripts|| exit4;;*)echo -e "$RED_COLOR input error $RES"
esac

rsync系统启动脚本

写一个网络服务独立进程模式下rsync的系统启动脚本
例如:/etc/init.d/rsyncd {start|stop|restart} 。
要求:
1.要使用系统函数库技巧。
2.要用函数,不能一坨SHI的方式。
3.可被chkconfig管理。
网上参考答案(已验证):
下面的代码执行之前,首先要把rsync的配置文件修改一下:

vi /etc/rsyncd.conf

把这句的注释去掉pid file=/var/run/rsyncd.pid
否则后面执行sh rsyncd.sh stop的时候,并不会停止服务。
验证的时候要会使用ps -ef|grep rsyncss -lntup|grep rsync,查看服务是否被启动和停止。

#!/bin/bash
# chkconfig: 2345 99 98
#author:oldyang
choice=$1
STOP=/var/run/rsyncd.pid
start(){[ -f $STOP ] || rsync --daemon
}
stop(){[ -f $STOP ] && kill `cat /var/run/rsyncd.pid`
}
restart(){[ -f $STOP ] && kill `cat /var/run/rsyncd.pid`
}
case "$choice" instart)start;;stop)stop;;restart)restartsleep 1rsync --daemon;;*)echo "Usage: input right CMD. EX: {start|restart|stop}"exit 1
esac

抓阄脚本

运维派提供外出企业项目实践机会(第6次)来了(本月中旬),但是,名额有限,队员限3人(班长带队)。需要一个抓阄的程序挑选学生:
要求:
1、执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。
2、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入。
网上参考答案(已验证):

#!/bin/bash
##############################################################
# File Name: zhuajiu.sh
# Version: V1.0
# Author: oldboy
# Organization: www.oldboyedu.com
##############################################################
>/tmp/name.log
random(){random="$((RANDOM%100))"if [ `egrep -w "$random" /tmp/name.log|wc -l` -ge 1 ]thencontinuefi
}
name(){read -p "请输入你的名字的全拼:" nameif [ "$name" = "exit" ];thenbreakfiif [ `egrep -w "$name" /tmp/name.log|wc -l` -ge 1 ]thenecho "名字重复,请重新输入"continuefiecho -e "$random\t\t$name"|tee -a /tmp/name.log
}
main(){while truedorandomnamedoneecho "抓阄结束,排序结果如下:"sort -rn -k1 /tmp/name.log|head -3
}
main

很有意思的一段代码,碰到抓阄的事情,就可以用上了

检测网址

批量检查多个网站地址是否正常
要求:shell数组方法实现,检测策略尽量模拟用户访问思路
http://www.yunweipai.com
http://www.taobao.com
http://www.chengxuyuan.com
http://10.0.0.7
网上参考答案(已验证):

#!/bin/bash
##############################################################
# File Name: check_url.sh
# Version: V1.0
# Author: gaobo
# Organization: 641627690@qq.com
# Created Time : 2017-12-05 19:07:45
# Description:
##############################################################
#!/bin/bash
web_array=(
http://blog.oldboyedu.com
http://blog.etiantian.org
http://oldboy.blog.51cto.com
http://10.0.0.7
)
while true
do
for ((i=0;i<${#web_array[*]};i++))dowget -T 10 --tries=2 --spider ${web_array[$i]} >/dev/null 2>&1if [ $? -eq 0 ]thenecho "${web_array[$i]} is ok" elseecho "${web_array[$i]} is bad"fisleep 3done
done

解密脚本

已知下面的字符串是通过RANDOM随机数变量md5sum|cut -c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?
21029299
00205d1c
a3da1677
1f6d12dd
890684b
网上参考答案(已验证):
此题首先要创建一个文本文件,把上面的处理后的数字放进去,比如aa.txt,然后就可以使用下面的代码了:

#!/bin/bash
##############################################################
# File Name: rd_mat.sh
# Version: V1.0
# Author: gaobo
# Organization: 641627690@qq.com
# Created Time : 2017-12-07 19:57:59
# Description:
##############################################################
for ((i=0;i<=32767;i++))
dofor j in `cat /server/scripts/aa.txt`do#echo "$(echo $i|md5sum|cut -c 1-8)    ${j}"if [ "$(echo $i|md5sum|cut -c 1-8)" == "${j}" ]thenecho  $ifidone
done

代码很简单易懂,不过缺点是效率比较低,解密一个,基本需要半分钟左右,答案也公布一下:
1346
7041
25345
25667
可见,加密很快,但是解密非常费时间,为解密的科学家们点赞!大家如果有效率更高的算法,可以留言,谢谢!

【运维心得】你不知道,运维也要写代码(3)相关推荐

  1. 散文运维心得总结_运维人员年终工作总结一

    运维人员年终工作总结一: 去年的年末,我来到了运维部.这是一个技术岗位,刚来的我, 对于我的工作可以说是相当的陌生.大多数仪器.设备都不认识,不 像书本上讲的那些. 它们对于我来说都是新的, 需要学习 ...

  2. 【运维心得】运维工作如何做才能有亮点?

    目录 运维工作合理的分工是怎样的? 那些分工更有价值? 那些分工更加容易智能化? 智能化改造使用那些工具? 自行开发用那些语言? 随着GPT的流行,借助GPT,对于当下工作也在进行思考和整理.毕竟GP ...

  3. Windows系统运维转linux系统运维的经历

    2019独角兽企业重金招聘Python工程师标准>>> 开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维.最近,在<Linux就该这么学>书籍的影响下和朋友小 ...

  4. 7.24运维日福利:运维都是段子手,张口就是100条!

    各位运维宝宝,节日快乐,今天加个鸡腿吧! 在运维帮的公众号看到一篇文章,是关于"一句话说运维"的活动,看完以后不得不感慨--运维都是段子手中的老司机!我从中抽取了100条比较经典的 ...

  5. 遇见运维(一)运维面试常考题

    1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进行维护,他集合了网络.系统.数据库.开发.安全.监控于一 ...

  6. 一目了然“之IT运维可视化,让运维不再说难!

    前言 可视化,就是把复杂抽象的数据信息,以合适的视觉元素及视角去呈现,方便大家理解.记忆.传递!这里,我们来聊聊IT运维可视化. 关于IT运维可视化,我认为是将整个运维过程的关键环节或重要环节,比如运 ...

  7. 运维前线:一线运维专家的运维方法、技巧与实践导读

    前 言 为什么要写这本书 <运维前线:一线运维专家的运维方法.技巧与实践>(以下简称<运维前线>)是前线系列的一个子集,前线系列图书的出版理念是邀请多位业界专家,总结所在行业的 ...

  8. bind blz mysql_MySQ DBAL重点剖析课程 企业级MySQL系统安全与DBA运维日常事务管理 运维DBA必备宝典...

    MySQ DBAL重点剖析课程 企业级MySQL系统安全与DBA运维日常事务管理 运维DBA必备宝典 本资源由JAD资源网收集整理丨www.jiuandun.com 资源简介 MySQ DBAL重点剖 ...

  9. 云时代,运维要么自己写代码,要么开发替你写了

    作者 | 阿里云弹性计算团队 这是最好的时代,运维向更专业的方向发展. " Ops 之前不是一个专业,它只有经验,现在是在把经验变成专业,对外提供标准化服务."我的同事.阿里云弹性 ...

  10. 基础运维 or 低阶运维

    基础运维解决的是项目正常运作的问题,主动预警或被动获取问题信息,启动问题解决机制对问题进行闭环.如果没有基础运维,项目的正常运转会受到比较大的影响 (1)响应用户呼叫:对于用户发出的故障报告,服务请求 ...

最新文章

  1. 8.2 TensorFlow实现KNN与TensorFlow中的损失函数,优化函数
  2. python多重循环导致内存不足_Python多重处理拒绝循环
  3. 解决mysql操作1045错误,1153错误和1130错误
  4. 数字电路数据选择器及其应用实验报告_科普|说说大数据是什么,及其特点与应用...
  5. c 类别构造函数需要包含所有成员吗_C++默认成员函数解析
  6. 二叉树的一些leetcode题目+python(c++)
  7. CSS文字颜色渐变 - 案例篇
  8. 三星Galaxy Note 20系列将首发Exynos 992:性能超骁龙865
  9. 【Elasticsearch】Elasticsearch 通信模块的分析
  10. Docker 私有仓库registry
  11. long 和 Object的相互转换
  12. 关于setInterval设置倒计时只执行一次,clearInterval停止
  13. 《菜菜的机器学习sklearn课堂,tomcat架构解析pdf
  14. 三种常用的电脑截图方法
  15. lqr matlab,MATLAB中的LQR函数用法
  16. 创建wincc项目提示无法连接到服务器,wincc 项目管理器 服务器不可用 无法连接到服务器...
  17. ULN2003A驱动12V继电器
  18. 充分利用公网 -- 将联通光猫设置为桥接
  19. SQLServer之添加聚集索引
  20. Android4.4电池管理

热门文章

  1. Charles-iOS安装证书
  2. 现在人工智能自动修复老照片的效果有好?
  3. 嵌入式SQLite数据库架构和设计
  4. 杭电计算机学院和其他学院,浙江最好的5所大学,浙江大学一家独大,其余4所争议很大...
  5. 隔行插入行——《超级处理器》应用
  6. 教你快速使用AD7606的简单驱动方法--并行
  7. 全球及中国医疗众筹行业发展战略与投资规划分析报告2022-2028年
  8. python应用内部审计_软件机器人实现内部审计自动化变革,助力企业转型数字化审计...
  9. 多线程在单核cpu与多核cpu下如何工作
  10. Java后端开发需要掌握什么