17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LinuxAdvent Calendar 2022

Day 2

【history】Linuxのコマンド履歴を再利用するテクニック

Last updated at Posted at 2022-08-11

コマンド履歴を再利用するテクニック

目次

  1. テクニックその1(history + !)を駆使する
  2. テクニックその2(history + grep)を駆使する
  3. テクニックその3(Ctrl + R)を駆使する

とある日のこと。

後輩ちゃん「よし!やっとコマンド入力できた!あとは実行するだけ!」

$curl -h 'Authorization: Bearer access_token' 'https://qiita.com/api/v2/items/a403e97626433a5bc94c' | jq | grep page_views_count
parse error: Invalid numeric literal at line 1, column 6

後輩ちゃん「あれ、エラーが出ちゃった」
後輩ちゃん「curlのリクエストヘッダのオプション(-h)は大文字(-H)じゃなくちゃいけないのか!」
後輩ちゃん「打ち直しか...少し面倒くさい...」

すずこ「ちょっと待った!!」
すずこ「また1から打ち直そうとしていないかい?」

後輩ちゃん「良い方法あるんですか?((キラキラ」

すずこ「方向キーの上矢印を押してごらん」

後輩ちゃん「わわわわ、直前に打ったコマンドが出てきました!」

すずこ「方向キーの上下矢印はコマンド履歴を遡ってくれるんだよ」

(せっかくなので、コマンド履歴を再利用するテクニックを共有しよう)

テクニックその1(history + !)を駆使する

historyコマンド:コマンドの入力履歴を再利用するコマンド

すずこ「historyコマンドを打ち込んでみて」

$history
1  ls -l
2  cd ~
3  pwd
4  ls -l
5  curl -h 'Authorization: Bearer access_token' 'https://qiita.com/api/v2/items/a403e97626433a5bc94c' | jq | grep page_views_count

後輩ちゃん「過去に入力したコマンドが表示されました」
後輩ちゃん「なるほど、historyコマンドを打って、もう1回使いたいコマンドをコピペすればいいんですね!」

すずこ「それでもいいんだけど、表示されたコマンド履歴に番号が割り振られているよね」
すずこ「! + 番号をコマンド入力すると、その番号が割り振られているコマンドが再実行されるんだ」

後輩ちゃん「てことは、!5とコマンド入力すれば、あの長いcurlのコマンドを再入力してくれるんですか!(上記参照)」

すずこ「その通り!試しに打ち込んでごらん」

$history
1  ls -l
2  cd ~
3  pwd
4  ls -l
5  curl -h 'Authorization: Bearer access_token' 'https://qiita.com/api/v2/items/a403e97626433a5bc94c' | jq | grep page_views_count

$!5
curl -h 'Authorization: Bearer access_token' 'https://qiita.com/api/v2/items/a403e97626433a5bc94c' | jq | grep page_views_count
parse error: Invalid numeric literal at line 1, column 6

後輩ちゃん「おお!実行されて、しっかりエラーも出ました」

すずこ(しまった、エラーが出るコマンドだった...)
すずこ(エラーはおいといて)

すずこ「そんな感じで、過去に打ったコマンドを再利用したいときは、history + !を駆使すると効率良く作業ができるね」

後輩ちゃん「ただ、今は5件しかコマンド履歴ないですが、それが100件とか1000件になったら探すの面倒くさいですね!((ニコニコ」

すずこ(相変わらず、良いところに目を付けるな~)

テクニックその2(history + grep)を駆使する

grepコマンド:特定の文字列を検索するコマンド

すずこ「そんな時は、history + grepを駆使しよう!」
すずこ「history | grep [検索したい文字列]を打ち込むことによって、」
すずこ「コマンド履歴の中から検索したい文字列を含むコマンドのみを抽出してくれるんだよ」
すずこ「例えば、1000件あるコマンド履歴からmysqlを含むコマンドを抽出したい場合」

$history | grep mysql
 34  mysql -hlocalhost -uroot -p
 67  mysql --version
104  mysql -hlocalhost -uroot -phogehoge

すずこ「こんな感じで、mysqlを含むコマンドだけが抽出することができたね」

後輩ちゃん「膨大なコマンド履歴から、目で探すのは大変だから、他のLinuxコマンド(今回はgrep)と掛け合わせることで、効率よく求めているコマンドを探すことができるんですね!」

後輩ちゃん「でも結局、過去のコマンドを少し変えたいときは、やっぱりコピペになるんですか...?」

すずこ(鋭い)

すずこ「確かに、history + !の方法だと、そのコマンドが実行されてしまうから、少し変えたいときは不便だよね」

テクニックその3(Ctrl + R)を駆使する

Ctrl + R:コマンドライン上で検索モードになる

すずこ「そんなときは、Ctrl + R のショートカットを入力してごらん」

後輩ちゃん「reverse-i-searchと表示されました」

$ 
(reverse-i-search)`':

すずこ「そこに検索したい文字列を入力すると、検索したい文字列とマッチするコマンドが表示されるの」
すずこ「試しにmysqlと打ち込んでみようか」

$ 
(reverse-i-search)`mysql': mysql -hlocalhost -uroot -phogehoge

後輩ちゃん「すごい!候補のコマンド履歴が表示されました」

すずこ「表示されているコマンドが求めているコマンドと異なる場合は、」
すずこ「さらにCtrl + Rを入力すると、後方検索(次の候補を検索)してくれるんだよ」

後輩ちゃん「ふむふむ」

すずこ「その状態で、Enterキーを押下すると実行されるし、」
すずこ「少し修正したい場合は、方向キーの左右矢印キーを押下すると実行せずにコマンド入力してくれんだよ」

後輩ちゃん「本当ですね!方向キーの左右矢印キーを押したら、コマンドが表示されました!」
後輩ちゃん「これでコマンドの修正ができます!」

(reverse-i-search)`mysql': mysql -hlocalhost -uroot -phogehoge

↓ 方向キーの左右矢印キー押下後

$mysql -hlocalhost -uroot -phogehoge
※コマンドは実行されずに、入力される

まとめ

後輩ちゃん「なるほど!historyでの検索も、Ctrl + Rでの検索もどちらも良し悪しがあるって感じですね!」

後輩ちゃん「historyはコマンド履歴を一覧表示してくれるから、求めているコマンドを探しやすい」
後輩ちゃん「Ctrl + Rは入力が手早くできるし、コマンドの修正もしやすい」
後輩ちゃん「状況に応じて、使い分けするのがよさそうですね!」

すずこ(ぼくの出番が...)


以上。

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?