はじめに

Web サイトを閲覧してタブを閉じた後、もう一度そのページに戻る必要があることに気づいた経験はありませんか。そのときは、おそらくブラウザーの History を使ったはずです。

Linux のターミナルにも同じ機能があります。Linux は、実行したコマンドを コマンド履歴(Command History) というログに保存します。

この機能が重要なのは、シェルでの作業には同じ操作を繰り返すことが多いからです。履歴は単なる面倒を省くための機能ではありません。入力する文字数を減らし、入力ミスを避け、すでに正常に動作したコマンドを再利用するための実用的な仕組みです。

この実験では、このログを確認し、最近実行した操作を再実行し、過去の履歴を検索する方法を学びます。

コマンド履歴を表示する

このステップでは、コマンドのログを確認します。シェルは、実行したコマンドを一覧に記録します。

まず、次のコマンドを実行して履歴をいくつか作成します。

ls
pwd
whoami

次に、記録を表示します。

history

入力したすべてのコマンドが、番号付きの一覧で表示されます。

    1  ls
    2  pwd
    3  whoami

これは、このセッションの操作記録です。

番号が付いているのは、履歴が単なる日記ではなく、インデックスとしても使えるためです。シェルは保存されたコマンドを呼び出し、再実行したり、検索したりできます。

直近の 3 件だけを表示するには、次のコマンドを実行します。

history -3

直前のコマンドを再実行する(!!)

このステップでは、Linux の「再実行」ボタンに相当する !! を使います。!! は「bang-bang」と読みます。

!! は、直前に実行したコマンドを呼び出します。

まず、日付を確認します。

date

次に、date ともう一度入力する代わりに、次のコマンドを実行します。

!!

ターミナルは !! を date に展開して表示します。もう一度 Enter キーを押すと、展開されたコマンドが実行されます。

これは 履歴展開(history expansion) の例です。シェルは以前のコマンドを短く参照する記法を解釈し、実行前に元のコマンドへ置き換えます。

echo でも試してみましょう。

echo "Hello LabEx"
!!

!! が展開されたら、もう一度 Enter キーを押して、呼び出された echo コマンドを実行します。実行前にコマンドを確認しながら、「同じ操作をもう一度実行する」ための便利な方法です。

コマンドを呼び出す(逆方向検索)

このステップでは、履歴の一覧をスクロールせずに、以前のコマンドを見つけます。

逆方向検索(Reverse Search) の Ctrl+R を使います。Web ページで「ページ内検索」を使うのと似た機能です。

まず、テスト用に次の 2 つのコマンドを実行します。

grep "root" /etc/passwd
grep "bin" /etc/passwd

次に、最初の grep "root" コマンドを探します。

Ctrl+R を押します。プロンプトが (reverse-i-search) または bck-i-search に変わります。

grep と入力し始めると、ターミナルには最も新しい一致結果(grep "bin"...)が表示されます。もう一度 Ctrl+R を押すと、さらに前の一致結果(grep "root"...)に切り替わります。その後、Enter キーを押して実行します。

このようにして、経験豊富なユーザーはすばやく操作します。コマンドを最初から入力するのではなく、検索するのです。

これは重要な考え方です。ターミナルを効率よく使うには、すべてのコマンドを暗記して最初から入力し直す必要はありません。シェルに組み込まれた機能を使って、すでに実行した内容を呼び出し、必要に応じて調整すればよいのです。

まとめ

この実験では、コマンドを記憶だけに頼る必要はないことを学びました。Linux が代わりに覚えてくれます。

  • **history**:過去の操作を記録したログ。
  • **!!**:直前のコマンドを再実行する「再実行」ボタン。
  • **Ctrl+R**:過去のコマンドをすぐに見つける「検索」機能。

これらの機能を使うと、操作が速くなり、入力ミスも減ります。長いコマンドを 2 回入力する代わりに、履歴から呼び出してみましょう。