shell习题-16
题目要求
计算文档a.txt中每一行中出现的数字个数并且要计算一下整个文档中一共出现了几个数字。例如a.txt内容如下: 参考答案#!/bin/bash sum=0 while read line //新知识点 可以读取每行 do line_n=`echo $line|sed ‘s/[^0-9]//g‘|wc -L` echo $line_n sum=$[$sum+$line_n] done < $1 //其中$1是 后面跟的文件 echo "sum:$sum" 题目要求有两台Linux服务器A和B,假如A可以直接ssh到B,不用输入密码。A和B都有一个目录叫做/data/web/ 这下面有很多文件, 当然我们不知道具体有几层子目录,假若之前A和B上该目录下的文件都是一模一样的。 但现在不确定是否一致了。固需要我们写一个脚本实现这样的功能,检测A机器和B机器/data/web/目录下文件的异同,我们以A机器上的文件作为标准。 比如,假若B机器少了一个a.txt文件,那我们应该能够检测出来,或者B机器上的b.txt文件有过改动,我们也应该能够检测出来(B机器上多了文件不用考虑)。 参考答案#!/bin/bash dir=/data/web #判断是否存在MD5.list文件 存在的话删除 [ -f /tmp/md5.list ] && rm -f /tmp/md5.list #将满足的文件名写入到一个文件中 find $dir/ -type f > /tmp/file.list while read line do # 将md5码和文件名写入到md5列表中 md5sum $line >> /tmp/md5.list done < /tmp/file.list #将md5列表同步到b服务器,进行比较 scp /tmp/md5.list B:/tmp/ #判断是否存在check_md5.sh,存在删除 [ -f /tmp/check_md5.sh ] && rm -f /tmp/check_md5.sh #cat > .sh << eof eof cat >/tmp/check_md5.sh << EOF #!/bin/bash dir=/data/web #所有的反引号都需要脱义 #md5的个数 n=`wc -l /tmp/md5.list|awk ‘{print $1}‘` for i in `seq 1 $n` do #获取md5文件的名字 file_name=`sed -n "$i"p /tmp/md5.list |awk ‘{print $1}‘` #获取md5 md5=`sed -n "$i"p /tmp/md5.list|awk ‘{print $2}‘` if [ -f $file_name ] then #b服务器的md5值 md5_b=`md5sum $file_name` #A服务器和B服务器md5值比较 if [$md5_b != $md5 ] then echo "$file_name changed." fi else echo "$file_name lose." fi done EOF #将check_md5.sh同步到b服务器 scp /tmp/check_md5.sh B:/tmp/ #在b服务器执行check_md5.sh ssh B "/bin/bash /tmp/check_md5.sh" 题目要求写一个脚本,检测你的网络流量,并记录到一个日志里。需要按照如下格式,并且一分钟统计一次(只需要统计外网网卡,假设网卡名字为eth0): 2017-08-04 01:12 主要知识点 sar -n DEV 1 59 参考答案#!/bin/bash logdir=/tmp/sar_log file=$logdir/`date +%d%H`.log t=`date +"%F %H:%M"` [ -d $logdir ] || mkdir -p $logdir LANG=en sar -n DEV 1 5 |grep eth0 |grep "Average" > /tmp/sar.tmp exec >>$file echo "$t" #n回车 awk ‘{print "eth0 input:",$5*8000"bps""n""eth0 output:",$6*8000"bps"}‘ /tmp/sar.tmp echo "#### ###################" 题目要求一台机器负载高,top查看有很多sh的进程,然后top -c查看可以看到对应的进程命令是sh -c /bin/clearnen.sh 。 经分析后发现是因为该脚本执行时间太长,导致后续执行时,上次的脚本还未执行结束。写一个脚本批量杀死所有sh的进程。 ps aux|grep clearnen.sh|awk ‘{print $2}‘|xargs kill -9 参考答案#!/bin/bash for pid in `ps aux |grep clearnen.sh |awk ‘{print $2}‘` do echo $pid kill -9 $pid done 题目要求写一个脚本判断你的Linux服务器里是否开启web服务?(监听80端口)如果开启了,请判断出跑的是什么服务,是httpd呢还是nginx又或者是其他的什么? 参考答案#!/bin/bash n=`netstat -lntp |grep ‘:80 ‘|wc -l` if [ $n -eq 0 ] then echo "It not listen port 80" else ser=`netstat -lntp |grep ‘:80 ‘|awk -F ‘/‘ ‘{print $NF}‘|sed ‘s/ //g‘` echo "It is listenning port 80,and the service is $ser." fi (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |