树莓派Debian Buster上实时提取日志中query[A]相关信息
实时提取DNS查询日志的实现方案(树莓派Debian Buster)
嘿,我来帮你搞定这个实时日志提取的需求!在树莓派的Debian Buster系统上,我们可以用tail+awk的组合轻松实现,比单独折腾sed要高效得多,而且完全满足实时输出的要求。
直接可用的命令
你只需要在终端里运行这条命令就行:
tail -f /home/pi/test.txt | awk '/query\[A\]/ {split($3, time, ":"); print time[1] ":" time[2], $6}'
命令拆解说明
我给你拆解开每个部分,方便你理解和调整:
tail -f /home/pi/test.txt:tail -f是实时跟踪文件新增内容的神器,它会持续监控test.txt,一旦有新日志写入就立刻输出,完美替代手动轮询的逻辑。awk '/query\[A\]/':awk会过滤出包含query[A]的行,这里的\[和\]是转义符,因为方括号在正则表达式里是特殊字符,必须转义才能匹配字面意义的query[A]。split($3, time, ":"):把日志行的第3个字段(也就是时间部分,比如11:43:24)按冒号分割成数组time,time[1]就是小时,time[2]是分钟。print time[1] ":" time[2], $6:输出拼接好的时分(比如11:43)和第6个字段(也就是你要的URL,比如captive.g.aaplimg.com),正好符合你想要的格式。
额外实用扩展
如果需要把实时输出同时保存到另一个文件(比如后续分析用),可以加个tee命令:
tail -f /home/pi/test.txt | awk '/query\[A\]/ {split($3, time, ":"); print time[1] ":" time[2], $6}' | tee /home/pi/dns_queries.log
要是希望这个监控进程在后台持续运行(哪怕关闭终端也不停止),可以用nohup:
nohup tail -f /home/pi/test.txt | awk '/query\[A\]/ {split($3, time, ":"); print time[1] ":" time[2], $6}' > /home/pi/dns_queries.log 2>&1 &
之后可以用ps aux | grep tail查看进程,用kill命令终止它。
格式适配提示
如果你的日志行格式有变化(比如URL不在第6个字段),只需要把命令里的$6改成对应的字段序号就行。比如你可以先运行cat /home/pi/test.txt | awk '/query\[A\]/ {print $0}'查看完整行,数清楚URL是第几个字段。
内容的提问来源于stack exchange,提问作者Kallum R
相关产品推荐
相关产品推荐

