historyコマンドでコマンド履歴を表示・検索する方法|日時表示や削除もコマンド


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドF-J, システム管理コマンド > historyコマンドでコマンド履歴を表示・検索する方法|日時表示や削除もコマンド
「historyコマンドで過去に打ったコマンドを確認したいけど、いつ実行したか分からない」
「さっき打った長いコマンドをもう一度使いたいのに、思い出せない」
Linuxでの作業中、こうした場面は日常的に起こります。

この記事では、Linuxの history コマンドを使ってコマンド履歴を表示・検索・削除する実践的な方法を解説します。
基本的な履歴表示だけでなく、実行日時の表示(HISTTIMEFORMAT)、履歴の検索(Ctrl+R)、重複排除(HISTCONTROL)、セキュリティ対策まで、現場で役立つテクニックをまとめました。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

historyコマンドとは? コマンド履歴の仕組み

history コマンドは、bashシェルで過去に実行したコマンドの一覧を表示するコマンドです。

実行したコマンドは、セッション中はメモリ上に保持され、ログアウト時にホームディレクトリの ~/.bash_history ファイルに書き出されます。

デフォルトでは直近1000件の履歴が保存されます。この件数は環境変数 HISTSIZE(メモリ上の保持数)と HISTFILESIZE(ファイルの保存数)で変更できます。

基本的な使い方

1. コマンド履歴を一覧表示する

引数なしで実行すると、履歴番号付きで全履歴が表示されます。

# 全履歴を表示 $ history 1 cd /var/log 2 ls -la 3 tail -f messages 4 grep "ERROR" messages

件数を指定すると、直近N件だけを表示できます。

# 直近10件の履歴を表示 $ history 10

2. 履歴番号を指定してコマンドを再実行する(!番号)

history で表示された履歴番号を使って、過去のコマンドをそのまま再実行できます。

# 履歴番号42のコマンドを再実行 $ !42

3. 直前のコマンドを再実行する(!!)

!! と入力すると、直前に実行したコマンドをそのまま再実行します。
よく使うのが、sudoを付け忘れた時の「sudo !!」です。

# Permission denied になった直後に $ sudo !! # → 直前のコマンドにsudoを付けて再実行される

4. 文字列で始まるコマンドを再実行する(!文字列)

! に続けて文字列を入力すると、その文字列で始まる直近のコマンドを再実行します。

# "grep" で始まる直近のコマンドを再実行 $ !grep

5. 文字列を含むコマンドを再実行する(!?文字列)

!? に続けて文字列を入力すると、その文字列を含む直近のコマンドを再実行します。

# "messages" を含む直近のコマンドを再実行 $ !?messages

履歴をインクリメンタル検索する(Ctrl+R)

現場で最も使用頻度が高いのが、Ctrl+R によるインクリメンタル逆方向検索です。

Ctrl+R を押すと、プロンプトが以下のように変わります。

