Shell+Linux命令实现日志分析
一、列出当天访问次数最多的IP
命令:
cut-d--f1/usr/local/apache2/logs/access_log|uniq-c|sort-rn|head-20
原理:
cut -d,--delimiter=DELIM useDELIMinsteadofTABforfielddelimiter 表示用-分割,然后-f1 -f,--fields=LIST selectonlythesefields; alsoprintanylinethatcontains no delimitercharacter,unlessthe-soptionisspecified 表示打印第一部分,就是ip uniq是将重复行去掉,-c表示前面前面加上数目, sort-rn就是按照数字从大到小排序, head-20取前面20行
最后打印的结果大概是这样:
217192.114.71.13 116124.90.132.65 108192.114.71.13 102194.19.140.96 101217.70.34.173 100219.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(ainS)printa,S[a]}'log_file
4、将每个IP访问的页面数进行从小到大排序:
awk'{++S[$1]}END{for(ainS)printS[a],a}'log_file|sort-n
5、查看某一个IP访问了哪些页面:
grep^111.111.111.111log_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|grep21/Jun/2009:14|awk'{print$2}'|sort|uniq|wc-l