问题描述
通过命令行,我有一个想要跟踪的日志文件。
我想要的基本上是具有tail
,该tail
在更新日志时刷新,使文本向上滚动,因为新行添加到了日志文件中。
有没有不需要写一些代码就能做到的事情?
最佳方法
tail
具有-f
选项:
从man
页面:
-f, –follow[={name|descriptor}] output appended data as the file grows; -f, –follow, and –follow=descriptor are equivalent
因此,如果您键入:
tail -f [path_and_name_of_logfile]
-您将在终端中看到输出,因为日志文件本身已附加到该输出。
N.B. [path_and_name_of_logfile]
是参数,因此举一个例子:
tail -f /var/log/messages
如果与-n [number_of_lines]
选项结合使用,则可以从文件的最后[number_of_lines]行开始输出-例如
tail -n 10 -f /var/log/Xorg.0.log
某些程序会定期更改其日志文件,将旧文件移到新名称(例如log.0)并重新开始。
N.B. logrotate这样做是为了记录其他自己不执行的程序的文件。
重命名后,tail -f
将继续遵循旧文件。
tail -F
将按名称跟随文件,因此将切换为跟随新文件。
次佳方法
虽然tail
当然是执行此操作的常用方法,但应注意,less
具有相同的功能,有时更有用。
如果您使用less
打开文件,则可以按Shift
+ F
使文件跟随文件(即,它将显示新行,就像tail -f
一样)。您可以使用Ctrl
+ C
退出此模式
您也可以使用+F
选项启动less
,在这种情况下它将以该模式启动。一般来说,+
可用于将”keyboard-commands”交给less
,它将在启动时执行。
为此,使用less
的优点是,如果需要,您可以轻松地搜索文件或查看其他区域。例如,我经常使用日志文件来完成此操作。
第三种方法
是否
tail -f something.log
你想做什么?
第四种方法
tail
具有两个实现,可以跟踪和输出附加到文件的数据
-
遵循文件描述符
-
跟随具有特定名称的文件
对于参数-f
,--follow
和--follow=descriptor
,tail
遵循文件描述符。此方法允许在重命名过程中跟踪文件,但是在旋转文件时会停止跟踪(使用不同的文件描述符创建新文件)。
当跟随旋转的文件时,请使用--follow=name
或等于--follow=name --retry
的-F
参数。这样,tail
将定期重新打开文件以克服可能的旋转。