【问题标题】:Using tail -F to see a file changing in real-time使用 tail -F 实时查看文件变化
【发布时间】:2017-01-20 05:11:38
【问题描述】:

我有一个脚本来收集不断输入的文件的大小。我将其大小回显到日志文件(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 du -skh filename
  • 虽然这是一个经过深入探讨的问题,StackOverflow 社区正在以编程方式解决问题,而对通用软件实用工具的要求与superuser.com 更相关
  • @Inian 关于 Bash 和 shell 编程的问题完全是 Stack Overflow 上的主题。即使对于那些不是,unix.stackexchange.com 也是重定向人们的更好地方。
  • @ASR,效果很好,谢谢。

标签: linux bash shell tail


【解决方案1】:

使用这个命令。

watch tail -n 1 log.txt

【讨论】:

  • 这到底能做什么?手册页显示“-n number 位置为 number 行”
  • tail -n 1 显示文件的最后一行,watch tail -n 1 每 2 秒显示文件的最后一行,并在此之前清屏
【解决方案2】:
while [ 1 ]; do sleep 1; clear; tail log.txt; done

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

【讨论】:

  • 这很有趣,使用 clear 给人的印象是更新区域周围的屏幕没有变化。即使,您可以向上滚动并查看重复的内容,这非常实用。谢谢,
【解决方案3】:

您可以watch 命令每隔n 秒监控文件更改/差异(-d

watch -n 5 -d cat log.txt

【讨论】:

  • 这个解决方案对我不起作用。我收到log.txt - command not found 错误。
  • 很确定这不起作用 - 你仍然需要运行命令。
  • watch -n 5 -d cat log.txt
  • 嗯。 "$(<log.txt)" 将文件内容解释为命令。
  • @codeforester:看来cat 有用一次,谢谢!
【解决方案4】:

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

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

编辑:请记住,这只有助于您监控文件事件。当这样的事件发生时你做的不是我的那杯茶。

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

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多