终端存储数据吗?

这是我很长一段时间都想知道的事情,但从来没有真正提出问题。

我知道在Linux发行版中提供的终端中,可以通过使用箭头键看到整个命令历史(如果有任何其他方法,我不知道它),那么这是怎么发生的?

是否有终端记录所有击键的地方? 它是某种缓冲区吗? 但是,再说一次,如果它是一个缓冲区,它会在一段时间后清除掉,不是吗?

这个系统如何运作?

这是命令历史记录,它是shell的一个function,而不是终端。

在Ubuntu(以及很多其他Linux发行版)上,交互式使用的默认shell是Bash( /bin/bash )。 Bash会保留您的历史记录,即~/.bash_history最后一个命令的列表。 当您打开shell(通常通过打开终端)时,将读取此文件并将其加载到此shell的内部历史记录中。 关闭shell后,更改将写回文件。 默认情况下,这仅限于最后500个命令。

有一些变量和shell选项可以改变其完全正常工作的行为。 如果你想了解更多信息,请查看bash手册页( man bash )。 只需搜索HISTORY (键入/^HISTORY并按Enter确认,跳转到下一个找到n

还有很多方法可以解决历史,而不仅仅是UpDown

  • 例如,按Ctrl + R和上一个命令的一部分,bash将在历史记录中向后搜索匹配的命令,如果第一个匹配不是您要查找的匹配,请重复按Ctrl + R. (请参阅bash联机帮助页中的“操作历史记录的命令”)

  • /etc/inputrc复制到~/.inputrc并取消注释其中包含history-search-forwardhistory-search-backward的行。 如果键入命令的第一个字母并按PgUp ,bash将仅显示历史记录中以相同字母开头的命令。 (仅在进行此更改后打开的shell中工作)

  • 类型!! 而不是shell上的命令,这将重复最后一个命令(有关更多信息,请参阅bash联机帮助页中的“HISTORY EXPANSION”)。

命令历史记录通常基于每个用户存储在主目录的.bash_history文件中。 意味着,每个用户都有自己执行的一组命令。

当多个终端会话打开时,按箭头键可能会显示不同的命令,但是当您关闭所有终端窗口时,不同终端会话的历史记录将合并到一个公共的~/.bash_history文件中。