history – シェルのコマンド履歴を表示・操作する(組み込み)

履歴・補完
スポンサーリンク

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 の historyfc -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 histappendPROMPT_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 fchistory 相当機能の標準仕様)
スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント