使用 tail -F 实时查看文件变化

Using tail -F to see a file changing in real-time

我有一个脚本可以收集不断输入的文件的大小。我将其大小回显到日志文件 (echo 'filesize is $size' > log.txt) 所以我只有最后的大小信息。所以,只有一行。

现在,在另一个终端中,我想尾随该日志文件以查看其大小实时增加。事实证明, tail -f path/to/file 给了我想要的输出,但它一直跳到下一行(我猜是预期的)。

所以,输出是这样的:

$ tail -F log.txt 2>/dev/null
filesize is 1.658 GB
filesize is 1.659 GB
filesize is 1.659 GB
filesize is 1.660 GB

我想要一些更像命令 "less" 的东西,其中您没有光标返回。也许更好的例子是 "mtr",它不断更新屏幕上的信息而不转到下一行(与 traceroute 相反)。

谢谢,

您可以watch命令每n

监控文件changes/difference(-d
watch -n 5 -d cat log.txt

接收文件实时信息的最佳解决方案是使用 inotify

这是一项 linux 内核功能,可在特定文件更改时接收通知。您可以编写自己的使用该功能的 c 程序,也可以简单地使用 inotify-wait 或 inotify-watch 命令构建脚本。你可能需要安装它。但两者都有据可查。 新版本的 tail 也使用这个 linux 内核功能

编辑:请记住,这只会帮助您监控文件事件。发生这样的事情你怎么办,我不看好。

PS。您是否考虑过写入文件的进程可能仅在存在换行符时刷新其写入缓冲区

使用这个命令。

watch tail -n 1 log.txt
while [ 1 ]; do sleep 1; clear; tail log.txt; done

这没有将命令和参数传递给 watch 的缺点(有时您需要跳过额外的循环才能使其正确),并且它会清除终端。