如何在命令行历史记录中搜索以前使用的命令?


186

除了查看历史记录,还有其他方法可以过滤我的历史记录吗?

假设我要搜索以“ ssh”开头的命令?

Answers:


271

Ctrl+ R并输入sshCtrl+ R将开始从最新命令搜索到旧命令(反向搜索)。如果您有多个以开头的命令ssh,请再按一次Ctrl+ R,直到找到匹配项。

找到匹配项后,您可以按Enter执行该命令,或者按左/右光标仅选择该命令的文本。

Ctrl+ 没有用于R反转搜索方向的默认反向选项,但是您会在此处找到一些建议。


90

如果您只想搜索历史记录,则可以使用history | grep ssh,用ssh替换要搜索的内容。


我使用此方法,是因为我链接以在列表中查看与我的过滤器匹配的每个命令。
Pisu

15

我对上述内容做了一些细微的改动,对我来说效果很好(如果您指的是bash历史记录

在主文件夹中,创建一个名为

.inputrc

里面去了

"\e[5~": history-search-backward
"\e[6~": history-search-forward

注意:以上内容在14.04中似乎不再起作用,因此它具有相同的作用-

"\e[A":history-search-backward
"\e[B":history-search-forward

然后键入任何我希望的上一个命令,然后使用向上翻页/页面dn按钮搜索历史记录,始终从向上翻页开始


如果您具有root用户权限,则可以编辑/ etc / inputrc,这样对所有用户都适用。
Wolfy

1
@doug,嗯。。我有Ubuntu 15.04。此解决方案有效,但会弄乱Ctrl + LeftArrow / Ctrl + RightArrow键。问题看起来与创建.inputrc文件而不是其中的条目类似。
拉维

不要忘记重新绑定.inputrc或关闭终端
David Brossard

14

Ctrl+ R将启动“反向搜索”模式,键入“ ssh”将在历史记录中搜索包含“ ssh”的命令。


9

这是使用经典命令的另一种方法(更可能在发行版中使用)。命令历史记录存储在.bash_history主目录中的文件中,因此您可以执行以下操作:

grep "ssh" ~/.bash_history

-i如果您需要不区分大小写的搜索,请不要忘记该标志。


history | grep ssh将仅显示临时会话的ssh,因此我将寻求此答案。
iniravpatel

3

我在Internet上的某处发现了以下功能,并用到了很大的效果。把它放在你的~/.bashrc

hgrep () { 
    history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}

现在重新加载您的shell :exec bash。现在,您有了一个新命令,可以像这样使用:

hgrep ssh

它将显示您历史记录中匹配命令的列表。要运行命令,请键入!命令号。这是一个例子:

~:$ hgrep scp
  207  tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log .
  421  tn scp scott-laptop __HOST__:Scott\ Severance.asc .
  422  tn scp scott-laptop __HOST__:'Scott\ Severance.asc' .
  468  tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  469  tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  470  scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds
~:$ !207

Ctrl+ 相比,我更喜欢这种方法,R因为它可以进行更灵活的搜索,并且可以一次看到多个结果。




1

历史是好的,但有局限性-我更喜欢设置bash环境,以便除了运行它们的目录之外,还记录我曾经运行过的所有命令。然后,我运行一个命令以列出所有命令我已经在当前目录中运行,可以通过管道将其传递给grep等-称为“菜”,请参见:

https://github.com/wolfwoolford/dish

如果您想追逐目标,只需在.bashrc(https://github.com/wolfwoolford/dish/blob/master/dishrc)中提供即可。

您还可以免费获得一个非常有用的命令,称为“ dishg”(即盘全局),它可以打印出曾经运行的每个命令,而与目录无关。显然,此选项仅在与grep和tail等一起使用时才有用...

我已经使用了多年,这实际上是我安装新盒子时首先安装的东西。它会将您运行的命令记录到隐藏目录(〜/ .dish)中的文本文件中。.我从来没有磁盘空间问题...


0

想要将此内容写为@ssmy的注释,但无法获得注释中的格式以配合使用。

搜索历史记录后,history | grep ssh您可以通过键入带有感叹号的数字来执行所需的命令,例如!42

例:

$历史记录| grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$!42
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.