history は 現在のシェルが保持しているコマンド履歴を表示・編集・保存/読み込みするための組み込みコマンドです(主に Bash/Zsh)。
実務では「直前のコマンドを再実行」「特定履歴の削除」「ログへの書き出し」「別セッションとの履歴同期」などに使います。
構文(Syntax)
# Bash 互換(代表)
history [N] # 直近 N 件(省略で全件)を番号付きで表示
history -c # 履歴一覧をクリア(メモリ上)
history -d OFFSET # 指定番号のエントリを削除
history -a [FILE] # 現セッションの新規分を FILE(既定 $HISTFILE) に追記
history -n [FILE] # FILE から未読分のみを読み込み
history -r [FILE] # FILE を読み込んで履歴に追加
history -w [FILE] # 現在の履歴を FILE に書き出し(上書き)
history -p ARG... # 履歴展開だけして表示(実行はしない)
history -s ARG... # ARG 全体を1件の履歴として追加
- 履歴番号は
historyの表示左端に出ます(!123で再実行、!-1で直前など)。 - Zsh でも同名の組み込みですがオプションや既定動作が一部異なります(Zsh の
historyはfc -l相当)。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
N | 直近 N 件のみ表示 | history 20 |
-c | メモリ上の履歴を全消去 | history -c |
-d OFFSET | 指定番号の履歴を1件削除 | history -d 1234 |
-a [FILE] | セッションで新規追加された分だけを履歴ファイルへ追記 | history -a |
-n [FILE] | 履歴ファイルから未読分だけを読み込み | history -n |
-r [FILE] | 履歴ファイルを読み込み履歴に追加 | history -r ~/.bash_history |
-w [FILE] | 現在の履歴全体を上書き書き出し | history -w |
-p ARG... | 履歴展開(! 等)を評価して表示のみ | history -p '!!:p' |
-s ARG... | 引数を1件の履歴として追加 | history -s "kubectl get pods -A" |
実行例
直近の履歴を確認し、番号指定で再実行
説明: 直近 10 件を見て、特定番号を !番号 で再実行します。
コマンド:
history 10
!1234
出力例(例):
1234 make build
特定の履歴を削除する
説明: 誤って秘密情報を打った履歴番号 5678 を消去します。
コマンド:
history -d 5678
history -w # ファイルにも反映(上書き保存)
別セッションと履歴を即時同期(追記+読み込み)
説明: Shell を複数開いているとき、都度ファイルに追記し読み直します。
コマンド:
# 送信側
PROMPT_COMMAND='history -a' # Bash: プロンプト毎に新規分を追記
# 受信側
history -n # 未読分だけ読み込む
grep と組み合わせて検索 → 再実行
説明: 特定キーワードを含む履歴を検索し、番号で再実行します。
コマンド:
history | grep docker
!2015
エラー例:-d の引数が数値でない
説明: -d には数値が必要です。
コマンド:
history -d abc
出力例(例):
history: abc: numeric argument required
関連コマンド
fc: 履歴の編集・実行(Bash/Zsh)。fc -lは履歴一覧。!(履歴展開):!!(直前)/!$(直前の最後の引数)/!string(先頭一致)など。grep/fzf: 履歴検索を強化(history | fzfなど)。set -o history/set +o history: Bash の履歴機能の有効/無効。HISTFILE/HISTSIZE/HISTCONTROL/HISTIGNORE: 履歴関連の主要環境変数。
備考
- Bash の履歴ファイル: 既定は
~/.bash_history。終了時に書き出されます。シェル間で即時共有したければshopt -s histappendとPROMPT_COMMAND='history -a; history -n'等を利用。 - サイズと保存件数:
HISTSIZE(メモリ上件数)、HISTFILESIZE(ファイル上限件数)で制御。 - 記録抑止: 先頭にスペースを付けると
HISTCONTROL=ignorespaceで記録されません。HISTIGNOREで特定パターンを無視可能。秘密情報の漏洩対策として有効。 - タイムスタンプ:
HISTTIMEFORMATを設定するとhistoryの出力に日時が付きます(例:export HISTTIMEFORMAT='%F %T ')。 - Zsh の相違点: 既定ファイルは
~/.zsh_history。即時書き込みや共有はsetopt inc_append_history/share_history等で行います。 - セッション限定:
history -cはメモリ上の履歴を消すだけです。ファイルからも消したい場合はhistory -wで上書き保存、あるいはファイル自体を安全に消去してください。
参考
- Bash リファレンス(History Builtins / History Expansion)
help history(Bash 組み込みのヘルプ)- Zsh ドキュメント(History / Options:
inc_append_history,share_history) - POSIX
fc(history相当機能の標準仕様)

コメント