这是我很长一段时间以来一直想知道的事情,但是从未真正提出一个问题。
我知道在Linux发行版提供的终端中,可以使用箭头键查看命令的整个历史记录(如果还有其他方法,我不知道),那么这是怎么发生的呢?
终端是否在某个地方记录了所有按键?它是某种缓冲区吗?但是,再说一次,如果它是一个缓冲区,将在一段时间后将其清除,不是吗?
这个系统如何运作?
history
命令,而是询问整个旧命令的系统是如何工作的。
这是我很长一段时间以来一直想知道的事情,但是从未真正提出一个问题。
我知道在Linux发行版提供的终端中,可以使用箭头键查看命令的整个历史记录(如果还有其他方法,我不知道),那么这是怎么发生的呢?
终端是否在某个地方记录了所有按键?它是某种缓冲区吗?但是,再说一次,如果它是一个缓冲区,将在一段时间后将其清除,不是吗?
这个系统如何运作?
history
命令,而是询问整个旧命令的系统是如何工作的。
Answers:
这是命令历史记录,它是Shell而不是终端的功能。
在Ubuntu(以及许多其他Linux发行版,如果不是大多数发行版)上,用于交互使用的默认shell是Bash(/bin/bash
)。Bash保留您的历史记录,这是的最后命令的列表~/.bash_history
。当您打开外壳程序(通常通过打开终端)时,将读取此文件并将其加载到该外壳程序的内部历史记录中。关闭外壳程序后,所做的更改将写回到文件中。默认情况下,这仅限于最后500个命令。
有一些变量和外壳程序选项可以更改其确切工作方式的行为。man bash
如果您想了解更多信息,请查看bash联机帮助页()。只需搜索“ 历史记录”(输入/^HISTORY
并用确认,用Enter跳转到下一个查找n)
此外,还有很多方法可以绕过历史,而不仅仅是Up和Down:
例如,按Ctrl+ R和上一个命令的一部分,bash将在历史记录中向后搜索匹配的命令,如果第一个不是您要查找的匹配,则重复按Ctrl+ R。(请参见bash手册页中的“操纵历史的命令”)
复制/etc/inputrc
到~/.inputrc
并取消与线history-search-forward
和history-search-backward
在其中。如果键入命令的前几个字母并按PgUp,bash将仅显示历史记录中以相同字母开头的命令。(仅在进行此更改后打开的外壳中工作)
!!
在shell上键入而不是命令,这将重复最后一条命令(有关此信息,请参见bash联机帮助页中的“ HISTORY EXPANSION”)。
unset HISTFILE
放入〜/ .bashrc中。然后,它将仅将历史记录保留在内存中,并为每次新的Shell调用清除历史记录。