linux-shell面试题 之三推荐

由于工作的关系,收集了很多的shell面试题,有些比较有意思,比如我在Shell图形化监控网络流量中所应用的实例。有些纯粹是为折磨人用的题目。有的看完会心一笑,有的看了之后会以为是几年前开发的面试题。不知道是会的人多了,还是有意的为难,想起一句话,庙小妖风大,水浅那个啥多。 多说一句,解决的方法有很多种,也许这里给出的答案并不是最优的,但应该是比较容易解释,容易理解的。具体是什么公司的面试题就不说了,毕竟是人家的隐私。 这篇内容中所涉及的知识点比较多,设置的陷阱更是不少,可以感觉到出题人的挖空心思,可以考验出答题人对于系统,对于实际环境的管理能力及功底。 1.如下是对api接口日志的截取,存放在check.log文件中22:57:36|check|por1|117.136.15.67|4|username|fail|5|29|22:57:36|check|por1|183.1.94.215|4|username|succ|1644841971|14|22:57:36|check|pro2|0.0.0.0| |username|succ|162885433|6|22:57:36|check|por2|0.0.0.0|9|username|fail|-4038|0|22:57:36|check|por3|120.11.82.19|2|username|fail|5|49|22:57:36|check|por4|172.16.86.82|0|username|succ|1548062613|1|22:57:36|check|por2|123.125.156.135|9| |succ|1632786393|1|22:57:36|check|por5|124.231.21.100|5|username|succ|224803739|3|22:57:36|check|por4|172.16.86.82|0|username|succ|1505887155|1|22:57:36|check|por2|0.0.0.0|9|username|succ|1343846051|1|22:57:36|check|por6|113.193.202.138|8|username|succ|1729273615|1|22:57:36|check|por6|116.75.149.20|8|username|succ|1729981552|1|22:57:36|check|por5|116.5.164.94|5|username|succ|214405328|1|22:57:36|check|por2|0.0.0.0|9|username|succ|1433162137|1|22:57:36|check|por3|218.69.6.30|5|username|succ|28725136|42|22:57:36|check|por2|0.0.0.0|8| |fail|5|4|22:57:36|check|por5|123.115.102.222|5|243905232|succ|243905232|1|22:57:36|check|por4|172.16.86.82|0|1011711900|succ|1011711900|39|日志各字段代表的意义如下:时间|接口名称|使用该接口的产品名称|调用接口的IP地址|用户类型|用户账号名称|接口返回结果(succ or fail)|当接口返回结果为“succ”时,该字段为用户唯一编号;当接口返回结果为“fail”时,该字段为接口返回的错误代号|接口执行时间(毫秒级别)问题:请使用shell命令的组合得到每个产品调用该接口成功时接口的平均执行速度,并按照执行速度由低到高排序(注:用户类型和用户账号名称为空的访问不计算在内),以如下格式输出:pro1 :0.0714286pro2 :0.3333333pro3 :0.0238095pro4 :0.0731707pro5 :0.6pro6 :1一句话思路:有计算、有排序,awk是唯一选择。统计总数的同时,还要统计出现次数,最后进行计算。awk -F “|” ‘$(NF-3)~/succ/{por[$3]=por[$3]+$(NF-1);sum[$3]++}END{for(var in por)print var” :”por[var]/sum[var] | ” sort -k2 -nr”}’ check.log知识点:awk数组,awk管道,为避免不等长使用NF变量2.用一行命令实现:查找当前目录下(含子目录),文件内容中含有sina且文件名以”.config”结尾的文件一句话思路:批量按规则查找文件内容grepgrep -lr “sina” ./ | grep -P “(.*)(\.config$)”知识点:grep -r 递归查找,-P支持perl正则表达式3.用shell查询以“.”结尾的文件,并加上后缀“.ts”一句话思路:在之前的曾经有过批量修改扩展名的实例,但这次有所不同,使用find命令就可以搞定find ./ -name “*.” -exec mv {} {}ts \;知识点:find命令4.假定某个web服务器访问log其中一行如下:61.159.245.95 – – [30/Apr/2003:01:04:20 +0800] “GET / HTTP/1.1” 200 151 “http://www.baidu.com” “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; 360SE)”该LOG文件超过10万行,如果列出最后的10万行中请求最多前十位IP,显示如下的结果:119 211.101.169.200103 211.101.169.20650 61.149.38.24911 202.106.138.194请用一行命令显示出上面的结果一句话思路:之前有过类似的,这里不再赘述awk ‘{ip[$1]++}END{for(var in ip)print ip[var],var |”sort -nr|head -n10″}’ log5.linux下ifconfig命令显示结果如下:eth0 Link encap:Ethernet HWaddr 00:0C:29:AA:E6:44 inet addr:192.168.213.128 Bcast:192.168.213.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:feaa:e644/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:39962 errors:0 dropped:0 overruns:0 frame:0 TX packets:27038 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:35108954 (33.4 MiB) TX bytes:6573610 (6.2 MiB) Base address:0x2000 Memory:c9020000-c9040000lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1833 errors:0 dropped:0 overruns:0 frame:0 TX packets:1833 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4840659 (4.6 MiB) TX bytes:4840659 (4.6 MiB)执行如下命令/sbin/ifconfig eth0|grep ‘inet ‘|sed ‘s/^.*addr://g’|sed ‘s/ Bcast.*$//g’请写出命令的输出结果ip地址 犹豫了一下这个要不要写,在命令行里执行一下就行了。6.多线程/多进程 程序同时访问相同的资源(例如:同时向一个文件里写数据)需要注意些什么?至少注意文件锁,读锁与写锁7.写脚本实现,可以用shell,perl等。把文件B中有的,但是文件A中没有的所有行,保存为文件C,并统计C的行数diff B A | grep ” ” | sed ‘s/ //’ C8.脚本实现把/tmp/目录下所有创建超过7天的文件删除find /tmp -mtime +7 -exec rm -rf {} \;9.把1 2 3 4 5 6按如下格式输出123456如何实现echo 1 2 3 4 5 6 | sed “s# #\n#g”10.设计一个shell程序,在2012年12月23日凌晨3点备份并压缩前一天/svn目录的所有内容,存放在/root/bak目录里,且文件名为如下形式svn.2008.05.06.tar.gz,试写脚本。at 201212230300at find /svn -mtime +1 -and -mtime -2 -exec cp -r {} /root/bak \;at tar -czf svn.2008.05.06.tar.gz /root/bak 感谢何运涛同学,已经毕业的同学,薪水也不错。现在我们是同行了,这些题目是他帮忙整理的,原始版本都是照片,都是他一个一个字打上去的,尤其是第一题! 每天告诉自己一次,我真的很不错

linux-shell面试题 之三推荐

相关文章:

你感兴趣的文章:

标签云: