这篇文章主要介绍了Shell+Linux命令实现日志分析,本文给出了结合grep命令、awk命令等实现了几个常用的日志分析统计长命令,需要的朋友可以参考下


<iframe id="cproIframe_u1892994_2" src="http://pos.baidu.com/acom?adn=3&at=231&aurl=&cad=1&ccd=24&cec=GBK&cfv=15&ch=0&col=zh-CN&conBW=0&conOP=1&cpa=1&dai=2&dis=0&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&ltu=http%3A%2F%2Fwww.jb51.net%2Farticle%2F53954.htm&lu_161=0&lunum=6&n=jb51_cpr&pcs=1349x630&pis=10000x10000&ps=516x209&psr=1366x768&pss=1349x517&qn=fe0261cb0794c1c1&rad=&rsi0=580&rsi1=90&rsi5=4&rss0=%23FFFFFF&rss1=%23F7FCFF&rss2=%230000ff&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=tabcloud_skin_3&stid=5&td_id=1892994&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&titFF=%E5%AE%8B%E4%BD%93&titFS=12&titTA=left&tn=text_default_580_90&tpr=1429002892078&ts=1&version=2.0&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=u1892994&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