awk 是三剑客中一把利刃。
统计/var/log/secure日志中出现“Failed”关键词的IP地址及次数。
···
awk 是三剑客中一把利刃。
cat /var/log/secure
Jul 18 10:28:59 sshd[1377656]: Accepted password for root from 172.16.100.66 port 59750 ssh2
Jul 18 10:28:59 sshd[1377656]: pam_unix(sshd:session): session opened for user root by (uid=0)
Jul 18 10:38:20 sshd[1416681]: Accepted password for root from 172.16.100.21 port 62366 ssh2
Jul 18 10:38:20 sshd[1416681]: pam_unix(sshd:session): session opened for user root by (uid=0)
Jul 18 10:58:57 sshd[1502199]: Accepted password for root from 172.16.100.66 port 61038 ssh2
# 可以看到正常的一个访问日志记录,新建一个连接 故意输错密码,让日志记录一下
Jul 18 10:59:13 sshd[1503821]: Failed password for root from 172.16.100.21 port 63802 ssh2
#可以看到错误登陆时的日志记录是这样的。
那么就可以开始使用awk来实现二级标题中的需要了。
先给出命令再来解析
awk '/Failed/ {++ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]}'
- 敲黑板!
具体解释如下:
- cat /var/log/secure 打印输出整个secure日志内容。
- awk '/Failed/ {++ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]} 是awk的主要逻辑。
- /Failed/ 表示匹配包含"Failed"的行。
- $(NF-3) 取每个匹配行的倒数第3列,也就是客户端IP地址。
- ++ip[$(NF-3)] 将IP作为数组ip的键,对应的次数加1。
- END 块在文件结束时执行。
- for (i in ip) print i"="ip[i] 遍历数组ip,打印每个IP及出现次数。
cat /var/log/secure|awk '/Failed/ {++ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]}'
172.16.100.21=1
整体效果就是统计日志中出现“Failed”的IP次数。
这样就可以在之后写一些脚本中使用到啦。