この記事を書くきっかけ
ターミナルのコマンド操作に慣れてきた頃、過去のコマンドを実行したいときに、キーボードの上矢印(↑)をひたすら押して探すという非効率な方法をとっていることに気づきました。例えば、ローカルマシンからEC2(仮想サーバー)にSSH接続する際、毎回キーボードを連打しながら過去に実行した ssh 〇〇
コマンドを探して実行していました。
そこで、history
コマンドを覚えて過去のコマンドを一覧表示して、目的のコマンドを探して実行しようとしました。すると、すぐには出てきません。入力ミスや一回限りのコマンドも多くあり、希望のコマンドは大分古い履歴に記録されているようです。結局history
と入力するだけでは、目的のコマンドを見つけることができませんでした。
「もっと上手にhistoryコマンドを使えるようになりたい」、「自分の目的にあったコマンドをピンポイントで実行できるようになりたい」と思い、今回記事にしました。目的別でhistoryコマンドを実行できるようにまとめました。是非、参考にしてみてください。
この記事の対象者
- シェル入門者
- Linuxコマンドを勉強している人
- histroyコマンドのオプションを知りたい人
- 過去に実行したコマンドを記録する方法を知りたい人
historyコマンドとは
コマンド:history
説明:過去に実行したコマンドの一覧を表示するコマンドです。Zshの場合、デフォルトで直近16個のコマンドが表示されます。
目的別histroyコマンドの活用法
過去に実行したコマンドを一覧で表示したい
コマンド:history
シェルで実行した過去のコマンド履歴を表示します
$ history
1 ls
2 cd /etc
3 pwd
4 history
指定したヒストリ番号以降のコマンド履歴を表示したい
コマンド:history [ヒストリ番号]
ヒストリ番号とはhistoryの履歴内のコマンドを識別する番号です。番号が小さいほど昔に実行されたコマンドです。引数にヒストリ番号を指定することで、その番号以降に実行されたコマンドの一覧を表示します。
$ history 50
50 ls
51 cd /etc
直近のコマンド履歴を指定した数だけ表示したい
コマンド:history -[数字]
引数にマイナスの数値を指定すると、直近のコマンド一覧をその数だけ表示します。
$ history -5
50 history
51 uname -r
52 ls
53 pwd
54 history -5
指定したヒストリ番号のコマンドを再実行したい
コマンド:![ヒストリ番号]
ピンポイントで指定したヒストリ番号のコマンドを実行できます。
$ history
101 ls
102 cd /etc
103 pwd
$ !102
cd /etc
直前に実行したコマンドをもう一度実行したい
コマンド:!!
$ ls
file1 file2
$ !!
ls
file1 file2
任意の文字で始まる直前のコマンドを再実行したい
コマンド:!(任意の文字)
例:!l
直前に実行したコマンドの中で、任意の文字(例:l(小文字のL)) で始まるものを再実行します
$ ls
file1 file2
$ pwd
/home/user
$ !l
ls
file1 file2
指定したヒストリ番号から始まるコマンドの引数を全て再利用したい
コマンド:! [ヒストリ番号] *
指定したヒストリ番号から始まるコマンドのすべての引数を再利用します。
!*
と入力すると、直前のコマンドの引数をすべて再利用したいときに使います。
$ echo file1 file2
file1 file2
$ ls !*
ls file1 file2
file1 file2
直前のコマンドの最後の引数だけを再利用したい
コマンド:!$
直前のコマンドの最後の引数だけを利用して、他の命令を実行することができます。
$ echo Hello World
Hello World
$ ls !$
ls World
ls: World: No such file or directory
まとめ
historyコマンドを活用することで、シェル操作が格段に効率的になるはずです。過去のコマンドを探す方法を忘れてしまったら、またこの記事を見直して目的のコマンドを素早く実行できるようにしたいと思います。
historyコマンドは気軽なコマンドなので、シェル操作に慣れることを目的として実行してもいいかもしれません。そうやってシェル操作に慣れていくと、他の便利なコマンドやオプションも覚えやすくなると思います。是非、参考にしてみてください。