经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » R语言 » 查看文章
企业Shell面试题及企业运维实战案例(三) - 雄霸天下-无人能挡
来源:cnblogs  作者:雄霸天下-无人能挡  时间:2019/8/15 12:15:29  对本文有异议

文章转载自:http://www.pythonheidong.com/blog/article/2870/

1、企业Shell面试题1:批量生成随机字符文件名案例

使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下:

  1. [root@oldgirl C19]# ls /oldboy
  2. apquvdpqbk_oldboy.html mpyogpsmwj_oldboy.html txynzwofgg_oldboy.html
  3. bmqiwhfpgv_oldboy.html mtrzobsprf_oldboy.html vjxmlflawa_oldboy.html
  4. jhjdcjnjxc_oldboy.html qeztkkmewn_oldboy.html
  5. jpvirsnjld_oldboy.html ruscyxwxai_oldboy.html

解答:

  1. #!/bin/sh
  2. [ ! -d /oldboy ] && mkdir /oldboy -p
  3. for i in {01..10}
  4. do
  5. pass=`uuidgen|cut -c 1-10`
  6. touch /oldboy/${pass}_oldboy.html
  7. done

2、企业Shell面试题2:批量改名特殊案例

将以上面试题中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写

解答:

  1. 方法一:
    #!/bin/sh
  2. for i in `ls /oldboy/*.html`
  3. do
  4. mv $i `echo $i|sed 's#oldboy.html#oldgirl.HTML#g'`
  5. done
  1. 方法二:
  2. rename oldboy.html oldgirl.HTML *.html
  1. 方法三:
  2. #!/bin/sh
  3. cd /oldboy &&for i in `ls`
  4. do
  5. str=`echo $i|cut -c -10`
  6. mv ${str}_oldboy.html ${str}_oldgril.HTML
  7. done

3、企业Shell面试题3:批量创建特殊要求用户案例

批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)

解答:

  1. #!/bin/bash
  2. for n in {01..10}
  3. do
  4. pass=`uuidgen|cut -c 1-10`
  5. id oldboy$n &>/dev/null
  6. if [ $? -ne 0 ];then
  7. useradd oldboy$n
  8. echo $pass|passwd --stdin oldboy$n &>/dev/null
  9. echo -e "user: oldboy$n pass: $pass" >>/tmp/user.log
  10. else
  11. echo "oldboy$n 已存在"
  12. fi
  13. done

4、企业Shell面试题4:扫描网络内存活主机案例

写一个Shell脚本,判断10.0.0.0/24网络里,当前在线的IP有哪些?

解答:

  1. #!/bin/sh
  2. . /etc/init.d/functions
  3. for ip in {1..254}
  4. do
  5. ping -c2 -W1 10.0.0.$ip &>/dev/null
  6. if [ $? -eq 0 ]
  7. then
  8. action "10.0.0.$ip" /bin/true
  9. fi
  10. done

5、企业Shell面试题5:解决DOS攻击生产案例

    写一个Shell脚本解决DOS攻击生产案例。请根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100(读者根据实际情况设定),即调用防火墙命令封掉对应的IP。防火墙命令为:iptables-I INPUT -s IP地址 -j DROP

解答:

  1. #!/bin/sh
  2. while true
  3. do
  4. awk '{print $1}' access.log |sort |uniq -c >/tmp/ip.log#分析web访问日志
  5. #netstat -an|grep EST|awk -F "[ :]+" '{print $6}'|sort|uniq -c#通过网络连接线
  6. while read line
  7. do
  8. ip=`echo $line|awk '{print $2}'`
  9. count=`echo $line|awk '{print $1}'`
  10. if [ $count -gt 100 ] && [ `iptables -L -n|grep $ip|wc -l` -lt 1 ]
  11. then
  12. iptables -I INPUT -s $ip -j DROP
  13. echo "$line is dropped" >>/tmp/drop_ip.log
  14. fi
  15. done </tmp/ip.log
  16. sleep 5
  17. done

