bash shell输出历史文件位置


13

bash shell在哪里存储实际的终端会话?我想阅读以前使用的命令的输出。我能找到的所有信息都是如何存储命令的输出。

由于输出显示在屏幕上,因此无论如何都必须将其存储在某个地方。所以我的问题是:在哪里?

Answers:


11

Bash仅存储您运行的命令的历史记录(您可以通过键入来检索历史记录history)。除非您已经将回滚设置为一个很高的数字,否则无法查看比回滚设置值还早的输出。另外,将此值设置为很高的数字会使滚动速度变慢,因为这些行已存储在内存中

要存储将来的命令及其输出,有几种选择:

使用 screen

输入,开始一个屏幕会话screen。进入屏幕后,按Ctrl- a,然后按:,然后输入log。所有I / O都将捕获在screenlog启动screen命令的目录中的文件中。

使用 script

您可以从输入开始script。一个脚本会话将启动,将捕获所有的I / O到一个指定的文件typescript。您可以script通过Ctrl- 退出会话,d 然后查看typescript文件中的日志。

使用 tee

tee是一个方便的工具。您可以执行以下操作:

$ bash | tee log.txt

这将在您已经在运行的外壳中打开一个新的bash外壳。当您exit完成此操作后,您可以在名为的文件中看到输出log.txt

其他方法

正如Dustin Kirkland在这篇文章中建议的那样,您也可以使用byobu。尽管我从未使用过,但诸如Shelr之类的终端截屏工具听起来也像一个选择。


6

有很多与此问题有关的问题,但是所有这些问题都以(未记录)输出的正确假设开始。

所以我的问题是:在哪里?

无处:不记录Bash(以及我所知道的任何其他shell)的输出。

由于输出显示在屏幕上,因此无论如何都必须将其存储在某个地方。

它是,但很可能不是纯文本格式,甚至不是在磁盘上(尽管这实际上取决于终端仿真器):最有可能且至少在大多数情况下,在终端仿真器分配的内存段中。

但是,可以肯定的是,它没有记录到文件中,至少不是通过外壳程序记录的,而且我不知道终端模拟器默认将输出记录到文件中。

的确,这并不意味着不可能记录终端输出:首先,我会提到我认为很多人都没有意识到的事情,因为至少在Ask Ubuntu上我从未见过有人提及此事:Konsole允许保存回滚到文件(也许还有其他终端仿真器提供这种功能,Konsole只是我所知道的唯一一个),尽管这受Konsole的回滚大小限制的限制。

不过,这通常并不是很有用,并且您很可能希望研究“适当的”解决方案以将整个会话的输出记录到文件中(如何在终端会话中记录所有输入和输出?以及Ron的答案)。


1

有一个名为script的命令,如果未安装,则apt-get install script可以执行。

然后在终端中输入脚本。

然后执行所需的操作,完成后只需键入exit,然后将在当前目录中创建一个包含所有stdout和stdin信息的文件。

希望对您有帮助。


软件包在Ubuntu 18.04中为NA
markroxor

1

这与您的shell(bash)没有关系,它是您所使用的终端仿真器的功能。它存储在终端的“回滚缓冲区”中。我还没有找到关于此内容确切存储位置的清晰说明,但是个人经验告诉我,它存储在中的某个位置/tmp

就像上面链接的问题的答案所暗示的那样,它很可能存储在无名文件中。要了解我的意思,请使用文本编辑器打开一个新文件:

gedit newfile

在文件中写一行文本并保存。现在,在该文件仍然打开的同时,打开一个终端并删除它:

rm newfile

由于您仍在中打开文件gedit,因此可以继续写入。即使文件已被删除,您甚至可以向其中写入几GB的数据。那是因为删除文件只是删除指向其inode的链接。如果其文件描述符由另一个程序保持打开状态,则可以向其中写入数据,这可以避免以下事实:不再有与文件系统上的文件描述符相对应的实际链接(文件)。

这就是说,您的终端历史记录可能是使用这样的技巧保存的,该技巧位于中的已删除文件中/tmp。您可能真正想要的是简单地增加终端模拟器的回滚缓冲区大小,以便您可以向上滚动并查看它。具体操作方法取决于您使用的终端仿真器。大多数都具有允许您进行此操作的命令行开关,许多还具有GUI设置方式。例如,在gnome-terminal(Ubuntu上的默认设置)中,它是编辑->首选项->配置文件---单击您的配置文件->编辑->滚动->将滚动限制为NNN:

gnome终端选项屏幕


有趣的见识。检查终端中的较长历史记录并不是我想要的:我希望能够访问终端的
指令

@DanielBöckenhoff,那么您可能希望script按照接受的答案中的说明进行操作。
terdon

当然。我接受了它:)
丹尼尔·伯肯霍夫(DanielBöckenhoff),

-2

终端会话存储在.bash_history文件中。在您的终端中输入此项echo $HISTFILE,这将为您提供.bash_history文件路径。


2
这仅给出先前运行的命令,而不给出命令输出
罗恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.