这是我很久以来一直想知道的事情,但从来没有真正提出过问题。
我知道在 Linux 发行版提供的终端中,可以使用箭头键查看整个命令历史记录(如果有其他方法,我不知道),那么这是怎么发生的?
终端是否有地方记录所有击键?它是某种缓冲区吗?但是,如果它是一个缓冲区,过一段时间它就会被清除,不是吗?
这个系统如何运作?
答案1
这是命令历史记录,它是 shell 而不是终端的功能。
在 Ubuntu(以及很多(如果不是大多数)其他 Linux 发行版)上,用于交互使用的默认 shell 是 Bash ( /bin/bash
)。Bash 会保留您的历史记录,即最近执行的命令的列表~/.bash_history
。当您打开 shell(通常是通过打开终端)时,会读取此文件并将其加载到此 shell 的内部历史记录中。一旦您关闭 shell,更改就会写回到文件中。默认情况下,这限制为最后 500 条命令。
man bash
有一些变量和 shell 选项可以改变其工作方式。如果您想了解更多信息,请查看 bash 手册页 ( )。只需搜索历史(输入/^HISTORY
并用 确认Enter,用 跳至下一个查找n)
Up此外,除了and之外,还有很多方法可以了解历史记录Down:
例如,按下Ctrl+R和前一个命令的一部分,bash 将在历史记录中向后搜索匹配的命令,如果第一个匹配项不是您要查找的命令,请重复按Ctrl+ R。(请参阅 bash 手册页中的“用于操作历史记录的命令”)
复制
/etc/inputrc
到~/.inputrc
并取消注释包含history-search-forward
和history-search-backward
的行。如果您输入命令的第一个字母并按PgUp,bash 将仅显示历史记录中以相同字母开头的命令。(仅在进行此更改后打开的 shell 中有效)!!
在 shell 上键入而不是命令,这将重复上一个命令(有关更多信息,请参阅 bash 手册页中的“HISTORY EXPANSION”)。
答案2
命令历史记录通常按用户存储在.bash_history
主目录中的文件中。这意味着每个用户都有自己执行过的命令集。
当打开多个终端会话时,按箭头键时它们可能会显示不同的命令,但是当您关闭所有终端窗口时,来自不同终端会话的历史记录将合并到一个公共~/.bash_history
文件中。