如何使用 Linux / Bash 检查在过去 10 秒内向选定日志文件添加了多少行?
这是一次性使用,不会在后台运行。文件不包含任何有关时间的信息。
我也不需要这个任意的 -> 我可以选择我想跟踪添加的行数的时刻,并这样做一段时间。
谢谢!
答案1
它是一次性使用,不能在后台运行。文件不包含任何有关时间的信息。
那么就困难得多了,没有一个实用程序可以立即做到这一点,因为如果它这样做了,就意味着它在 10 秒前就知道了文件的内容。但是,“10 秒”并没有什么神奇之处,这意味着写入数据会保留/缓冲这么长时间(除非有一些关于什么它写入日志文件的情况以及写入时间)。
您最好的选择是:
- 运行 Laykes 给出的命令或类似的等效命令
tail -s 10 -f FILE
,以便在 10 秒内输出文件的内容。 - 标记日志文件本身:
echo '-- MARKER --' >> FILE
然后检查您想要的内容。
但无论哪种方式,您都需要提出自己的解决方案。
答案2
您可以设置一个作业来记录文件中的时间和行数。另一种方法是在日志文件中插入时间戳,然后检查时间戳之间的行数。
答案3
除非您知道需要提前执行此操作(这将允许您在正确的时间复制文件或快照文件系统),否则您无法执行此操作。即使是版本化的文件系统(这种情况很少见)也不会记录更改的每个字符或行作为它会改变。你所能期望实现的最好结果就是说“最后一次改变是这个数据,它发生在时间 X 和时间 Y 之间”。
答案4
根据 Zoredache 的回答:看起来超时也会杀死管道,但您仍然可以将输出转发到某个临时文件,然后计算其中的行数。
timeout 2 tail -f logfile >/tmp/outp ; cat /tmp/outp | wc -l
或佩戴手表
watch -n3 "bash -c 'timeout 2 tail -f logfile >/tmp/outp ; cat /tmp/outp | wc -l'"
rm /tmp/outp