本文共 1655 字,大约阅读时间需要 5 分钟。
最近打算换个工作环境,于是就投了几份简历,做运维的,笔试题是少不了的。
其中碰见最多的就是关于日志的统计和分析的题。
这里贴一个比较典型的出来,方便以后查阅。
原题如下:
某公司采用apache作为web服务器,其中记录客户端访问情况的日志名为,clientuser.log。日志内容如下图所示:
请写一个shell找出该日志中,访问量最大的ip。
这个题对于运维老手来说,写个shell也是非常轻松的。可是对于新手来说就有些难度了。
我的思路是这样的,首先找出IP段,然后进行数量统计,最后对统计数量排序,取出最大值。
明确了思路,就方便些shell了。
我是这样写的:
# cut -d " " -f 1 clientuser.log |uniq -c|sort -r|head -1|awk '{print $2}'
这里将命令分段执行,方便大家理解。
# cat clientuser.log
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 192.168.1.100 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 192.168.1.100 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 192.168.1.100 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 192.168.1.100 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 192.168.1.110 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 |
1、取出IP段:
# cut -d " " -f 1 clientuser.log
127.0.0.1 127.0.0.1 192.168.1.100 192.168.1.100 192.168.1.100 192.168.1.100 192.168.1.110 |
2、统计IP访问数量
# cut -d " " -f 1 clientuser.log |uniq -c
2 127.0.0.1 4 192.168.1.100 1 192.168.1.110 |
3、对统计好的IP访问数量排序
# cut -d " " -f 1 clientuser.log |uniq -c|sort -r
4 192.168.1.100 2 127.0.0.1 1 192.168.1.110 |
4、取出访问量最大的IP及访问数量
# cut -d " " -f 1 clientuser.log |uniq -c|sort -r|head -1
4 192.168.1.100 |
5、只显示IP
# cut -d " " -f 1 clientuser.log |uniq -c|sort -r|head -1|awk '{print $2}'
192.168.1.100 |
到此,我们就完成了此题的解答。
此题的解法不止这一种方法,还有很多,大家都来想一想吧。
本文转自 cyr520 51CTO博客,原文链接:http://blog.51cto.com/cyr520/768707
转载地址:http://exkra.baihongyu.com/