Bash脚本日志文件连续显示到屏幕

82

我正在创建一个写入日志文件的应用程序,需要知道如何在Linux/Bash中不断地将日志文件实时显示在屏幕上(每次新行添加到日志都会更新屏幕)。

例如,假设我想要将运行日志 apache/error.log 不断推送到屏幕(ssh终端),并持续更新。


http://unix.stackexchange.com/questions/45626/output-file-contents-while-they-change - Ciro Santilli OurBigBook.com
5个回答

126

尝试使用tail命令:

tail -f filename

2
现在我感觉自己像个白痴。我经常使用tail命令(只是没有使用-f参数)。man tail本应是我的好朋友。谢谢,这正是我要找的!当允许时(9分钟),我会接受这个答案。 - Aaron Murray
这比编写脚本还要好 :) (虽然也可以添加到脚本中) - Aaron Murray
2
通过使用--follow=name选项,您可以确保即使日志文件因cron作业的旋转/重新创建而被更改,仍然能够看到日志文件的内容。 - Cédric Julien
2
@aaron 提醒一下,因为你提到你正在创建应用程序,然后计划跟踪日志,所以要小心理解一个问题:仅仅因为你在应用程序中写了一行代码,并不意味着这行代码已经出现在日志中,因为输出可能会被缓冲。 - frankc

32
另一种解决方案是:
 less +F filename

或者只需使用less filename命令,并在其中键入“F”(按下shift+f)。它可能比tail更好,因为它允许你临时取消连续打印,向后查找某些内容,并再次使用"F" (shift+f)重新启用它。


我正在做笔记,这是一个很好的选择! - Aaron Murray
此外,它可以使用 -S 标志轻松截断长行,并允许您在左右滚动时查看它们。这比 tail -f file.log | cut ... 方法更为优越。 - sevko
我不理解这个键盘组合。是先按下 F 再按下 Shift 吗?还是同时按下它们?我尝试了,但没有任何区别。 - a06e
1
becko,谢谢你。只需输入“F”(Shift + F)- 按住Shift键,然后按f键,然后释放两个键。我编辑了我的答案。 - osgx

11

watch命令也可能会有用。

watch tail logfile

这将展示出日志文件的最后5行。它可以扩展到任何打印内容到标准输出的命令。

是的,使用tail -f是传统的解决方案,但根据您尝试执行的操作,这可能效果更好。


1
更多笔记。Linux = 皮猫的一百万种方法 :) 谢谢 - Aaron Murray

6

您还可以:

less filename.txt
and press 'F'

有一个特点 - 你可以随时使用CTRL-C并向后滚动日志,并使用'F'重新开始观看。


2
我对这里的问题响应时间感到非常惊讶,我尝试回答了几个问题,发现有很多人比我更快地刷新页面 :) 谢谢你的答案/提示。 - Aaron Murray

6
这个命令是用来实时查看远程主机上的日志文件。命令为:ssh {remotehost} tail -n0f {logfile}。这会一开始显示零行,并持续打印出现在文件中的任何新行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接