このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】コマンド履歴の呼び出し:historyコマンド

historyコマンドの概要

 「history」コマンドは、シェルのセッションで実行したすべてのコマンドのリストを表示するためのコマンドです。各コマンドは番号付きで表示され、この番号を使用して特定のコマンドを再実行することができます。

「!」記号とコマンド履歴の呼び出し

コマンド説明使用例
!n履歴リストの特定の番号 n に対応するコマンドを再実行します。!42
!!直前に実行したコマンドを再実行します。!!
!stringstring で始まる最後のコマンドを再実行します。!ls
!$直前に実行したコマンドの最後の引数を再利用します。echo !$
^old^new直前のコマンドで oldnew に置き換えて再実行します。^cat^bat
「!」記号とコマンド履歴の呼び出し

コマンドの使用例と解説

1.演習の準備

演習を始める前に、コマンドをいくつか実行しておきます。以下のコマンドを実行します。

  • 「date > file」コマンド
  • 「cat file」コマンド
user01@ubuntu-vm:~$ date > file
user01@ubuntu-vm:~$ cat file
2024年  6月 16日 日曜日 03:49:06 JST

2.コマンド履歴の表示

・「history」コマンドを実行します。

セッション内で実行したすべてのコマンドが番号付きで表示されます。

user01@ubuntu-vm:~$ history
  710  ls -l
  711  cat /var/log/syslog | grep "error" | wc -l
  712  cat /var/log/syslog | grep "error"
(省略)
 1706  clear
 1707  date > file
 1708  cat file
 1709  history

3.特定の履歴番号のコマンドを再実行

・「!1708」コマンドを実行します。

履歴番号 1708 のコマンド 「cat file」を再実行します。

user01@ubuntu-vm:~$ !1708
cat file
2024年  6月 16日 日曜日 03:49:06 JST

4.直前のコマンドを再実行

・「!!」コマンドを実行します。

直前に実行したコマンドを再実行します。例えば、直前が「cat file」なら、それが再実行されます。

user01@ubuntu-vm:~$ !!
cat file
2024年  6月 16日 日曜日 03:49:06 JST

5.特定の文字列で始まるコマンドを再実行

・「!ls」コマンドを実行します。

最後に実行した ls コマンドを再実行します。

user01@ubuntu-vm:~$ !ls
ls
file  ダウンロード  デスクトップ  ビデオ    ミュージック
snap  テンプレート  ドキュメント  ピクチャ  公開

6.直前のコマンドの最後の引数を再利用

以下のコマンドを実行します。

  • cat /etc/passwd」コマンド
  • ls -l !$」コマンド

 直前のコマンドの最後の引数を再利用します。例えば、直前のコマンドが 「cat /etc/passwd」なら、「ls -l /etc/passwd」が実行されます。

user01@ubuntu-vm:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
(省略)
user01@ubuntu-vm:~$ ls -l !$
ls -l /etc/passwd
-rw-r--r-- 1 root root 3123  6月  9 02:54 /etc/passwd

7.コマンドの部分置換

以下のコマンドを実行します。

  • ls file」コマンド
  • ^ls^cat」コマンド

 直前のコマンドで「ls」を「cat」に置き換えて再実行します。例えば、直前のコマンドが「ls file」なら、「cat file」が実行されます。

user01@ubuntu-vm:~$ ls file
file
user01@ubuntu-vm:~$ ^ls^cat
cat file
2024年  6月 16日 日曜日 03:49:06 JST

8.ファイルの削除

演習で作成したファイルを削除します。

・「rm file」コマンドを実行し、「ls」コマンドでファイルが削除されたかどうかを確認します。

user01@ubuntu-vm:~$ rm file
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

まとめ

 「history」コマンドと「!」記号を組み合わせることで、過去のコマンドを効率的に再利用でき、作業効率が大幅に向上します。以下の表は、それぞれのコマンドの使用例とその効果をまとめたものです。

コマンド説明使用例
!n履歴リストの特定の番号 n に対応するコマンドを再実行!42
!!直前に実行したコマンドを再実行!!
!stringstring で始まる最後のコマンドを再実行!ls
!$直前に実行したコマンドの最後の引数を再利用echo !$
^old^new直前のコマンドで oldnew に置き換えて再実行^cat^bat
過去のコマンドの再利用