使用 bash 在线监控用户,并过滤掉机器人和资产



我有一个生成原始访问日志的网站。我的网络主机没有很好的在线查看用户支持,所以我转向了SSH。现在我正在使用以下 bash 脚本来查看谁在线:

watch tail -50 access.log

但是那里有很多垃圾。有一个机器人每 5 分钟访问一次我的网站,每当有人加载页面时,日志中也会显示一堆资产(图像、JS、CSS)。

有没有办法尾随文件的末尾,并过滤掉包含某些单词的行,例如Alexabot.css.png.jpg.js

此外,如果命令/脚本从文件末尾向后工作,直到找到 50 行与过滤条件不匹配,而不是只取最后 50 行并抑制该组中的垃圾邮件,这将是理想的。

我研究了 awk 进行过滤,但我被困住了,因为我不知道如何将 awk 与尾巴结合起来。

您可以将grep-v一起使用,反转匹配,

watch tail -50 access.log | grep -v -E '(Alexabot|.css|.png|.jpg|.js)'

-E标志用于启用Extended Regular Expression (ERE)语法以允许匹配以|分隔的多个字符串

您还可以尝试在将流馈送到grepas 之前禁用stdbuf -oL输出缓冲

watch tail -50 access.log | stdbuf -oL grep -v -E '(Alexabot|.css|.png|.jpg|.js)'

这是否定多个字符串awk版本。

watch tail -50 access.log |awk '!/Alexabot|.css|.png|.jpg|.js/'

或者,如果要持续监视。

stdbuf -oL tail -f access.log | stdbuf -iL awk '!/Alexabot|.css|.png|.jpg|.js/'

最新更新