トップ > Linuxらしい使い方を覚える >
コマンド履歴の表示と再実行

  

過去に実行したコマンドを呼び出し再実行する

引き続き、シェルに関する機能の解説です。 以前の記事でも説明しましたが、シェルの入力中にキーボードのカーソルキーの上()を押すことで、過去に実行したコマンドを呼び出すことができます。 カーソルキーの上()を3回押せば、3回前のコマンドが呼び出されます。

  
CTRL+Pキーでも過去のコマンドを呼び出すことができます。
  
キーボードのカーソルキーの下()を押すことで逆に進む(戻る)こともできます。 こちらの操作はCTRL+Nキーで代用することができます。

呼び出したコマンドは編集することもでき、Enterキーを押せば、そのコマンドが実行されます。

実は、過去に実行したコマンドを再実行する方法は他にもあります。 history コマンドと "イベント指定" を利用する方法です。 history コマンドで過去に実行したコマンドの履歴を一覧表示し、イベント指定で再実行させます。

実際にやってみましょう。 端末を開き、キーボードから history と入力して、Enterキーを押してください。


history

 

以下のように過去に実行したコマンドの履歴が一覧表示されます。 先頭には履歴番号が付与されていることがわかります。

taro@myhostname:~$ history
    1  pwd
    2  ls
    3  ls -l
    4  man ls
    5  ls -l -a
    6  ls -la
    7  cd /
    8  pwd
    9  ls /home/taro
   10  cd
   11  cd -
   12  cd ~
   13  cd ..
   14  cd taro
   15  cd ./Documents
   16  cd ../../..
   17  cd /home/taro/
   18  man cd
   19  help cd
   20  echo Hello
   21  echo Hello > testfile
   22  ls -l
   23  cat testfile
   24  bc
   25  echo 10 - 3 > testfile
   26  bc < testfile
   27  echo Hello > /dev/tty1
   28  tty
   29  ls /dev
   30  ls /dev | grep sd
   31  ls /media/taro
   32  ls /dev | grep sd
   33  ls /media/taro
   34  ls /media/taro/YAMADA_4G
   35  ls /media/taro
   36  ls /dev | grep sd
   37  ls /dev | grep sd
   38  echo 1 + 2 + 3 | bc
   39  ls /sys/class/leds/*/brightness
   40  cat `ls /sys/class/leds/*/brightness`
   41  echo *

このように history コマンドを使って過去に実行したコマンドの履歴を見ることができます。 ただしこれでは "見ている" だけです。 再実行するには "イベント指定" を行う必要があります。

では試しに、履歴No. 38 の "echo 1 + 2 + 3 | bc" を再実行してみましょう。 キーボードから !38 と入力して、Enterキーを押してください。


!38

 
  
!(エクスクラメーション) と数字の間に空白は入れないでください。

以下のようにコマンドが再実行されます。

taro@myhostname:~$ !38
echo 1 + 2 + 3 | bc
6
taro@myhostname:~$

このように !(エクスクラメーション) に続けて履歴番号を指定することで、コマンドを再実行することができます。 これがシェルの "イベント指定" の機能です。

別のイベント指定方法も見てみましょう。 キーボードから !echo と入力して、Enterキーを押してください。


!echo

 

以下のようにコマンドが再実行されます。 "echo" で始まるコマンドのうち、最も新しいモノが再実行されました。

taro@myhostname:~$ !echo
echo 1 + 2 + 3 | bc
6
taro@myhostname:~$

このように !(エクスクラメーション) に続けてテキストを記述することで、そのテキストで始まる最新のコマンドを再実行することができます。

なお、このイベント指定方法はあまりオススメではありません。 ファイルやディレクトリの削除など、取り返しのつかないコマンドを実行してしまう危険があるためです。

さらに別のイベント指定方法も見てみましょう。 キーボードから !! と入力して、Enterキーを押してください。


!!

 

以下のようにコマンドが再実行されます。 !! は、最後に実行したコマンドを繰り返すためのイベント指定方法です。

taro@myhostname:~$ !!
echo 1 + 2 + 3 | bc
6
taro@myhostname:~$

このように !! とすることで最後に実行したコマンドを再実行することができます。

ただし、このイベント指定方法もオススメはできません。 何が実行されるか確認しないまま再実行することになるためです。

  
  

まとめ

history コマンドで過去に実行したコマンドの履歴を一覧表示することができます。 !(エクスクラメーション) に続けて履歴番号を打ち込むことで、その履歴番号のコマンドを再実行することができます。

!ls のように ! に続けてテキストを入力すれば、そのテキストで始まる最も最近実行したコマンドが再実行されます。 ただし、予想外のコマンドが実行される危険がありため、あまりオススメではありません。

!! とすることで最後に実行したコマンドが再実行されますが、こちらもオススメはできません。

操作/コマンド 説明
history 過去に実行したコマンドの履歴を一覧表示する
!履歴番号 コマンドの履歴の 履歴番号 のコマンドを再実行する
!! 最後に実行したコマンドを再実行する

キーボードのカーソルキーの上()を押すことで過去に実行したコマンドを呼び出すこともできます。 CTRL+Pキーで代用することもできます。

キーボードのカーソルキーの下()を押すと逆方向へ進みます。 こちらはCTRL+Nキーで代用することもできます。

操作/コマンド 説明
カーソルキーの上()
(または)
CTRL+Pキー
1つ前に実行したコマンドを呼び出す
カーソルキーの下()
(または)
CTRL+Nキー
1つ先に実行したコマンドを呼び出す
メニュー