在 MacOS 终端上搜索命令历史记录

在 macOS 终端中搜索我的命令历史记录的快捷方式是什么?

可用于搜索的历史记录有多长时间? 它存储在哪里?

124407 次浏览

如何使用 Ctrl+RMac中的 Terminal实用程序上搜索命令历史记录,

dudeOnMac: freddy$ whoami
freddy
(reverse-i-search)`who': whoami

为了控制 history将被保留多长时间,这取决于一些 shell环境变量,即 HISTFILESIZE,它只不过是你想要保留的历史行数。在 .bash_profile中为它设置一个巨大的值以使其生效

HISTFILESIZE=10000000

命令历史记录存储在主文件夹下一个名为 . bash _ history的隐藏文件中。要查看 nano 中的内容,请在 Terminal 中使用以下命令:

nano ~/.bash_history

或者用文本编辑器打开(默认是 TextEdit) :

open ~/.bash_history

在我的例子中,它是一个非常长的列表,当我滚动时,似乎最后的 ~ 500个命令存储在这里。

要查看或回忆最近使用的命令,只需按向上箭头键就可以顺序读取存储在。Bash _ history.

使用 Ctrl + R从终端的历史记录中搜索命令。

(reverse-i-search)`':

键入要搜索的命令的任何子字符串,例如 grep

(reverse-i-search)`grep': grep "XYZ" abc.txt

它将返回与您的输入相匹配的最新命令。如果这不是您正在搜索的命令,请继续按 Ctrl + R进行下一次匹配,直到找到您的命令为止。

找到命令后,按 Return执行它。

如果希望退出而不运行任何命令,请按 Ctrl + G

PS: 这个答案和 Inian 建议的一样,只是为了方便使用给出了更多的细节。

在 Unix 和 Linux Stack Exchange 上从 这个答案迁移 SO 的答案:

ctrl + R将打开历史-搜索-向后。现在开始键入您的命令,这将给出第一个匹配。通过按 ctrl + R再次(再次)你可以循环通过历史。

如果你喜欢超级懒惰,你可以绑定上/下箭头键来执行这个搜索,我有以下在我的 .inputrc绑定上/下箭头键到 history-search-backwardhistory-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

只要键入一些东西(可选) ,然后按上/下箭头键搜索历史中的命令,开始与您键入的。

要在 .bashrc而不是 .inputrc中完成此操作,可以使用:

bind '"\e[A": history-search-backward'

使用此命令-

  history

这在 OSX 和 Linux 上都适用。

根据您的 shell,历史记录存储在 ~/. zsh _ History 或 ~/. bash _ History 或 ~/. History 中。

根据您的系统,历史记录可以存储1000或2000行。

 echo $HISTSIZE

对于那些希望从历史记录中搜索特定命令的用户,可以使用 reverse-i-search进行搜索。反向搜索允许您输入您正在查找的命令的任何关键字(任何) ,并且 reverse search导航回历史记录,逐步匹配以前的命令并返回整个命令。

当一个人不能记住他们经常使用的所有方便的冗长命令时,它尤其有用。要进行反向搜索 ctrl + R并键入任何线索,这将返回与您键入的单词相匹配的以前的命令。然后找到命令后,按 Enter直接从 search 执行它。

为了方便地搜索历史,我建议您安装 fzf

它是一个用于命令行的交互式 Unix 过滤器,可用于任何列表; 文件、命令历史、进程、主机名、书签、 git 提交等。

只要安装它,单击 ctrl + R,就可以滚动查看 shell 历史记录,不需要 grep,也不需要等待很长时间,直到弹出您正在等待的命令。

它支持 Mac OS、 Linux 甚至 Windows。

对于 macOS Big Sur,文件现在是. zsh _ history

如果你做 vi ~/。在终端中的 zsh _ history 中,您可以通过按下/然后按下搜索词来使用 regex。

# USAGE: find.history cd
# filter commands in shell history by a search term and execute the selected command
function find.history {
eval $(history | grep "$1" | tail | awk '{$1=""}1' | tail -r | peco)
}

您需要安装 peco

Https://github.com/peco/peco

[$]> brew install peco

自动化

既然您提到通过 终结者应用程序查看历史记录是一种快速解决方案。您可能希望自动化,或者快速查看历史记录,也许是从被告席。您可以使用 AppleScript 应用程序作为替代方案。对于许多其他方法来说,这是创建简单快捷方式的一种可选方法。

  1. 打开 AppleScript 编辑器应用程序。
  2. 为历史添加指定的命令。
  3. 密码
tell application "Terminal"
do script "history"
end tell
  1. 另存为应用程序,为方便起见拖到停靠点。

历史记录存储和时间存储详细信息

HISTSIZE确定将有多少行写入历史文件。

决定文件的长度。

返回文章页面 历史被储存:

echo $HISTSIZE $HISTFILESIZE

注意: 您还可以在两个变量的长度中增加命令历史记录存储大小。您可以通过位于 ~/.bash_profile文件中的 HISTSIZEHISTFILESIZE环境变量来实现这一点。

可以通过修改 ~/.bash_profile来实现这一点,用 大小表示的数字占位符代表的是数字,行值作为例子:

export HISTFILESIZE=SIZE # Example 1000
export HISTSIZE=SIZE # Example 10000

Pre macOS 11 Big Sur

cat ~/.bash_history

HISTFILESIZE将只设置一个最大历史值,该值在会话启动时存储到历史文件中。HISTSIZE将具体确定将存储多少行,或者换句话说,在会话的 结束中编写多少行。如果设置的 HISTFILESIZE被确定为比设置的 HISTSIZE大的值,则不会查看比设置的 HISTSIZE大的历史记录。原因是 历史文件被 HISTSIZE覆盖,除非使用 histappend选项转换为 开始

您也可以使用 histappend来追加历史记录,如果 histappend shell 选项被打开,则行被追加到历史记录文件中。否则,覆盖的替代方案将继续执行。

Bash GNU-hisappend

macOS 11 Big Sur

nano ~/.zprofile

修改历史环境变量,设置为一个值:

export HISTFILESIZE=1000
export HISTSIZE=SIZE=1000

运行 source命令可以用来将任何函数文件加载到当前的 shell 脚本或命令提示符中。

source ~/.zprofile
echo $HISTSIZE $HISTFILESIZE

产出:

1000 1000

存储历史记录的输出:

cat ~/.zsh_history

你亦可尝试以下方法:

history | grep 'git'

其中“ git”是您要查找的命令。