可用下面五种方式来查看:
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)来更改这个数字。
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行。
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 地址及其出现次数。
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行。