如何获取 Linux 终端上因滚动而丢失的控制台输出

如何获取 Linux 终端上因滚动而丢失的控制台输出

我有一个程序在终端上打印了大量数据。终端滚动显示,现在我看不到所有数据。有些数据丢失了。我该如何找回?

答案1

您可以使用各种策略来保存打印大量数据的程序的输出:

  1. Shift+PageUp向上滚动并查看旧输出。如果您已经运行该程序,那么这是您唯一的选择,并且您将受到终端回滚缓冲区的限制。

  2. 如果您提前知道将会有许多屏幕的输出,那么请使用分页器一次查看一屏:command | less。less 将所有输出保存在缓冲区中,并允许您随意上下滚动。

  3. 将输出重定向到文件:command > /tmp/output.txt

  4. 执行 #2 时,你可以使用 实时查看日志文件tail -f /tmp/output.txt。这将显示写入的文件。

  5. 将输出保存到文件同时仍在屏幕上显示:command | tee /tmp/output.txt.tee 将复制其输入,将其写入日志文件和标准输出。

答案2

如果您知道如何编译内核,则可以在内核配置中激活以下选项,让内核将回滚缓冲区保存在 RAM 中,而不是 VRAM 中。您还可以设置缓冲区大小。这样回滚几乎没有限制,因为即使 1MB 也能为您提供大约 256 页的回滚。

您可以在以下位置找到该选项:

设备驱动程序 -> 图形支持 -> 控制台显示驱动程序支持 -> VGA 文本控制台 -> 在系统 RAM 中启用回滚缓冲区 (配置_VGACON_SOFT_SCROLLBACK)

或者你可以使用屏幕它不依赖于内核缓冲区,有自己的缓冲区。这同样适用于您在 X 中使用的终端仿真器,如 Terminal、konsole 或 xterm。

答案3

虽然一旦它离开窗口就无法再将其取回,但您可以在下次运行时将其捕获到文件中。

只需将其泵入文件即可:./program > path/to/file

要查看它并将其放入文件中:./program | tee file

相关内容