我想查看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/syslognewlinecount的新实例中减去该值。然后它tails(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

当心
这是一个非常初级的脚本,只能跟踪一个文件。如果要将此脚本扩展到多个文件,请查看associative arrays。使用关联数组,您可以通过将key作为文件名,value作为前一行计数来跟踪多个文件。
也要注意,随着时间的推移syslog文件可以在文件达到预定大小(可能是10MB)后存档,并且此脚本不考虑存档过程。

关于linux - 自上次查看以来如何查看系统日志条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58126000/

10-12 03:57