我正在尝试使用分页尾文件:
tail -f foo.txt | more
Run Code Online (Sandbox Code Playgroud)
这工作正常,直到文件被注入,比如说,注入 200 行,当这种情况发生时,tail命令的性质是转到文件末尾,那时我失去了跟踪日志的踪迹。
有没有办法避免这种情况?
使用tail -f log.txt | less来代替。在我的快速测试中,它会更新以前进到新信息,然后您可以向上或向下。即,较少更新作为输出缓冲区,而不是静态引用原始内容。
或者,使用较少的移动部件(无管道)进行轻微变化——Dolphin 在评论中提到的解决方案——less +F log.txt是一个不错的方法。以下是手册页的内容F:
Run Code Online (Sandbox Code Playgroud)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.)
换句话说,这非常适合这种情况。
它确实有一个问题阻止它成为我的最爱。添加 likeless +F daemon.log | egrep session不起作用。
我在自己的日常命令行工作中继续使用管道的一个原因是,当与历史结合使用时,返回、添加管道并根据数据指示更改命令的行为非常容易。如果tail -f log由于大量数据从屏幕上滚动而导致简单不起作用,请减少管道上的一巴掌。如果音量太大,但您看到了您正在寻找的行的提示,请向 grep 或 egrep 添加管道。然后链接 awk、sed 或 cut,以获得您想要的确切内容。
这也是为什么“不必要地使用猫”往往是一种荒谬的批评。如果您发现一个文件,但发现它出乎意料地长,请使用 shell 历史记录,点击向上箭头并对其进行其他操作。快速解决?只需添加cat foo | more. 多久了?向上箭头和| wc。“pangloss”有多少行?添加| egrep pangloss | wc. 如果您可以启动一个命令并确切知道您的调查将要去哪里,这很好,但如果您不能,历史和管道是完成工作的好方法。即使它很丑,也能cat file | more | egrep something正常工作。
我的解决方案是这样的:
less some-file.log
Run Code Online (Sandbox Code Playgroud)
然后,less我点击了Shift+ F。这会导致less文件更新。要向后滚动,只需按Ctrl+ C。