![如何获取 Linux 终端上因滚动而丢失的控制台输出](https://linux22.com/image/1257396/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%20Linux%20%E7%BB%88%E7%AB%AF%E4%B8%8A%E5%9B%A0%E6%BB%9A%E5%8A%A8%E8%80%8C%E4%B8%A2%E5%A4%B1%E7%9A%84%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%BE%93%E5%87%BA.png)
我有一个程序在终端上打印了大量数据。终端滚动显示,现在我看不到所有数据。有些数据丢失了。我该如何找回?
答案1
您可以使用各种策略来保存打印大量数据的程序的输出:
按Shift+PageUp向上滚动并查看旧输出。如果您已经运行该程序,那么这是您唯一的选择,并且您将受到终端回滚缓冲区的限制。
如果您提前知道将会有许多屏幕的输出,那么请使用分页器一次查看一屏:
command | less
。less 将所有输出保存在缓冲区中,并允许您随意上下滚动。将输出重定向到文件:
command > /tmp/output.txt
。执行 #2 时,你可以使用 实时查看日志文件
tail -f /tmp/output.txt
。这将显示写入的文件。将输出保存到文件同时仍在屏幕上显示:
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