终端是否存储数据?


9

这是我很长一段时间以来一直想知道的事情,但是从未真正提出一个问题。

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

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

这个系统如何运作?


写历史,让所有先前使用的命令..
Sukupa91

OP并不是在询问history命令,而是询问整个旧命令的系统是如何工作的。
塔伦

抱歉,我弄错了..
Sukupa91

2
请注意以下异常:如果命令以空格开头,则该命令将不会在历史记录中结束。
Rinzwind

@Rinzwind,如果以空格开头,它的确会添加到历史记录中。
GC

Answers:


10

这是命令历史记录,它是Shell而不是终端的功能。

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

有一些变量和外壳程序选项可以更改其确切工作方式的行为。man bash如果您想了解更多信息,请查看bash联机帮助页()。只需搜索“ 历史记录”(输入/^HISTORY并用确认,用Enter跳转到下一个查找n

此外,还有很多方法可以绕过历史,而不仅仅是UpDown

  • 例如,按Ctrl+ R和上一个命令的一部分,bash将在历史记录中向后搜索匹配的命令,如果第一个不是您要查找的匹配,则重复按Ctrl+ R。(请参见bash手册页中的“操纵历史的命令”)

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

  • !!在shell上键入而不是命令,这将重复最后一条命令(有关此信息,请参见bash联机帮助页中的“ HISTORY EXPANSION”)。


1
如果您不希望它保留历史记录,请将它unset HISTFILE放入〜/ .bashrc中。然后,它将仅将历史记录保留在内存中,并为每次新的Shell调用清除历史记录。
2013年

10

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

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

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.