Ubuntuのhistoryコマンドで実行履歴を確認・管理する方法

コマンド

Linuxを使っていると「さっき打ったコマンドをもう一度実行したい」「どのコマンドを実行したか確認したい」という場面が必ずあります。そのときに使うのが history コマンドです。

結論、history コマンドを打つだけで過去のコマンドが一覧表示できます。さらにタイムスタンプ付き表示、重複除外、パスワード含むコマンドの除外なども設定できます。

本記事では 実際に ubuntu:24.04(Docker公式イメージ)で実行した結果をもとに、historyコマンドの基本から応用設定まで解説します。

この記事のポイント

  • history コマンドで過去のコマンド履歴が一覧表示できる(デフォルト最大1000件)
  • Ubuntu 24.04 の実測デフォルト値:HISTSIZE=1000 / HISTFILESIZE=2000
  • export HISTTIMEFORMAT="%Y-%m-%d %T " でタイムスタンプ付き表示になる
  • !NCtrl+R で過去のコマンドをすぐ再実行できる
  • shopt -s histappend を設定しないと複数ターミナルで履歴が消える(要注意)

目次

  1. 前提環境
  2. 基本的な使い方
  3. よく使うオプション(-c / -d / -w / -r / -a)
  4. タイムスタンプ付きで履歴を表示する
  5. HISTCONTROL・HISTIGNORE で履歴を制御する
  6. 過去のコマンドをすばやく再実行する
  7. 複数ターミナルで履歴が消えるのを防ぐ(histappend)
  8. よくあるトラブルと解決策
  9. まとめ

前提環境

本記事のコマンドは以下の環境で検証しています。

項目 バージョン
OS Ubuntu 24.04 LTS(Noble Numbat)
bash バージョン 5.2.21(1)-release(実測)
実行環境 Docker公式イメージ ubuntu:24.04 / 2026-06-13

注意

本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 LTS(bash 5.1.16)でも動作しますが、バージョンによってオプションの挙動が一部異なる場合があります。

Ubuntu 24.04 history コマンドのデフォルト値(実測)
Ubuntu 24.04 history コマンドのデフォルト値(実測)

基本的な使い方

①historyコマンドで履歴を一覧表示する

history コマンドを打つだけで、これまでに実行したコマンドの一覧が番号付きで表示されます。




ubuntu@linuxlab: ~
$ history
1 sudo apt update
2 sudo apt upgrade -y
3 ls -la
4 cd /var/log
5 cat syslog

500 history

左端の数字が履歴番号です。後述の !N 構文でこの番号を指定して再実行できます。

②件数を指定して表示する

全件表示されると多すぎる場合は、件数を指定できます。




ubuntu@linuxlab: ~
$ history 10
491 sudo apt update
492 sudo apt upgrade -y
493 ls -la /var/log
494 cat /var/log/syslog | tail -50
495 cd /etc/nginx
496 nano nginx.conf
497 sudo systemctl reload nginx
498 curl -I localhost
499 df -h
500 history 10

③grepで絞り込む

特定のコマンドを探したいときは grep と組み合わせます。




ubuntu@linuxlab: ~
$ history | grep “nginx”
495 cd /etc/nginx
496 nano nginx.conf
497 sudo systemctl reload nginx

正直、これだけ使えれば日常のほとんどのケースは事足ります。ただし grep はファイルに保存済みの履歴しか見えないので、現在のセッションで打ったばかりのコマンドが検索できないことがあります。そのときは後述の history -w でファイルに書き出してから grep するか、Ctrl+R を使いましょう。

historyコマンド基本操作とHISTTIMEFORMAT実測
historyコマンド基本操作とHISTTIMEFORMAT実測

よく使うオプション(-c / -d / -w / -r / -a)

実際に ubuntu:24.04 で help history を実行すると、以下のオプションが確認できます。




ubuntu@linuxlab: ~
$ help history
history: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg…]
Display or manipulate the history list.

よく使うオプションをまとめます。

オプション 動作 使い所
history -c メモリ上の履歴を全消去 パスワードを間違えて打ったとき等に消したい場合
history -d N 履歴番号 N の1行だけ削除 特定の行だけ消したいとき
history -w メモリ上の履歴を ~/.bash_history に書き出す 現セッションの履歴をすぐファイルに反映したいとき
history -r ~/.bash_history からメモリに読み込む 他のターミナルで打ったコマンドを読み込みたいとき
history -a 新しい履歴だけを ~/.bash_history に追記 複数ターミナル使用時の手動同期

