Shell+Linux命令实现日志分析

这篇文章主要介绍了Shell+Linux命令实现日志分析,本文给出了结合grep命令、awk命令等实现了几个常用的日志分析统计长命令,需要的朋友可以参考下
 
<iframe id="cproIframe_u1892994_2" src="http://pos.baidu.com/acom?adn=3&amp;at=231&amp;aurl=&amp;cad=1&amp;ccd=24&amp;cec=GBK&amp;cfv=15&amp;ch=0&amp;col=zh-CN&amp;conBW=0&amp;conOP=1&amp;cpa=1&amp;dai=2&amp;dis=0&amp;ltr=http%3A%2F%2Fwww.baidu.com%2Fs%3Fie%3Dutf-8%26f%3D8%26rsv_bp%3D1%26tn%3Dbaidu%26wd%3Dlinux%2520shell%25E8%2584%259A%25E6%259C%25AC%25E7%25BB%259F%25E8%25AE%25A1%25E6%2597%25A5%25E5%25BF%2597%26rsv_pq%3Dab09c94d0000c40d%26rsv_t%3D5133CLAHqO%252Bg0QsIqoPdn1tAWU0Hqwaxr6bnS45%252B78YEUQsXmCByxSi7nCI%26rsv_sug3%3D38%26rsv_sug1%3D18%26rsv_sug2%3D0%26inputT%3D11892%26rsv_sug4%3D12523&amp;ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F53954.htm&amp;lu_161=0&amp;lunum=6&amp;n=jb51_cpr&amp;pcs=1349x630&amp;pis=10000x10000&amp;ps=516x209&amp;psr=1366x768&amp;pss=1349x517&amp;qn=fe0261cb0794c1c1&amp;rad=&amp;rsi0=580&amp;rsi1=90&amp;rsi5=4&amp;rss0=%23FFFFFF&amp;rss1=%23F7FCFF&amp;rss2=%230000ff&amp;rss3=%23444444&amp;rss4=%23008000&amp;rss5=&amp;rss6=%23e10900&amp;rss7=&amp;scale=&amp;skin=tabcloud_skin_3&amp;stid=5&amp;td_id=1892994&amp;ti=Shell%20Linux%E5%91%BD%E4%BB%A4%E5%AE%9E%E7%8E%B0%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90_linux%20shell_%E8%84%9A%E6%9C%AC%E4%B9%8B%E5%AE%B6&amp;titFF=%E5%AE%8B%E4%BD%93&amp;titFS=12&amp;titTA=left&amp;tn=text_default_580_90&amp;tpr=1429002892078&amp;ts=1&amp;version=2.0&amp;xuanting=0&amp;dtm=BAIDU_DUP2_SETJSONADSLOT&amp;dc=2&amp;di=u1892994&amp;tt=1429002892001.855.922.922" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" align="center,center" width="580" height="90"></iframe>

一、列出当天访问次数最多的IP
命令:

复制代码代码如下:
cut -d- -f 1 /usr/local/apache2/logs/access_log |uniq -c | sort -rn | head -20

原理:
复制代码代码如下:

       cut
       -d, --delimiter=DELIM
              use DELIM instead of TAB for field delimiter
              表示用-分割,然后-f 1 
       -f, --fields=LIST
              select only these fields;  also print any line that contains  no
              delimiter character, unless the -s option is specified
           表示打印第一部分,就是ip
 uniq 是将重复行去掉, -c表示前面前面加上数目,
       sort -rn 就是按照数字从大到小排序,
       head -20取前面20行
       
最后打印的结果大概是这样:
复制代码代码如下:
   217 192.114.71.13
   116 124.90.132.65
   108 192.114.71.13
   102 194.19.140.96
   101 217.70.34.173
   100 219.235.240.36

 

以下是其他一些分析日志的shell用法:

1、查看当天有多少个IP访问:

复制代码代码如下:
awk '{print $1}' log_file|sort|uniq|wc -l

 

2、查看某一个页面被访问的次数;

复制代码代码如下:
grep "/index.php" log_file | wc -l

 

3、查看每一个IP访问了多少个页面:

复制代码代码如下:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file

 

4、将每个IP访问的页面数进行从小到大排序:

复制代码代码如下:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n

 

5、查看某一个IP访问了哪些页面:

复制代码代码如下:
grep ^111.111.111.111 log_file| awk '{print $1,$7}'

 

6、去掉搜索引擎统计当天的页面:

复制代码代码如下:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l

 

7、查看2009年6月21日14时这一个小时内有多少IP访问:

复制代码代码如下:
awk '{print $4,$1}' log_file | grep 21/Jun/2009:14 | awk '{print $2}'| sort | uniq | wc -l

猜你喜欢

转载自kavy.iteye.com/blog/2202358