(reverse-i-search)`':

この状態で文字を入力すると、入力した文字列を含む直近のコマンドがリアルタイムで表示されます。

Ctrl+R を連続で押す:さらに古い候補に移動
Enter:表示されているコマンドをそのまま実行
Esc または Ctrl+C:検索を中止してプロンプトに戻る
右キー(Ctrl+F):表示されているコマンドを編集してから実行

長いコマンドを何度も手入力する必要がなくなるため、作業効率が大幅に上がります。

履歴に実行日時を表示する(HISTTIMEFORMAT)

デフォルトでは履歴に日時情報はありません。「このコマンドをいつ実行したか」を確認するには、環境変数 HISTTIMEFORMAT を設定します。

# 実行日時を「年-月-日 時:分:秒」形式で表示する $ export HISTTIMEFORMAT='%F %T ' $ history 1 2026-03-15 10:30:00 cd /var/log 2 2026-03-15 10:30:05 ls -la 3 2026-03-15 10:31:20 tail -f messages

障害対応時に「いつどんな操作をしたか」を正確に振り返られるため、サーバー管理者には必須の設定です。

※設定前に実行したコマンドには日時が記録されていないため、設定した時点の日時が一律で表示されます。

履歴の動作を制御する環境変数

1. HISTCONTROL ~ 重複や空白コマンドを制御する

HISTCONTROL を設定すると、履歴に記録するコマンドを制御できます。

ignoredups:直前と同じコマンドを履歴に残さない
ignorespace:先頭にスペースを付けたコマンドを履歴に残さない
ignoreboth:ignoredups と ignorespace の両方を有効にする
erasedups:履歴全体から重複を削除し、最新の1件だけ残す

# 直前と重複するコマンド+先頭スペースのコマンドを履歴に残さない $ export HISTCONTROL=ignoreboth

ignorespace を設定しておくと、パスワードを含むコマンドを一時的に履歴に残さないようにできます。先頭にスペースを1つ付けて実行するだけです。

# 先頭にスペースを付けると履歴に残らない(HISTCONTROL=ignorespace設定時) $ mysql -u root -pMySecret123

2. HISTIGNORE ~ 特定のコマンドを履歴に記録しない

HISTIGNORE を設定すると、指定したパターンに一致するコマンドを履歴に記録しなくなります。コロン(:)で区切って複数指定できます。

# ls、pwd、history を履歴に記録しない $ export HISTIGNORE="ls:pwd:history"

3. HISTSIZE と HISTFILESIZE ~ 履歴の保存件数を変更する

HISTSIZE:メモリ上に保持する履歴の件数(デフォルト1000)
HISTFILESIZE:~/.bash_history ファイルに保存する行数(デフォルト1000)

# 履歴を5000件に増やす $ export HISTSIZE=5000 $ export HISTFILESIZE=5000

履歴を削除する

1. 全履歴を削除する(history -c)

メモリ上の全履歴を削除します。ただし ~/.bash_history ファイルの中身は残るため、完全に消すには history -w でファイルへ書き出す必要があります。

# メモリ上の履歴を全削除し、空の状態でファイルに上書き $ history -c $ history -w

2. 特定の履歴番号を削除する(history -d)

パスワードを含むコマンドを誤って実行してしまった場合、その行だけを削除できます。

# 履歴番号42を削除する $ history -d 42

3. 履歴をファイルに書き出す / ファイルから読み込む

history -w:現在のメモリ上の履歴を ~/.bash_history に書き出す
history -r:~/.bash_history の内容をメモリに読み込む
history -a:現在のセッションで新たに実行したコマンドだけを ~/.bash_history に追記する

# 現在の履歴をファイルに保存 $ history -w # ファイルから履歴を読み込む $ history -r

複数ターミナルでの履歴の扱い

bashでは、複数のターミナル(SSH接続を含む)を同時に開いている場合、最後に閉じたターミナルの履歴が ~/.bash_history を上書きします。つまり、他のターミナルで実行したコマンドが消えてしまう可能性があります。

これを防ぐには、以下の2つの設定を組み合わせます。

# ~/.bashrc に追記 # 履歴をファイルに「上書き」ではなく「追記」するモードに変更 shopt -s histappend # コマンド実行のたびに履歴をファイルに追記し、他ターミナルの履歴も読み込む PROMPT_COMMAND="history -a; history -c; history -r"

shopt -s histappend だけだとログアウト時にまとめて追記されるだけですが、PROMPT_COMMAND と組み合わせることで、コマンドを実行するたびにリアルタイムで履歴が共有されます。

セキュリティ対策 ~ 履歴を残さない設定

サーバーの用途によっては、コマンド履歴をセキュリティリスクと判断して無効化するケースがあります。

1. 履歴機能を完全に無効化する

# ~/.bashrc に追記(このユーザーの履歴を無効化) export HISTSIZE=0

HISTSIZE=0 を設定すると、そのセッションでは一切履歴が保存されなくなります。

全ユーザーに適用する場合は /etc/profile に記述します。

# /etc/profile に追記(全ユーザーの履歴を無効化) export HISTSIZE=0

2. 履歴ファイルの保存先を変更する

HISTFILE 環境変数で、履歴ファイルの保存先を変更できます。

# 履歴ファイルの保存先を変更する $ export HISTFILE=~/.my_history

HISTFILE=/dev/null に設定すれば、履歴がファイルに一切書き出されなくなります。

.bashrcでの永続化設定

ここまで紹介した環境変数の設定は、ターミナルを閉じるとリセットされます。永続化するには ~/.bashrc に記述します。

# ~/.bashrc に追記する推奨設定 # 履歴の保存件数を増やす export HISTSIZE=5000 export HISTFILESIZE=5000 # 実行日時を記録する export HISTTIMEFORMAT='%F %T ' # 直前と重複するコマンド・先頭スペースのコマンドを履歴に残さない export HISTCONTROL=ignoreboth # ls、pwd、history自体を履歴に残さない export HISTIGNORE="ls:pwd:history" # 複数ターミナルの履歴を統合する shopt -s histappend PROMPT_COMMAND="history -a; history -c; history -r"

設定を反映するには、ファイル保存後に以下を実行します。

$ source ~/.bashrc

「Permission denied」で.bash_historyに書き込めない場合

履歴が保存されない場合、~/.bash_history のパーミッションまたは所有者が変わっている可能性があります。

# パーミッションと所有者を確認 $ ls -la ~/.bash_history -rw------- 1 user user 12345 Mar 15 10:00 /home/user/.bash_history # パーミッションを修正する場合 $ chmod 600 ~/.bash_history # 所有者を修正する場合(rootで実行) $ chown user:user ~/.bash_history

よくある原因は、sudo su で一時的にrootになった際に ~/.bash_history の所有者がrootに変わってしまうケースです。一般ユーザーに戻った後、履歴が書き込めなくなります。

本記事のまとめ

やりたいこと コマンド / 設定
コマンド履歴を表示する history
直近N件の履歴を表示する history 10
履歴番号を指定して再実行する !42
直前のコマンドを再実行する !!
文字列で始まるコマンドを再実行する !grep
履歴をインクリメンタル検索する Ctrl+R
実行日時を表示する export HISTTIMEFORMAT='%F %T '
重複コマンドを履歴に残さない export HISTCONTROL=ignoreboth
特定の履歴を削除する history -d 42
全履歴を削除する history -c
履歴をファイルに書き出す history -w
複数ターミナルで履歴を共有する shopt -s histappend + PROMPT_COMMAND
履歴機能を無効化する export HISTSIZE=0

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。