iptables查看结果

  1. [root@m01 ~]# iptables -L -n
  2. Chain INPUT (policy ACCEPT)
  3. target prot opt source destination
  4. DROP all -- 140.205.225.206 0.0.0.0/0
  5. DROP all -- 140.205.225.205 0.0.0.0/0
  6. DROP all -- 140.205.225.200 0.0.0.0/0
  7. DROP all -- 140.205.225.188 0.0.0.0/0
  8. DROP all -- 140.205.201.43 0.0.0.0/0
  9. DROP all -- 140.205.201.40 0.0.0.0/0
  10. DROP all -- 140.205.201.37 0.0.0.0/0
  11. DROP all -- 140.205.201.30 0.0.0.0/0
  12. ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
  13. ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
  14. ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
  15. ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
  16. REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  17. Chain FORWARD (policy ACCEPT)
  18. target prot opt source destination
  19. REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
  20. Chain OUTPUT (policy ACCEPT)
  21. target prot opt source destination

6、企业Shell面试题6:脚本实现MySQL数据库分库备份

  1. #!/bin/sh
  2. Myuser=root
  3. Mypass=123456
  4. Mycmd="mysql -u$Myuser -p$Mypass"
  5. Mydump="mysqldump -u$Myuser -p$Mypass -x -B -F -R"
  6. Dblist=`$Mycmd -e "show databases;"|sed '1,2d'|egrep -v "_schema|mysql"`
  7. for database in $Dblist
  8. do
  9. $Mydump $database|gzip >/tmp/${database}_$(date +%F).sql.gz &>/dev/null
  10. done

7、企业Shell面试题7:脚本实现MySQL数据库分库分表备份

  1. #!/bin/sh
  2. Myuser=root
  3. Mypass=123456
  4. Mycmd="mysql -u$Myuser -p$Mypass"
  5. Mydump="mysqldump -u$Myuser -p$Mypass -x -F -R"
  6. Dblist=`$Mycmd -e "show databases;"|sed '1,2d'|egrep -v "_schema|mysql"`
  7. for database in $Dblist
  8. do
  9. Tablist=`$Mycmd -e "show tables from $database;"|sed 1d`
  10. for table in $Tablist
  11. do
  12. mkdir -p /tmp/${database}
  13. $Mydump $database $table|gzip >/tmp/${database}/${table}_$(date +%F).sql.gz
  14. done
  15. done

8、企业Shell面试题8:筛选符合长度的单词案例

利用bash for循环打印下面这句话中字母数不大于6的单词(某企业面试真题)。

  I am oldboy teacher welcome to oldboy training class

