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

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

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

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

答案1

历史就是你要找的。

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

history | grep command_to_search

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

history | grep apt

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


history 列表生成自最后 1000 条命令(默认)存储在~/.bash_history(默认情况下存储最后 2000 条命令),并且只有在您完全退出 Bash 会话时,该文件才会更新。这意味着,除非您关闭终端,否则当前会话中的所有命令都不会保存在该文件中。如果您终止 shell 进程,它们也不会被写入。

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

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

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

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

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

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

  • 附加HISTFILE=/path/to/file以将历史记录保存到其他地方。


资料来源及进一步阅读:

Bash 手册页

感谢 Byte Commander 的评论

答案2

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

  • 最简单的方法就是按下按键并逐行循环浏览命令历史记录,直到找到您要查找的内容。

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

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

  • 您可以使用historyBash 内置功能显示历史记录中的完整命令列表。

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

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

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

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

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

    或者如果您想要在任何地方包含“字符串”的最后一个命令行,请键入!?string?

    通过输入可以找到有关历史爆炸扩展的更多信息man history

答案3

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

相关内容