在shell历史记录中查找旧命令

如何找到我在终端中运行的旧命令?

我使用了一个appengine命令,希望在我的本地命令历史中找到它,而无需再次在线研究它。

历史就是你要找的。

运行history以获取最后1000个命令的列表,或运行:

 history | grep command_to_search 

在历史生成列表中搜索某些模式,例如:

 history | grep apt 

要搜索任何相关的命令,请注意grep不会将模式锚定到字符串的任何一端,因此在大多数情况下不需要通配符。


history 列表是从存储在~/.bash_history (默认存储最后2000个)的最后1000个命令(默认情况下)中生成的,只有在您干净地退出Bash会话时才会更新此类文件。 这意味着,在关闭终端之前,当前会话中的所有命令都不会出现在该文件中。 如果您终止shell进程,也不会写入它们。

因此,命令历史(2000个最后命令)也可以在~/.bash_history找到,通过以下任一方式:

  • less ~/.bash_history或者,例如gedit ~/.bash_history
  • 打开Nautilus, 按Ctrl + h ,然后搜索.bash_history文件。

可以通过添加或修改~/.bashrc的选项来更改 history~/.bash_history行为,这些是以下几个示例:

  • 追加export HISTCONTROL=ignoreboth:erasedups或修改现有的HISTCONTROL行,删除重复的命令,即如果在echo Hello之后立即运行echo Hello ,则只有一个将出现在bash_history

  • 修改HISTSIZE=1000以扩展或减少使用history显示的命令数量

  • 修改HISTFILESIZE=2000以扩展或减少存储在HISTFILESIZE=2000的命令数量。 设置HISTFILESIZE=-1表示无限制。

  • HISTFILE=/path/to/file以将历史记录保存在其他位置。


来源和进一步阅读:

Bash手册页

感谢Byte Commander的评论

有很多方法可以找到最近执行的命令。

  • 最简单的方法是只需点击键并逐行循环显示命令历史记录,直到找到您要查找的内容。

  • 您也可以按Ctrl + R进入所谓的(reverse-i-search)模式。

    它是一个搜索提示,它将自动完成您最近运行的包含此字符串的命令所键入的内容。 当它显示您要查找的内容时,按Enter键运行它,或按Esc退出搜索提示,同时在命令上保留命令,以便您可以编辑它。 要放弃结果并退出搜索,请按Ctrl + C.

  • 您可以使用内置的history Bash来显示历史记录中记录的命令的完整列表。

    您可以使用例如grep (如history | grep 'appengine'过滤该列表以查找与特定模式匹配的行 history | grep 'appengine'

    有关Bash的history内置命令的更多信息可以通过键入help history找到。

  • 使用bang-expansion直接运行包含字符串的最近执行的命令。 这将用历史记录中的匹配行替换您输入的行,并立即运行,无需确认,因此请小心。

    只需键入!string ,它将用最新的以“string”开头的命令行替换它。

    如果要运行以“string”结尾的最后一个命令,请键入!?string

    或者如果你想在任何地方包含“string”的最后一个命令行,输入!?string?

    有关history bang扩展的更多信息,请输入man history

如果它在最近使用过,您可以通过打开终端并使用键盘上的向上和向下箭头查看最近使用的命令来轻松找到它。