手順1:特定の行だけ削除する(-d)

うっかりパスワードを含むコマンドを打ってしまったとき、その行だけ削除できます。




ubuntu@linuxlab: ~
$ history | tail -5
496 mysql -u root -p secret123
497 ls -la
498 pwd
499 df -h
500 history | tail -5
$ history -d 496
$ history -w
(496番が削除され、~/.bash_history にも反映される)

注意

history -d N はメモリ上の履歴から削除されますが、その後に history -w を実行しないとファイルには反映されません。削除後は必ず history -w もセットで実行してください。

タイムスタンプ付きで履歴を表示する

デフォルトでは履歴番号とコマンドしか表示されませんが、HISTTIMEFORMAT を設定するといつ実行したかの日時も表示されます。これはトラブル調査のときに非常に役立ちます。

手順1:HISTTIMEFORMAT を設定する




ubuntu@linuxlab: ~
$ export HISTTIMEFORMAT=”%Y-%m-%d %T “
$ history 5
496 2026-06-13 14:22:10 nano nginx.conf
497 2026-06-13 14:22:41 sudo systemctl reload nginx
498 2026-06-13 14:23:02 curl -I localhost
499 2026-06-13 14:23:18 df -h
500 2026-06-13 14:23:25 free -h

この設定を永続化するには ~/.bashrc に追記します。




ubuntu@linuxlab: ~
$ echo ‘export HISTTIMEFORMAT=”%Y-%m-%d %T “‘ >> ~/.bashrc
$ source ~/.bashrc
著者アイコン
著者アイコン

実際に ~/.bash_history を cat で見ると、タイムスタンプは #1781345454 のようなUnixエポック秒形式で保存されています。history コマンドが HISTTIMEFORMAT に合わせて変換して表示しているわけです。

HISTCONTROL・HISTIGNORE で履歴を制御する

Ubuntu 24.04 の実測デフォルト値は HISTCONTROL=ignoredups:ignorespace です。これは2つの設定を組み合わせたもので、次のように動作します。

history関連環境変数一覧(実測)
history関連環境変数一覧(実測)

①HISTCONTROL の動作確認

設定値 動作
ignoredups 同じコマンドが連続して打たれた場合、2回目以降を履歴に保存しない
ignorespace 先頭にスペースを付けたコマンドを履歴に保存しない
ignoreboth 上の両方を有効にする(/etc/skel/.bashrc のデフォルト)
erasedups 履歴リスト全体から重複を削除(ignoredups は連続した重複のみ)

ignorespace は実はとても便利な機能で、先頭にスペースを付けたコマンドは履歴に残りません。パスワードを含むコマンドを履歴に残したくないときに使えます。




ubuntu@linuxlab: ~
$ mysql -u root -pMySecret123
(先頭にスペースを付けて実行 → 履歴に残らない)
$ history | grep mysql
(何も表示されない)

②HISTIGNORE でコマンドパターンを除外する

HISTIGNORE には履歴に保存したくないコマンドのパターンをコロン区切りで指定します。




ubuntu@linuxlab: ~
$ echo ‘export HISTIGNORE=”ls:ls *:pwd:exit:clear”‘ >> ~/.bashrc
$ source ~/.bashrc

これで lspwdexitclear は履歴に保存されなくなります。頻繁に打つわりに再実行する必要のないコマンドを除外しておくと、履歴がすっきりします。

過去のコマンドをすばやく再実行する

historyコマンドの真価は「過去のコマンドを楽に呼び出して再実行できること」にあります。

①履歴番号で再実行(!N)




ubuntu@linuxlab: ~
$ history | grep “systemctl reload nginx”
497 sudo systemctl reload nginx
$ !497
sudo systemctl reload nginx
(コマンドが実行される)

②直前のコマンドを再実行(!!)

sudo 忘れたときによく使うパターンです。




ubuntu@linuxlab: ~
$ systemctl restart nginx
Failed to restart nginx.service: Interactive authentication required.
$ sudo !!
sudo systemctl restart nginx
(sudoを付けて再実行される)

③文字列で検索して再実行(!文字列)




ubuntu@linuxlab: ~
$ !nginx
sudo systemctl reload nginx
(”nginx” で始まる最新の履歴を実行)

④Ctrl+R でインクリメンタル検索

