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

时间:2017-01-21 14:52:47

标签: bash macos history

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

历史可供搜索多长时间?它存放在哪里?

11 个答案:

答案 0 :(得分:31)

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

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

很好地控制history将保留多长时间,这取决于几个shell环境变量HISTFILESIZE,这只是您想要保留的历史记录行数。在.bash_profile中为其设置一个巨大的值,以使其生效

HISTFILESIZE=10000000 

答案 1 :(得分:13)

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

(reverse-i-search)`': 

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

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

它将返回与您的输入匹配的最新命令。如果这不是您要搜索的命令,请继续按Ctrl + R进行下一场比赛,直至找到您的命令。

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

如果您想在不运行任何命令的情况下退出,请按Ctrl + G

PS:这个答案与Inian建议的相同,只是提供了更多细节以便于使用。

答案 2 :(得分:6)

命令历史记录存储在您的主文件夹下的名为 .bash_history 的隐藏文件中。要以nano格式查看其内容,请在终端中使用以下命令:

nano ~/.bash_history

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

open ~/.bash_history

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

答案 3 :(得分:3)

在Unix和Linux Stack Exchange上从this answer迁移对SO的答案:

ctrl + R 将打开历史记录向后搜索。现在开始输入命令,这将给出第一个匹配项。再次(反复)按 ctrl + R ,您可以循环浏览历史记录。

如果您想变得超级懒惰,可以绑定向上/向下箭头键来执行此搜索,我在.inputrc中具有以下内容,可以将向上/向下箭头键绑定到history-search-backward,然后history-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'

答案 4 :(得分:3)

使用此命令-

  history

这在OSX和Linux上均可使用。

根据您的shell,历史记录存储在〜/ .zsh_history或〜/ .bash_history或〜/ .history中。

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

 echo $HISTSIZE

答案 5 :(得分:1)

对于那些想从历史记录中搜索特定命令的人,可以使用reverse-i-search进行。反向搜索允许您键入要查找的命令中包含的任何关键字(任何),然后{ {1}}导航回历史记录,不加区别地匹配先前的命令,然后返回整个命令。

当人们不记得他们经常使用的所有冗长冗长的命令时,它特别有用。要进行反向搜索reverse search + ctrl并输入任何线索,这将返回与先前命令匹配的您输入的单词。然后找到命令后,点击R以直接从搜索中执行它。

答案 6 :(得分:1)

对于 macOS Big Sur,文件现在是 .zsh_history

如果您在终端中执行 vi ~/.zsh_history ,则可以通过按 / 然后按搜索词来使用正则表达式。

答案 7 :(得分:1)

<块引用>

自动化 AppleScript

因为您提到通过 Terminal.app 查看历史记录是一种快速解决方案。您可能想要自动化或快速查看历史记录,也许是从 Dock 中进行的。您可以使用 AppleScript 应用程序作为一种替代方法。与许多其他方法一样,这是创建简单快捷方式的可选方法。

  1. 打开 AppleScript 编辑器应用程序。
  2. 添加您指定的命令,用于历史记录。
  3. 代码
tell application "Terminal"
        do script "history"
end tell
  1. 另存为应用程序,为方便起见,拖动到停靠栏。
<块引用>

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

HISTSIZE 确定将写入历史文件的行数。

HISTFILESIZE 确定文件的长度。

找出历史记录的存储时间

echo $HISTSIZE $HISTFILESIZE

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

可以通过修改~/.bash_profile来实现,SIZE的数字占位符代表数字,行值,例如:

export HISTFILESIZE=SIZE # Example 1000
export HISTSIZE=SIZE # Example 10000
<块引用>

macOS 11 Big Sur 之前

cat ~/.bash_history

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

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

Bash GNU - histappend

<块引用>

macOS 11 大苏尔

nano ~/.zprofile

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

export HISTFILESIZE=1000
export HISTSIZE=SIZE=1000

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

source ~/.zprofile
echo $HISTSIZE $HISTFILESIZE

输出:

1000 1000

输出一些历史记录的存储位置:

cat ~/.zsh_history

答案 8 :(得分:0)

要查看或调出最近使用过的命令,只需按向上箭头键即可顺序读回存储在.bash_history中的历史记录。

答案 9 :(得分:0)

要轻松搜索历史记录,建议您安装fzf

这是一个交互式Unix命令行过滤器,可以与任何列表一起使用;文件,命令历史记录,进程,主机名,书签,git commit等。

只需安装它,单击ctrl + R,您将滚动浏览shell历史记录,而无需进行grep或等待一段时间直到您输入命令等待弹出。

它支持Mac OS,Linux甚至Windows。

答案 10 :(得分:0)

# 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