解答:

  1. 方法一:
    #!/bin/sh
  2. for word in I am oldboy teacher welcome to oldboy training class
  3. do
  4. if [ ${#word} -le 6 ]
  5. then
  6. echo $word
  7. fi
  8. done
  1. 方法二:数组
  2. #!/bin/sh
  3. word=(I am oldboy teacher welcome to oldboy training class)
  4. for((i=0;i<${#word[*]};i++))
  5. do
  6. if [ `echo ${word[i]}|wc -L` -le 6 ]
  7. then
  8. echo ${word[i]}
  9. fi
  10. done
  1. 方法三:awk
  2. echo "I am oldboy teacher welcome to oldboy training class"|awk '{for(i=1;i<=NF;i++)if(length($i)<=6)print $i}'

9、企业Shell面试题9:MySQL主从复制异常监控案例

10、企业Shell面试题10:比较整数大小经典案例

       综合实战案例:开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小。用条件表达式(禁止if)进行判断并以屏幕输出的方式提醒用户比较结果。注意:一共是开发2个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数不对给予提示

解答:

  1. 传参的方法:
  2. #!/bin/sh
  3. num1=$1
  4. num2=$2
  5. [ $# -ne 2 ] && echo "请输入两个数字:" && exit 1
  6. expr 1 + $num1 &>/dev/null
  7. [ $? -eq 2 ] && echo "输入的第一个数字不是整数" && exit 2
  8. expr 1 + $num2 &>/dev/null
  9. [ $? -eq 2 ] && echo "输入的第二个数字不是整数" && exit 2
  10. [ $num1 -lt $num2 ] && echo "$num1<$num2" && exit 0
  11. [ $num1 -eq $num2 ] && echo "$num1=$num2" && exit 0
  12. echo "$num1>$num2"
  1. read读入方法:
  2. #!/bin/sh
  3. read -p "请输入第一个数字:" num1
  4. read -p "请输入第二个数字:" num2
  5. expr 1 + $num1 &>/dev/null
  6. [ $? -eq 2 ] && echo "输入的第一个数字不是整数" && exit 2
  7. expr 1 + $num2 &>/dev/null
  8. [ $? -eq 2 ] && echo "输入的第二个数字不是整数" && exit 2
  9. [ $num1 -lt $num2 ] && echo "$num1<$num2" && exit 0
  10. [ $num1 -eq $num2 ] && echo "$num1=$num2" && exit 0
  11. echo "$num1>$num2"

11、企业Shell面试题11:菜单自动化软件部署经典案例

  1. 综合实例:打印选择菜单,按照选择一键安装不同的Web服务。
  2. 示例菜单:
  3. [root@oldboy scripts]# shmenu.sh
  4. 1.[install lamp]
  5. 2.[install lnmp]
  6. 3.[exit]
  7. pls input the num you want:
  8. 要求:
  9. 1、当用户输入1时,输出“startinstalling lamp.提示”然后执行/server/scripts/lamp.sh,脚本内容输出"lampis installed"后退出脚本,工作中就是正式lamp一键安装脚本;
  10. 2、当用户输入2时,输出“startinstalling lnmp.提示” 然后执行/server/scripts/lnmp.sh输出"lnmpis installed"后退出脚本,工作中就是正式lnmp一键安装脚本;
  11. 3、当输入3时,退出当前菜单及脚本;
  12. 4、当输入任何其它字符,给出提示“Input error”后退出脚本;
  13. 5、要对执行的脚本进行相关的条件判断,例如:脚本文件是否存在,是否可执行等判断,尽量用上前面讲解的知识点。

解答:

  1. #!/bin/sh
  2. . /etc/init.d/functions
  3. cat<<EOF
  4. ===================================
  5. 1.[install lamp]
  6. 2.[install lnmp]
  7. 3.[install nfs]
  8. 4.[exit]
  9. ===================================
  10. EOF
  11. while true
  12. do
  13. read -p "pls input the num you want:" num
  14. case $num in
  15. 1)
  16. /bin/sh /server/scripts/lamp.sh
  17. action "startinstalling lamp..." /bin/true
  18. ;;
  19. 2)
  20. /bin/sh /server/scripts/lnmp.sh
  21. action "startinstalling lnmp..." /bin/true
  22. ;;
  23. 3)
  24. /bin/sh /server/scripts/nfs.sh
  25. action "startinstalling nfs..." /bin/true
  26. ;;
  27. 4)
  28. exit
  29. ;;
  30. *)
  31. echo "对不起,输入错误,请重新输入"
  32. esac
  33. done

12、企业Shell面试题12:Web及MySQL服务异常监测案例

  1. ①通过端口:
  2. #!/bin/sh
  3. . /etc/init.d/functions
  4. port=`lsof -i:80|grep nginx|wc -l`
  5. if [ $port -ge 2 ];then
  6. action "Nginx is running" /bin/true
  7. else
  8. action "Nginx is not running" /bin/false
  9. /application/nginx/sbin/nginx
  10. action "starting Nginx" /bin/true
  11. fi 
  1. ②通过进程:
  2. #!/bin/sh
  3. . /etc/init.d/functions
  4. port=`ps -ef|grep nginx|grep -v grep|wc -l`
  5. if [ $port -ge 2 ];then
  6. action "Nginx is running" /bin/true
  7. else
  8. action "Nginx is not running" /bin/false
  9. /application/nginx/sbin/nginx
  10. action "starting Nginx" /bin/true
  11. fi
  1. wget返回内容:
  2. #!/bin/sh
  3. . /etc/init.d/functions
  4. port=`wget -T 5 --spider http://172.19.5.8 &>/dev/null`
  5. if [ $? -eq 0 ];then
  6. action "Nginx is running" /bin/true
  7. else
  8. /application/nginx/sbin/nginx
  9. action "starting Nginx" /bin/true
  10. fi
  1. curl返回值200
  2. #!/bin/sh
  3. . /etc/init.d/functions
  4. port=`curl -s -I -w "%{http_code}\n" 172.19.5.8 -o /dev/null`
  5. if [ "$port" == "200" ];then
  6. action "Nginx is running" /bin/true
  7. else
  8. /application/nginx/sbin/nginx
  9. action "starting Nginx" /bin/true
  10. fi

13、企业Shell面试题13:监控Memcached缓存服务是否正常

  1. 监控Memcached缓存服务是否正常,模拟用户(web客户端)检测。
  2. 使用nc命令加上set/get来模拟检测。 

 

14、企业Shell面试题14:开发脚本入侵检测与报警案例

  1. 面试及实战考试题:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次。

 

15、企业Shell面试题15:开发Rsync服务启动脚本案例

  1. #!/bin/bash
  2. . /etc/init.d/functions
  3. port=`netstat -lntup|grep 873|wc -l`
  4. if [ ! -f /etc/rsyncd.conf ]
  5. then
  6. action "rsync配置" /bin/false
  7. exit 1
  8. elif [ ! -f /usr/bin/rsync ]
  9. then
  10. action "rsync命令" /bin/false
  11. exit
  12. fi
  13. case "$1" in
  14. start)
  15. if [ $port -lt 2 ];then
  16. rsync --daemon
  17. action "Starting rsync..." /bin/true
  18. else
  19. action "Rsync is running..." /bin/true
  20. fi
  21. ;;
  22. stop)
  23. if [ $port -ge 2 ];then
  24. killproc rsync
  25. action "Stopping rsync..." /bin/true
  26. else
  27. action "Rsync is not running..." /bin/true
  28. fi
  29. ;;
  30. restart)
  31. killproc rsync
  32. rsync --daemon
  33. action "Rsync is restarting." /bin/true
  34. ;;
  35. *)
  36. echo "USAGE:$0 {start|stop|restart}"
  37. esac

 16、企业Shell面试题16:开发MySQL多实例启动脚本

  1. 开发MySQL多实例启动脚本:
  2. 已知MySQL多实例启动命令为:mysqld_safe --defaults-file=/data/3306/my.cnf&
  3. 停止命令为:mysqladmin -u root -poldboy123 -S/data/3306/mysql.sock shutdown
  4. 请完成mysql多实例启动启动脚本的编写
  5. 要求:用函数,case语句、if语句等实现。

