打开一个文本文件,让它自己更新


20

如何打开一个文本文件并让其更新?类似于top工作方式。

我想打开一个日志文件,并观看它的动态更新。

我刚刚尝试过:

$ tail error.log

但是刚刚意识到,它只是向您显示了日志文件中的行。

我正在使用RHEL 5.10


4
使用tail -f error.log
garethTheRed 2014年

嗯,tail正确的使用方法是吗?哇,我真的认为我不能使用它。我期待更长的表达。
Kevdog777 2014年

1
仅供参考,虽然tail 完成这项工作的工具,但实际上open a text file and let it update itself可以使用实现watch cat filename
克苏鲁2014年

1
@Cthulhu你的意思是watch cat filename类似的。watch filename将尝试执行filename
terdon

@terdon是的。
克苏鲁2014年

Answers:


29

您正在寻找tail -f error.log(来自man tail):

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, and --fol‐
          low=descriptor are equivalent

这样您就可以观看文件并查看对其所做的任何更改。


这不会消耗太多资源吗?
Kevdog777

1
@ Kevdog777不是真的没有。据推测,它只是每隔几秒钟重新打开一次文件以进行更新。这是您要做的经典方法。
terdon

1
@terdon,它只会通过重新打开(可以重新打开)-F。有了-f它就每秒读取一次。就像一个while cat; do sleep 1; done < file。看到inotail在Linux一个更反应性尾(用途inotify知道文件被修改时)。
斯特凡Chazelas

@StéphaneChazelas:我相信它的效率要高得多。我敢打赌它会使用select或poll来查看fd是否可读,然后休眠直到fd上有可用数据为止。虽然我可能完全错了。
马丁·约克

1
@LokiAstari,您无法获得每秒比read系统调用更高的效率。“读” selectpoll常规文件上的内容始终会返回true,因为read()从不阻止常规文件上的内容,因此无法正常工作。话虽如此,GNU tail现在inotify在Linux上使用,因此inotail不再需要。
斯特凡Chazelas

20

使用“较少”代替“尾部”进行回滚和搜索

您可以使用tail -f error.log或更好的方法:tail -F error.log

但是,如果您想向后滚动文件,那不是很有用。

less +F error.log

您具有的功能tail -f
但可以 通过+ 中断新输入的读取。CtrlC

然后,您将进入正常less模式,在该模式下,
您可以向后滚动以查看Up/ 可能错过的内容,Down
而且,您可以使用Left/ 来读取较长的日志文件行而无需进行换行Right

搜索并仅显示匹配的行

您也可以使用搜索正则表达式/?后退nN下一个/上一个。

对于日志文件非常有趣的是,您可以使用来隐藏所有不匹配的行以进行搜索&,仅过滤出匹配项。

命令行上的键

随着Fless,你不断tail -f样模式。
+命令行less +F是指“按这些键开始少后直接”。

因此,我们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.)

另请参阅multitail是否需要观看多个日志文件。


谢谢,但是tail -f error.log非常适合我的需求。日志文件仅每小时更新一次,因此足以供我使用:-)
Kevdog777 2014年

1
确保下次记住它;)
Volker Siegel 2014年

most也具有的tail -f模式F
斯特凡Chazelas

@StéphaneChazelas对,谢谢!嗯...我记得有人感谢我most前一段时间提到的...而我忘记了。
Volker Siegel 2014年

@StéphaneChazelas但是,most似乎没有较少的过滤器功能&仅显示匹配的行吗?通常,日志文件中的一项有用功能。
Volker Siegel 2014年

5

使用-f选项tail

-f,--follow [= {name | descriptor}]在文件增长时输出附加数据;-f,-follow和--follow = descriptor等效

或者F在里面使用命令less

   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 mon‐
          itor the tail of a file which is growing while it is being viewed.  (The behavior is similar to the "tail -f" command.)

这个答案有什么新内容?
bluefoggy 2014年

1
我不明白你在问什么。这是该问题的第二个答案,也是第一个提到的问题less
Arkadiusz Drabczyk 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.