我想读取整个文件并使其等待输入,就像tail -f
显示完整文件一样。
这个文件的长度总是会改变的,因为这是一个.log
文件。
如果我不知道文件的长度,我该怎么办?
答案1
有一种更好的方法可以实现这一目标:
less +F <file>
它将向您显示整个文件,具有完整的功能less
并将等待新的输入。如果您想停止等待输入并阅读特定部分,您可以使用 停止^C
并继续F
。
该F
命令始终在 中可用less
,如果您决定在 中打开文件时观察更改less
,则点击F
将其打开。谢谢希尔吉尔特迪埃斯特夫和通配符指出这一点。
答案2
tail
允许您添加-n
以指定从末尾开始显示的行数,它可以与 结合使用-f
。如果参数以-n
开头,+
则表示从开头开始的行数(0
并1
显示整个文件,2
指示跳过第一行,如 @Ben 所示)。所以就这样做:
tail -f -n +0 filename
如果您的日志文件被轮换,您可以添加--retry
(或按照@Hagen的建议-f and --retry
合并-F
)
另请注意,在图形终端中,您可以使用鼠标和PageUp/PageDown滚动回历史记录(假设您的缓冲区足够大),即使您使用Ctrl+C退出,此信息仍保留在那里tail
。如果你使用这个就不太方便了,而且据我所知,你必须使用键盘进行滚动,而且如果你忘记用 启动它,less
我不知道有什么方法可以防止取消初始化 termcap 。less
-X
答案3
watch
命令应该为你做这件事。
你也可以尝试
less +FG
您将有更多选项与less
命令滚动浏览您的文件,因为您说它是一个大文件。
答案4
除了 /u/Anthon 的答案之外,您还可以执行以下操作:
{ cat filename; tail -0f filename; }
tail 的选项-0
相当于-n 0
,意思是:显示 0 行。但-f
会显示新行。
你不需要牙套{ }
。我使用它们是因为有时您想以某种方式重定向文件描述符。例如:
{ cat ; tail -0f -; } < /var/log/messages
Ben Milwood 指出:您可能会遇到竞争情况,文件在操作结束cat
和操作开始之间增长tail
。但同样,这是一个需要学术解决方案的“学术”问题。