Linuxを使っていると「さっき打ったコマンドをもう一度実行したい」「どのコマンドを実行したか確認したい」という場面が必ずあります。そのときに使うのが history コマンドです。
結論、history コマンドを打つだけで過去のコマンドが一覧表示できます。さらにタイムスタンプ付き表示、重複除外、パスワード含むコマンドの除外なども設定できます。
本記事では 実際に ubuntu:24.04(Docker公式イメージ)で実行した結果をもとに、historyコマンドの基本から応用設定まで解説します。
この記事のポイント
historyコマンドで過去のコマンド履歴が一覧表示できる(デフォルト最大1000件)- Ubuntu 24.04 の実測デフォルト値:HISTSIZE=1000 / HISTFILESIZE=2000
export HISTTIMEFORMAT="%Y-%m-%d %T "でタイムスタンプ付き表示になる!NやCtrl+Rで過去のコマンドをすぐ再実行できるshopt -s histappendを設定しないと複数ターミナルで履歴が消える(要注意)
目次
- 前提環境
- 基本的な使い方
- よく使うオプション(-c / -d / -w / -r / -a)
- タイムスタンプ付きで履歴を表示する
- HISTCONTROL・HISTIGNORE で履歴を制御する
- 過去のコマンドをすばやく再実行する
- 複数ターミナルで履歴が消えるのを防ぐ(histappend)
- よくあるトラブルと解決策
- まとめ
前提環境
本記事のコマンドは以下の環境で検証しています。
| 項目 | バージョン |
|---|---|
| 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)でも動作しますが、バージョンによってオプションの挙動が一部異なる場合があります。

基本的な使い方
①historyコマンドで履歴を一覧表示する
history コマンドを打つだけで、これまでに実行したコマンドの一覧が番号付きで表示されます。
1 sudo apt update
2 sudo apt upgrade -y
3 ls -la
4 cd /var/log
5 cat syslog
…
500 history
左端の数字が履歴番号です。後述の !N 構文でこの番号を指定して再実行できます。
②件数を指定して表示する
全件表示されると多すぎる場合は、件数を指定できます。
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 と組み合わせます。
495 cd /etc/nginx
496 nano nginx.conf
497 sudo systemctl reload nginx
正直、これだけ使えれば日常のほとんどのケースは事足ります。ただし grep はファイルに保存済みの履歴しか見えないので、現在のセッションで打ったばかりのコマンドが検索できないことがあります。そのときは後述の history -w でファイルに書き出してから grep するか、Ctrl+R を使いましょう。

よく使うオプション(-c / -d / -w / -r / -a)
実際に ubuntu:24.04 で 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)
うっかりパスワードを含むコマンドを打ってしまったとき、その行だけ削除できます。
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 を設定する
$ 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 に追記します。
$ source ~/.bashrc
HISTCONTROL・HISTIGNORE で履歴を制御する
Ubuntu 24.04 の実測デフォルト値は HISTCONTROL=ignoredups:ignorespace です。これは2つの設定を組み合わせたもので、次のように動作します。

①HISTCONTROL の動作確認
| 設定値 | 動作 |
|---|---|
ignoredups |
同じコマンドが連続して打たれた場合、2回目以降を履歴に保存しない |
ignorespace |
先頭にスペースを付けたコマンドを履歴に保存しない |
ignoreboth |
上の両方を有効にする(/etc/skel/.bashrc のデフォルト) |
erasedups |
履歴リスト全体から重複を削除(ignoredups は連続した重複のみ) |
ignorespace は実はとても便利な機能で、先頭にスペースを付けたコマンドは履歴に残りません。パスワードを含むコマンドを履歴に残したくないときに使えます。
(先頭にスペースを付けて実行 → 履歴に残らない)
$ history | grep mysql
(何も表示されない)
②HISTIGNORE でコマンドパターンを除外する
HISTIGNORE には履歴に保存したくないコマンドのパターンをコロン区切りで指定します。
$ source ~/.bashrc
これで ls、pwd、exit、clear は履歴に保存されなくなります。頻繁に打つわりに再実行する必要のないコマンドを除外しておくと、履歴がすっきりします。
過去のコマンドをすばやく再実行する
historyコマンドの真価は「過去のコマンドを楽に呼び出して再実行できること」にあります。
①履歴番号で再実行(!N)
497 sudo systemctl reload nginx
$ !497
sudo systemctl reload nginx
(コマンドが実行される)
②直前のコマンドを再実行(!!)
sudo 忘れたときによく使うパターンです。
Failed to restart nginx.service: Interactive authentication required.
$ sudo !!
sudo systemctl restart nginx
(sudoを付けて再実行される)
③文字列で検索して再実行(!文字列)
sudo systemctl reload nginx
(”nginx” で始まる最新の履歴を実行)
④Ctrl+R でインクリメンタル検索
実測で確認したとおり、Ubuntu 24.04 では Ctrl+R が reverse-search-history にバインドされています。これが一番よく使う方法です。
(reverse-i-search)`’:
(”ngi” と入力する)
(reverse-i-search)`ngi’: sudo systemctl reload nginx
(Enter で実行 / Ctrl+R でさらに遡る / Ctrl+G でキャンセル)
ここだけは順番を覚えてください:Ctrl+R → 文字を打つ → Enter で実行。これだけで長いコマンドを最初から打つ手間がなくなります。

複数ターミナルで履歴が消えるのを防ぐ(histappend)
これは多くの人が知らずにハマる落とし穴です。
実測で確認したとおり、Ubuntu 24.04 では shopt histappend が デフォルトで off になっています。これは「ターミナルを閉じるとき(セッション終了時)に、メモリ上の履歴で ~/.bash_history ファイルを上書きする」という動作を意味します。
つまり、ターミナルを2枚開いた状態で作業すると、後から閉じたターミナルの履歴だけが残り、先に閉じたターミナルの履歴が消えてしまいます。
histappend off
(デフォルトは off — 上書きモード)
手順1:histappend を有効にして追記モードにする
$ 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 などでは動作が異なります。
history is a shell builtin
③HISTTIMEFORMAT を設定したのに古い履歴にタイムスタンプが付かない
これは仕様です。~/.bash_history に保存済みの古いエントリには、タイムスタンプのメタデータが含まれていません。HISTTIMEFORMAT を設定した後に実行したコマンドからタイムスタンプが付き始めます。

まとめ
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選び方ガイド(初心者向け)も参考にしてみてください。



コメント