解答:

  1. #!/bin/bash
  2. . /etc/init.d/functions
  3. Port="3306"
  4. Myuser="root"
  5. Mypass="123456"
  6. Mysock="/data/$Port/mysql.sock"
  7. function_start(){
  8. if [ ! -e "$Mysock" ];then
  9. /application/mysql/bin/mysqld_safe --defaults-file=/data/$Port/my.cnf &>/dev/null &
  10. action "Starting MySQL..." /bin/true
  11. else
  12. action "MySQL is running..." /bin/true
  13. exit
  14. fi
  15. }
  16. function_stop(){
  17. if [ ! -e "$Mysock" ];then
  18. action "MySQL is not running..." /bin/false
  19. exit
  20. else
  21. action "Stopping MySQL..." /bin/true
  22. /application/mysql/bin/mysqladmin -u$Myuser -p$Mypass -S $Mysock shutdown
  23. fi
  24. }
  25. function_restart(){
  26. function_stop
  27. sleep 2
  28. function_start
  29. action "MySQL is restarting..." /bin/true
  30. }
  31. case "$1" in
  32. start)
  33. function_start
  34. ;;
  35. stop)
  36. function_stop
  37. ;;
  38. restart)
  39. function_restart
  40. ;;
  41. *)
  42. echo "USAGE: /data/$Port/mysql{start|stop|restart}"
  43. esac

17、企业Shell面试题17:破解RANDOM随机数案例

  1. 已知下面的字符串是通过RANDOM随机数变量md5sum后,再截取一部分连续字符串的结果,请破解这些字符串对应的使用md5sum处理前的RANDOM对应的数字?
  2. 21029299
  3. 00205d1c
  4. a3da1677
  5. 1f6d12dd
  6. 890684b

解答:生成密码字典

  1. #!/bin/sh
  2. for i in {0..32767}
  3. do
  4. screct=`echo $i|md5sum`
  5. echo "$i $screct" >>/tmp/file.txt
  6. done

过滤出对应密码字符串

  1. [root@m01 ~]# egrep '21029299|00205d1c|a3da1677|1f6d12dd|890684b' /tmp/file.txt
  2. 1346 00205d1cbbeb97738ad5bbdde2a6793d -
  3. 7041 1f6d12dd61b5c7523f038a7b966413d9 -
  4. 10082 890684ba3685395c782547daf296935f -
  5. 25345 a3da1677501d9e4700ed867c5f33538a -
  6. 25667 2102929901ee1aa769d0f479d7d78b05 -

18、企业Shell面试题18:批量检查多个网站地址是否正常

  1. 企业面试题:批量检查多个网站地址是否正常
  2. 要求:
  3. 1、使用shell数组方法实现,检测策略尽量模拟用户访问。
  4. 2、每10秒钟做一次所有的检测,无法访问的输出报警。
  5. 3、待检测的地址如下
  6. http://blog.oldboyedu.com
  7. http://blog.etiantian.org
  8. http://oldboy.blog.51cto.com
  9. http://10.0.0.7