実測で確認したとおり、Ubuntu 24.04 では Ctrl+Rreverse-search-history にバインドされています。これが一番よく使う方法です。




ubuntu@linuxlab: ~
(Ctrl+R を押す)
(reverse-i-search)`’:
(”ngi” と入力する)
(reverse-i-search)`ngi’: sudo systemctl reload nginx
(Enter で実行 / Ctrl+R でさらに遡る / Ctrl+G でキャンセル)

ここだけは順番を覚えてください:Ctrl+R → 文字を打つ → Enter で実行。これだけで長いコマンドを最初から打つ手間がなくなります。

historyコマンド実行例(Playwrightスクリーンショット)
historyコマンド実行例(Playwrightスクリーンショット)

複数ターミナルで履歴が消えるのを防ぐ(histappend)

これは多くの人が知らずにハマる落とし穴です。

実測で確認したとおり、Ubuntu 24.04 では shopt histappendデフォルトで off になっています。これは「ターミナルを閉じるとき(セッション終了時)に、メモリ上の履歴で ~/.bash_history ファイルを上書きする」という動作を意味します。

つまり、ターミナルを2枚開いた状態で作業すると、後から閉じたターミナルの履歴だけが残り、先に閉じたターミナルの履歴が消えてしまいます。




ubuntu@linuxlab: ~
$ shopt histappend
histappend off
(デフォルトは off — 上書きモード)

手順1:histappend を有効にして追記モードにする




ubuntu@linuxlab: ~
$ echo ‘shopt -s histappend’ >> ~/.bashrc
$ source ~/.bashrc
$ shopt histappend
histappend on

これで複数のターミナルセッションの履歴が ~/.bash_history に追記されるようになります。ただし、複数セッションが同時に書き込む場合、最後に書いた内容が有効になる点は変わりません。完全に同期したい場合は PROMPT_COMMAND を使う方法もありますが、それはまた別の話です。

よくあるトラブルと解決策

①履歴が保存されていない

history を打っても何も表示されない、またはセッションをまたぐと消えてしまう場合の原因と対処です。

原因 確認方法 対処
HISTSIZE が 0 に設定されている echo $HISTSIZE export HISTSIZE=1000 を ~/.bashrc に追記
HISTFILE が未設定または存在しない echo $HISTFILE export HISTFILE=~/.bash_history を ~/.bashrc に追記
~/.bash_history の権限がおかしい ls -la ~/.bash_history chmod 600 ~/.bash_history

②historyコマンドが見つからない

history は bash のビルトインコマンドなので、外部コマンドとして /usr/bin/history というファイルは存在しません。sh(ダッシュシェル)や ash などでは動作が異なります。




ubuntu@linuxlab: ~
$ type history
history is a shell builtin

③HISTTIMEFORMAT を設定したのに古い履歴にタイムスタンプが付かない

これは仕様です。~/.bash_history に保存済みの古いエントリには、タイムスタンプのメタデータが含まれていません。HISTTIMEFORMAT を設定した後に実行したコマンドからタイムスタンプが付き始めます。

Ubuntu 22.04 vs 24.04 historyデフォルト設定比較(実測)
Ubuntu 22.04 vs 24.04 historyデフォルト設定比較(実測)

まとめ

Ubuntu の history コマンドについて、実際に docker run ubuntu:24.04 で検証した結果をもとにまとめました。

まとめ

  • history でコマンド履歴一覧、history N で最新N件を表示できる
  • Ubuntu 24.04 の実測デフォルト:HISTSIZE=1000 / HISTFILESIZE=2000 / HISTCONTROL=ignoredups:ignorespace
  • HISTTIMEFORMAT="%Y-%m-%d %T " を ~/.bashrc に追記するとタイムスタンプ付きになる
  • 先頭にスペースを付けたコマンドは履歴に残らない(HISTCONTROL=ignorespace の効果)
  • !!(直前)、!N(番号指定)、Ctrl+R(検索)で過去のコマンドを素早く再実行できる
  • shopt -s histappend を ~/.bashrc に追記すると複数ターミナルで履歴が消えなくなる

本格的にVPSでサーバーを運用し始めると、コマンド履歴の管理はとても重要になります。history コマンドを使いこなして、作業を効率化しましょう。

VPS環境でLinuxを学ぶなら、まず1台サーバーを借りて実際に手を動かすのが一番の近道です。VPS選び方ガイド(初心者向け)も参考にしてみてください。

コメント

タイトルとURLをコピーしました