统计nginx访问日志前十名

06-14 1223阅读

可用下面五种方式来查看:

1.

grep -oP ‘^\S+’ access.log |sort -rn |uniq -c |sort -rn |head

命令详细讲解:

grep:

是一个文本搜索工具,允许你在文件中搜索特定的模式。

-o:

只输出匹配的部分,而不是整行。

-P:

使用Perl兼容的正则表达式。

‘^\S+’:

正则表达式,其中:

^:

表示行的开始。

\S:

匹配任何非空白字符。

+:

表示前面的字符(即\S)出现一次或多次。

sort:

对文本进行排序。

-r:

逆序排序(从大到小)。

-n:

根据数字值进行排序(而不是根据字符的ASCII值)。

uniq:

报告或省略重复的行。

-c:

在每行前加上该行在输入中出现的次数。

head:

输出文件的前几行。默认情况下,它会输出前10行,但可以通过命令行参数(如head -n 5)来更改这个数字。

统计nginx访问日志前十名

awk ‘{print $1}’ access.log | sort -rn | uniq -c |sort -rn |head

命令详细讲解:

Awk:

是一个强大的文本分析工具。

{print $1}

是一个awk命令,表示打印每行的第一个字段(默认字段分隔符是空格或制表符)。

Sort:

命令用于对文本行进行排序。

-r:

选项表示反向排序(从大到小)。

-n:

选项表示按数字进行排序。

Uniq:

命令用于报告或省略重复的行。

再次使用sort命令进行排序。

这一次也是按数字从大到小排序,但这次是基于前面uniq命令输出的行前面的计数。

-c:

选项表示在输出行前面加上该行在输入文件中出现的次数。

默认情况下,head会输出文件的前10行。

统计nginx访问日志前十名

cat access.log awk ‘{print $1}’ | sort -rn | uniq -c | sort -rn | head

与awk ‘{print $1}’ access.log | sort -rn |uniq -c |sort -c |head相同

命令详细讲解:

cat access.log:

cat 命令用于显示文件的内容。在这里,它用于显示 access.log 文件的内容。

awk ‘{print $1}’:

awk 是一个强大的文本处理工具。在这个命令中,它用于打印每一行的第一个字段(默认情况下,字段由空格或制表符分隔)。这通常用于提取日志文件中的 IP 地址,假设 IP 地址是每一行的第一个字段。

sort:

sort 命令用于对输入行进行排序。默认情况下,它按照字母顺序进行排序。但请注意,因为我们还没有应用 uniq 命令,所以这里的排序可能对于后续步骤来说并不是必需的,除非 access.log 中的 IP 地址已经按某种方式排序,并且你想保持这种排序。

uniq -c:

uniq 命令用于报告或省略文件中的重复行。-c 选项在输出行前加上该行在输入中出现的次数。这在这个上下文中很有用,因为它允许我们计算每个 IP 地址在日志中出现的次数。

sort -rn:

再次使用 sort 命令,但这次是为了对 uniq -c 的输出进行排序。-r 选项表示反向排序(从大到小),-n 选项表示按照数值而不是字符串进行排序。这样,最常见的 IP 地址(即出现次数最多的)将首先出现。

head:

head 命令用于输出文件的前几行。默认情况下,它输出前10行。在这个命令中,它用于只显示最常见的10个 IP 地址及其出现次数。

统计nginx访问日志前十名

awk ‘{ip[$1]++} END {for(i in ip) print ip[i],i |“sort -rn | head”}’ access.log

命令详细讲解:

awk是一个强大的文本处理工具,常用于模式扫描和文本/数据提取。

‘{ip[$1]++}’:

这是一个awk的动作块,它会在处理每一行时被执行。这里,$1表示当前行的第一个字段(默认字段分隔符是空格或制表符)。ip[$1]++将第一个字段(例如IP地址)作为数组的索引,并每次遇到相同的字段值时增加该索引对应的计数。

END {for(i in ip) print ip[i],i |“sort -rn | head”}:

这是awk的END块,它会在所有输入行都被处理完后执行。这里,for(i in ip)遍历前面创建的数组ip,其中i是数组索引(即IP地址),ip[i]是对应的计数。print ip[i],i打印每个IP地址及其出现次数。

但是,这里有一个特殊的部分:|后面跟着的是一个命令字符串,这表示将print的输出作为输入传递给这个命令字符串。在这个例子中,输出被传递给sort -rn | head命令,即先按数字进行反向排序(从大到小),然后只输出前10行。

统计nginx访问日志前十名

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]