如何将未记录的控制台屏幕内容保存到文件?

如何将未记录的控制台屏幕内容保存到文件?

我在 tty 上,有大量命令输入、大量详细的输出和一些错误消息。现在我必须将所有这些 stdin/stdout/stderr 文本(以控制台屏幕上显示的格式)转储到一个文件中。我如何使用内置工具(最好)完成此操作?

我不知道这个问题是否令人困惑!这真的很简单。假设我登录到 tty1 控制台终端,运行了一些命令(没有启用日志记录,因为我觉得没有必要),但突然出现了某些输出/消息,我想将它们转储到文件中(或者另一个选择是拿一支笔和一张纸)。

我之所以假设可以做到这一点,是因为您可以使用来shift + PgUp/PgDwn移动屏幕输出,这意味着它们仍然在缓冲区中(即使处理是流水线式的)!...这就是应该恢复的。

答案1

TTY 使用“虚拟控制台内存”设备来缓冲其屏幕内容。您可以在man vcs这将让你获得当前屏幕上的内容

实际上,这些只是/dev/与 TTY 编号对齐的编号文件。这是我使用 TTY2 做的一个示例:

$ sudo fold -w$(stty -F /dev/tty2 size | awk '{print $2}') /dev/vcs2

Ubuntu 14.04 LTS bert tty2                                                      

bert login: oli                                                                 
Password:                                                                       
oli@bert:~$ cd test                                                             
oli@bert:~/test$ ls                                                             
Madonna - 10 - Bedtime Story.mp3  output_MP3WRAP.mp3                            
Madonna - 11 - Take A Bow.mp3                                                   
oli@bert:~/test$                                       

fold -w$(...)是因为缓冲输出没有出现具有我期望的控制字符或换行符。这只是\n在每行末尾添加。

正如 TuKsn 在评论中指出的那样,您不必为这一切烦恼,您可以通过以下方式实现完全相同的效果:

sudo screendump 2

您可以坚持> tty.log在任一命令的末尾将输出写入tty.log当前目录中名为的文件:

sudo screendump 2 > tty.log

再次,这只能让你获取屏幕上的内容。即使你增加了 TTY 中的回滚缓冲区,它不存储在可访问的内存中。 你可以改变但这涉及重新编译内核。

这将涉及重新启动并丢失当前的屏幕,所以如果你能做到这一点,那么记录的选项就会更加简单未来IO,像screen或者tmux或者只是script

答案2

也许您可以使用名为 的程序screen。它将终端的所有输出保存到一个文件中。请查看此 Ubuntu 论坛帖子http://ubuntuforums.org/showthread.php?t=1379903。中國医学學術研究院。

答案3

由于我找不到“全选”的任何键盘快捷键,我发现这些可能会有帮助...... https://stackoverflow.com/questions/1536757/selecting-text-in-terminal-without-using-the-mouse 命令行剪贴板复制和粘贴实用程序?

第一个是屏幕,有人建议使用它,但它似乎有一个复制文本的实用程序,所以它可能有用。使用 ^A-Esc 进入复制模式。使用空格开始选择文本,使用空格结束选择文本。使用 ^A-] 插入文本

第二个是将剪贴板中的文本粘贴到文件中。我完全不确定这些方法是否可行...希望有一个可行。

相关内容