我想查看 Linux /var/log/syslog 中的条目,但我只想查看自上次查看以来的条目(最好创建一个 bash 脚本来执行此操作)。我想到的解决方案是获取 syslog 的副本并将其与我上次获取副本时进行比较,但这似乎不干净,因为 syslog 可能很大并且 diff 在其输出中添加了工件。我想也许会以某种方式直接在 syslog 上使用 tail,但是当我不知道自上次尝试以来添加了多少行时,我不知道该怎么做。有什么更好的想法吗?我希望能够将结果重定向到一个文件,以便我以后可以交互式 grep 查找感兴趣的特定部分。
Linux 有一个wc
命令可以计算文件中的行数,例如
wc -l /var/log/syslog
. 下面的 bash 脚本将wc -l
命令的输出存储在一个名为./prevlinecount
. 每当你想只是在一个文件中的新线将其获取的价值./prevlinecount
,并减去一个新的实例此值wc -l /var/log/syslog
叫newlinecount
。然后,它tail
š (newlinecount - prevlinecount)
。
#!/bin/bash
prevlinecount=`cat ./prevlinecount`
if [ -z $prevlinecount ]; then
echo `wc -l $1 | awk '{ print $1 }' > ./prevlinecount`
tail -n +1 $1
else
newlinecount=`wc -l $1 | awk '{print $1}'`
tail -n `expr $newlinecount - $prevlinecount` $1
echo $newlinecount > ./prevlinecount
fi
请注意,这是一个非常简陋的脚本,它只能跟踪一个文件。如果您想将此脚本扩展到多个文件,请查看关联数组。使用关联数组,您可以通过将key
用作文件名并value
作为前一行计数来跟踪多个文件。还要
注意,随着时间的推移,syslog
文件可以在文件达到预定大小(可能是 10MB)后存档,并且此脚本不考虑存档过程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句