【 history 】 コマンド履歴の出力と管理 【 Linuxコマンドまとめ 】

2018年7月12日

「Linuxコマンドまとめ」カテゴリでは、Linuxのコマンドについて、基本的な実行例とオプションを分かりやすくまとめます。

history」は、コマンド履歴(過去に実行したコマンド)の出力と管理を行うコマンドです。

Linuxで広く用いられるシェル「Bash」は、実行したコマンドを「履歴(ヒストリ)」として自動で記録します。「history」コマンドを使って、記録された「コマンド履歴」の出力や操作を行うことができます。

なお、「history」はBash自身が処理を行う「内部コマンド」です。

historyコマンドの基本的な使い方

historyコマンドの基本書式は、以下の通りです。

history [オプション [引数]] [件数]

オプションを付けずにhistoryコマンドを実行すると、コマンド履歴が出力されます。行数を指定すると、指定された件数分の最新のコマンド履歴を出力します。指定せずに実行すると、保存されているコマンド履歴をすべて出力します。

history

履歴が多数ある場合、次のように「less」コマンドとパイプで組み合わせて使うと便利です。

history | less

これにより、「less」によって1画面ごとに表示されるほか、出力を「/」キーや「?」キーで検索できます。

また、特定のパターンを含むコマンドだけを調べたい場合には、「grep」コマンドと組み合わせて使われます。次の例では、「docker」を含むコマンドだけを抽出しています。

history | grep docker

grep」でフィルタしても出力件数が多い場合は、「history」「grep」「less」の3つを組み合わせて、次のように実行されることもよくあります。

history | grep docker | less

historyコマンドは、デフォルトで次のように番号つきで出力されます。

historyコマンドの出力に「日時」を表示

「コマンドを実行した日時」を記録し、historyコマンドに表示させることもできます。

方法については、次の記事を参照してください。

historyコマンドの主なオプション

-c
現在のセッションのコマンド履歴を削除
-d 番号
指定した番号のコマンド履歴を削除
-a [ファイル名]
現在のセッション開始以降に入力されたコマンドを履歴ファイルに書き込み
-n [ファイル名]
現在のセッション開始以降に履歴ファイルに追加された履歴を、現在のセッションに読み込み
-r [ファイル名]
履歴ファイルの内容を現在の履歴として読み込み
-w [ファイル名]
現在の履歴を履歴ファイルに書き込み(履歴ファイルは上書きされる)

ファイル名を指定した場合はそのファイルが用いられ、指定しなかった場合は環境変数「HISTFILE」に設定されているファイル(通常は~/.bash_history)が用いられます。

コマンドの履歴は、Bashの開始時に「~/.bash_history」から自動で読み込まれ、終了時に自動で保存されます。そのため、通常の使用ではオプションを使って手動で書き込んだり読み込んだりする必要はありません。

なお、端末アプリで複数のタブを開いている場合や、 byobuなどを使って複数の端末を切り替えて作業している場合、最後に閉じた端末の履歴で「~/.bash_history」が上書きされ、他の端末のコマンド履歴は失われてしまうことに注意が必要です。

historyコマンドのヘルプ

history: history [-c] [-d offset] [n] または history -anrw [filename] または history -ps arg [arg...]
    Display or manipulate the history list.
    
    Display the history list with line numbers, prefixing each modified
    entry with a `*'.  An argument of N lists only the last N entries.
    
    Options:
      -c	clear the history list by deleting all of the entries
      -d offset	delete the history entry at position OFFSET.
    
      -a	append history lines from this session to the history file
      -n	read all history lines not already read from the history file
    		and append them to the history list
      -r	read the history file and append the contents to the history
    		list
      -w	write the current history to the history file
    
      -p	perform history expansion on each ARG and display the result
    		without storing it in the history list
      -s	append the ARGs to the history list as a single entry
    
    If FILENAME is given, it is used as the history file.  Otherwise,
    if HISTFILE has a value, that is used, else ~/.bash_history.
    
    If the HISTTIMEFORMAT variable is set and not null, its value is used
    as a format string for strftime(3) to print the time stamp associated
    with each displayed history entry.  No time stamps are printed otherwise.
    
    Exit Status:
    Returns success unless an invalid option is given or an error occurs.

historyコマンドのマニュアル

       history [n]
       history -c
       history -d offset
       history -anrw [filename]
       history -p arg [arg ...]
       history -s arg [arg ...]
              オプションがない場合には、行番号付きでコマンド履歴を表示します。 * 付きでリスト表示されている行は変更された行です。 引き数 n を指定すると、最新の n 行だけがリスト表
              示されます。 シェル変数 HISTTIMEFORMAT に空でない値が設定されると、履歴エントリを表示するときに タイムスタンプを表示するための strftime(3) の書式文字列 として使われ
              ます。 タイムスタンプと履歴行の間には空白は表示されません。 filename が指定されている場合、 履歴ファイルの名前として使われます。  指定されていない場合には  HISTFILE
              の値が使われます。指定された場合、オプションは以下の意味を持ちます:
              -c     全てのエントリを削除し、履歴リストをクリアします。
              -d offset
                     offset 番目にある履歴エントリを削除します。
              -a     「新しい」履歴行 (bash の現在のセッションの開始以降に入力された履歴行)  を履歴ファイルに追加します。
              -n     まだ履歴ファイルから読み込んでいない履歴行を  現在の履歴リストに読み込みます。 読み込まれるのは、bash の現在のセッションの開始以降に 履歴ファイルに追加された
                     行です。
              -r     履歴ファイルの内容を読み込み、これらを現在の履歴として用います。
              -w     現在の履歴を履歴ファイルに書き込みます。履歴ファイルの内容は上書きされます。
              -p     後に続く args に対して履歴置換を行い、 その結果を標準出力に表示します。  この結果は履歴リストには格納されません。  通常の履歴展開が行われないようにするため、
                     arg はそれぞれクォートしなければなりません。
              -s     args を 1 つのエントリとして履歴リストに格納します。 履歴リストの最後のコマンドは、 args が追加される前に削除されます。

              HISTTIMEFORMAT  変数が設定されていると、履歴エントリのタイムスタンプの情報は、  履歴のコメント文字を付けて履歴ファイルに書き込まれます。  履歴ファイルを読み込むとき
              に、履歴のコメント文字で始まり直後に数字が続く行は、 直前の履歴行のタイムスタンプとして解釈されます。 不正なオプションがある場合、  履歴ファイルの読み書き時にエラー
              が起きた場合、 -d オプションの引き数として不正な offset の値が与えられた場合、 -p オプションの引き数として与えられた履歴展開が失敗した場合を除き、 返り値は 0 になり
              ます。