使用 tail -f 命令进行分页

使用 tail -f 命令进行分页

我正在尝试使用分页来尾随文件:

tail -f foo.txt | more

这个过程很好,直到文件被注入了 200 行,当这种情况发生时,tail命令的本质是转到文件末尾,此时我就无法跟踪日志了。

有办法避免这种情况吗?

答案1

改用tail -f log.txt | less。根据我的快速测试,它会更新以推进新信息,然后您可以向上或向下。即,较少的更新作为输出缓冲区,而不是静态引用原始内容。

或者,稍微改变一下,减少移动部件(没有管道)——Dolphin 在评论中提到的解决方案——less +F log.txt是一个不错的选择。以下是手册页的内容F

   F      Scroll  forward, and keep trying to read when the end of file is reached.
          Normally this command would be used when already at the end of the  file.
          It  is  a  way to monitor the tail of a file which is growing while it is
          being viewed.  (The behavior is similar to the "tail -f" command.)

换句话说,这对于这个案例来说是完美的。

不过,它有一个问题,让我没能把它列为我的最爱。添加类似功能less +F daemon.log | egrep session不起作用。

我继续在日常命令行工作中使用管道的一个原因是,当与历史记录结合使用时,可以非常轻松地返回、添加管道并根据数据指示更改命令的行为。如果tail -f log由于屏幕上滚动的数据量太大而导致简单命令无法正常工作,请将管道设置为较少。如果数据量太大,但您看到了要查找的行的提示,请将管道添加到 grep 或 egrep。然后链接 awk、sed 或 cut,以获得您想要的结果。

这也是为什么“不必要地使用 cat”经常受到荒谬批评的原因。如果您 cat 了一个文件,但发现它出乎意料地长,请使用 shell 历史记录,按向上箭头并对其进行其他操作。快速修复?只需添加cat foo | more。它有多长?向上箭头和| wc。有多少行带有“pangloss”?添加| egrep pangloss | wc。如果您可以启动命令并确切知道您的调查将进行到哪里,那就太好了,但是如果您不能,历史记录和管道是完成任务的好方法。即使它很丑陋,也可以cat file | more | egrep something正常工作。

答案2

我的解决方案是这样的:

less some-file.log

然后,less我按下Shift+ F。这将导致less文件更新。要向后滚动,只需按下Ctrl+ C

答案3

用这种方法其实不行。你尝试使用的程序都限制数据,但限制方式却大不相同。

尝试

watch -n 5 tail  -n 40 /var/log/thingy

这将每 5 秒更新一次尾部显示。

这是我能得到的最接近的答案,但这不是你想要的。

问题是 more 需要一次性读取所有数据,而 tail 仍在继续传输。如果您只是想反复阅读最后几行,watch 就可以了。如果您只想保留日志并向后滚动,那么请使用控制台后台缓冲区。

在 X 中这将是滚动条,如果你在真正的控制台上,那么你必须使用类似的东西:

kernel /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128在启动时增加尺寸。然后您可以使用 Shift UP 和 Shift Down 滚动。

在 X 中这要容易得多。只需

tail -f /var/log/something.log并来回滚动。您可以按 Enter 键来创建当前位置的视觉中断。

在 VTY 中,您需要使用向上移动和向下移动来完成相同的操作,如果您需要更多向后滚动,请使用fbcon=scrollback:128启动时的参数。

相关内容