以前に使用したコマンドのコマンドライン履歴を検索するにはどうすればよいですか?


186

履歴を表示する以外に、履歴をフィルタリングする方法はありますか?

「ssh」で始まるコマンドを検索したいとしますか?

回答:


271

Ctrl+ Rを押してを入力しsshます。Ctrl+ Rは、最新のコマンドから古いコマンドへの検索を開始します(逆検索)。で始まるコマンドが複数ある場合は、一致が見つかるまで何度も+をssh押します。CtrlR

一致するものが見つかったら、を押しEnterてコマンドを実行するか、左/右カーソルでコマンドのテキストを選択します。

検索の方向を逆にするCtrl+のデフォルトのリバースオプションはありませんRが、ここでいくつかの提案を見つけることができます。


90

単に履歴を検索したいだけなら、検索したいものをhistory | grep sshsshに置き換えて使用できます。


フィルターに一致するすべてのコマンドをリストに表示するためにリンクしているため、この方法を使用します。
ピス

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ボタンを使用すると、常にページアップで始まる履歴が検索されます


ルート権限がある場合は、/ etc / inputrcを編集できます。これはすべてのユーザーに有効です。
ウルフィー

1
@doug、うーん。Ubuntu15.04を使いました。このソリューションは機能しますが、Ctrl + LeftArrow / Ctrl + RightArrowキーを台無しにします。問題は、.inputrcファイルの作成に関するものであり、その中のエントリに関するものではありません。
ラビ

.inputrcの再バインドまたは端末閉じることを忘れないでください
デヴィッド・ブロサール

14

Ctrl+ Rを押すと「reverse-i-search」モードが開始され、「ssh」と入力すると「ssh」を含むコマンドの履歴が検索されます。


9

古典的なコマンドを使用する別の方法を次に示します(ディストリビューション間で機能する可能性が高い)。コマンド履歴は.bash_historyホームディレクトリのファイルに保存されるため、次の操作を実行できます。

grep "ssh" ~/.bash_history

-i大文字と小文字を区別しない検索が必要な場合は、フラグを忘れないでください。


history | grep ssh一時セッションのsshのみが表示されるので、この回答に進みます。
イニラパテル

3

私はインターネットのどこかに次の機能を見つけ、それを非常に効果的に使用しました。あなたのこれを入れてください~/.bashrc

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

次に、シェルを再ロードします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」または「disish global」と呼ばれる無料で入手できる本当に便利なコマンドもあります。明らかにこれは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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.