解答:

  1. #!/bin/sh
  2. . /etc/init.d/functions
  3. Url=(
  4. http://blog.oldboyedu.com
  5. http://blog.etiantian.org
  6. http://oldboy.blog.51cto.com
  7. http://10.0.0.7
  8. )
  9. for i in ${Url[*]}
  10. do
  11. port=`curl -s -I -w "%{http_code}\n" $i -o /dev/null`
  12. if [ $port -eq 200 ];then
  13. action "$i" /bin/true
  14. else
  15. action "$i" /bin/false
  16. fi
  17. done

19、企业Shell面试题19:单词及字母去重排序案例

  1. shell处理以下内容
  2. 1、按单词出现频率降序排序!
  3. 2、按字母出现频率降序排序!
  4. the squid project provides a number ofresources to assist users design,implement and support squid installations.Please browse the documentation and support sections for more infomation,byoldboy training.

解答:

20、企业Shell面试题20:开发脚本管理服务端LVS案例

  1. 请在LVS负载均衡主节点上,开发管理LVS服务的脚本ip_vs
  2. 实现:利用ipvsadm可以启动并配置好LVS服务,脚本形式:/etc/init.d/lvs{start|stop|restart}

 解答:

  

 

21、企业Shell面试题21:LVS节点健康检查及管理脚本案例

  1. 请在LVS负载均衡主节点上,模拟keepalived健康检查功能管理LVS节点,
  2. 当节点挂掉从服务器池中剔除,好了再加到服务器池中来。 

解答:

22、企业Shell面试题22:LVS客户端配置脚本案例

  1. 请在LVS客户端节点上,开发LVS客户端设置VIP以及抑制ARP的管理脚本
  2. 实现:/etc/init.d/lvsclient{start|stop|restart}

解答:

 

23、企业Shell面试题23:模拟keepalved软件高可用案例

  1. 请在LVS服务端备用节点上,模拟keepalved vrrp功能,监听主节点,如果主节点不可访问则备节点启动并配置LVS实现接管主节点的资源提供服务(提醒:注意ARP缓存),提示此题要借助19.1.21的功能

解答:

24、企业Shell面试题24:Nginx负载节点状态监测案例

  1. 开发通过Web界面展示监控Nginx代理节点状态,效果图如下,当节点宕机时,以红色展示,当节点正常时以绿色展示

  

解答:

25、企业Shell面试题30:企业代码上线发布系统案例

  1. 写一套简单的企业代码上线发布系统案例,利用SVN对代码及配置文件进行管理,在办公室服务器上从svn取出指定版本的代码和配置,发布到IDC机房分发机服务器上,在分发服务器或者负载均衡器上或者应用服务器本地实现代码平滑发布、上线、回滚脚本(具体设计请参考课堂讲解的企业代码发布方案)。

解答:

 

 

26、企业Shell面试题26:51CTO博文爬虫案例

  1. 获取51CTO博客列表倒序排序考试题
  2. 老男孩教育培训机构需求:需求入下:
  3. 请把http://oldboy.blog.51cto.com地址中的所有博文,按照时间倒序列表如下:
  4. 2013-09-13运维就是一场没有硝烟的战争
  5. http://oldboy.blog.51cto.com/2561410/1296694
  6. 2016-04-17运维人员写项目方案及推进项目的基本流程思路
  7. http://oldboy.blog.51cto.com/2561410/1764820
  8. 附加:高级要求:
  9. 生成html页面,并设置超链接。
  10. 结果如下:
  11. http://oldboy.blog.51cto.com/2561410/1862041

 解答:

  1. #!/bin/sh
  2. Uri="http://blog.51cto.com/oldboy/p"
  3. Html_list=/tmp/html/oldboy_blog.html
  4. [ ! -d /tmp/html ] && mkdir -p /tmp/html
  5. for i in {1..29}
  6. do
  7. curl -s $Uri$i|grep -A 5 "time fl"|sed '/^.*zan fr.*/,+2d'|sed 's#^--$#<br>#g'|sed 's#<a.*fl">发布于:#<a>#g'|sed 's#<sp.*an>##g' >>$Html_list
  8. echo '<br>' >>$Html_list
  9. done

 

 

文章转载自:http://www.pythonheidong.com/blog/article/2870/

原文链接:http://www.cnblogs.com/xiongbatianxiaskjdskjdksjdskdtuti/p/11356767.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号