「さっき実行した長いコマンド、もう一回打つの面倒…」
「3日前に使ったあのコマンド、何だっけ?」
「同じコマンドを何度も打ち直すのが苦痛…」
Linuxを使っていて、こんな悩みありませんか?
実は、Linuxには強力なコマンド履歴機能があって、過去に実行したコマンドを簡単に呼び出したり、検索したり、再実行したりできるんです。これをマスターすれば、作業効率が劇的に向上します!
この記事を読めば、historyコマンドの基本から、Ctrl+Rでの検索、履歴の編集や管理まで、コマンド履歴のすべてが分かります。もう同じコマンドを二度と打ち直す必要はありません!
historyコマンドの基本操作

コマンド履歴を表示する
最も基本的な使い方から始めましょう。
基本コマンド:
# 履歴をすべて表示
history
# 最新の10件だけ表示
history 10
# 出力例
495 cd /var/log
496 ls -la
497 tail -f syslog
498 grep error syslog
499 sudo systemctl restart nginx
500 history
便利な表示オプション:
# 時刻付きで表示
HISTTIMEFORMAT="%Y-%m-%d %T " history
# 結果
495 2024-01-15 14:30:22 cd /var/log
496 2024-01-15 14:30:25 ls -la
履歴番号でコマンドを再実行
履歴番号を使って簡単に再実行できます。
実行方法:
# 履歴番号500のコマンドを実行
!500
# 最後のコマンドを再実行
!!
# 2つ前のコマンドを実行
!-2
実用例:
# sudoを付け忘れた時の定番技
$ apt update
Permission denied
$ sudo !!
# sudo apt update が実行される
最強の履歴検索テクニック
Ctrl+R:逆方向検索(これが革命的!)
コマンド履歴機能の真骨頂がこれです。
使い方:
- Ctrl+Rを押す
- 検索したいコマンドの一部を入力
- 該当するコマンドが表示される
- Enterで実行、Ctrl+Cでキャンセル
実例:
# Ctrl+Rを押して「nginx」と入力
(reverse-i-search)`nginx': sudo systemctl restart nginx
# さらにCtrl+Rを押すと、より古い履歴を検索
(reverse-i-search)`nginx': sudo nano /etc/nginx/nginx.conf
文字列で始まるコマンドを検索
特定の文字列で始まるコマンドを素早く見つけます。
検索方法:
# gitで始まる最新のコマンド
!git
# dockerで始まる最新のコマンド
!docker
# ssで始まるコマンドを確認(実行はしない)
!ss:p
文字列を含むコマンドを検索
より柔軟な検索方法です。
検索方法:
# "log"を含む最新のコマンド
!?log
# 確認してから実行
!?error?:p
履歴の矢印キー操作
上下矢印キーでの履歴移動
最も直感的な履歴操作方法です。
基本操作:
- ↑(上矢印):1つ前のコマンド
- ↓(下矢印):1つ後のコマンド
- Ctrl+P:↑と同じ(Previous)
- Ctrl+N:↓と同じ(Next)
履歴の編集
矢印キーで呼び出したコマンドは編集可能です。
編集のコツ:
# 元のコマンド
ls -la /var/log
# ↑で呼び出して編集
ls -la /var/log/nginx # パスを追加
# Ctrl+Aで行頭、Ctrl+Eで行末に移動
# Ctrl+Wで単語削除、Ctrl+Uで行頭まで削除
履歴展開の高度な使い方
直前のコマンドの引数を再利用
これを知っていると作業が格段に速くなります!
便利な展開記号:
# 直前のコマンドの最後の引数
!$
# 使用例
$ mkdir /home/user/newproject
$ cd !$
# cd /home/user/newproject が実行される
# 直前のコマンドのすべての引数
!*
# 使用例
$ cp file1.txt file2.txt /backup/
$ ls !*
# ls file1.txt file2.txt /backup/ が実行される
特定の引数を取り出す
より細かい制御が可能です。
# 直前のコマンドの最初の引数
!^
# 例
$ mv oldname.txt newname.txt
$ cat !^
# cat oldname.txt が実行される
# n番目の引数
!:n
# 例
$ echo first second third
$ echo !:2
# echo second が実行される
履歴の管理と設定
履歴のサイズを変更
デフォルトでは履歴数に制限があります。
設定方法(.bashrcに追加):
# メモリ上の履歴数
export HISTSIZE=10000
# ファイルに保存される履歴数
export HISTFILESIZE=20000
# 履歴ファイルの場所(デフォルト)
export HISTFILE=~/.bash_history
履歴から除外する設定
セキュリティや整理のための設定です。
除外設定:
# スペースで始まるコマンドを履歴に残さない
export HISTCONTROL=ignorespace
# 重複するコマンドを履歴に残さない
export HISTCONTROL=ignoredups
# 両方を設定
export HISTCONTROL=ignoreboth
# 特定のコマンドを除外
export HISTIGNORE="ls:cd:pwd:exit:history"
履歴に時刻を記録
いつ実行したか分かると便利です。
# .bashrcに追加
export HISTTIMEFORMAT="%F %T "
# フォーマットの意味
# %F:日付(YYYY-MM-DD)
# %T:時刻(HH:MM:SS)
# %d/%m/%y %H:%M:%S のような形式も可能
複数端末での履歴共有
リアルタイム履歴共有
複数のターミナルで履歴を共有する設定です。
.bashrcに追加:
# コマンド実行後、即座に履歴ファイルに書き込み
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
# または、より簡単に
shopt -s histappend
export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
履歴の同期コマンド
手動で履歴を同期する方法です。
# 現在の履歴をファイルに書き込み
history -w
# ファイルから履歴を読み込み
history -r
# 履歴をファイルに追加
history -a
# メモリの履歴をクリア
history -c
履歴の検索と絞り込み
grepを使った高度な検索
特定のパターンを含むコマンドを探します。
# dockerコマンドの履歴を検索
history | grep docker
# sudoで実行したコマンドを検索
history | grep "^sudo"
# 特定の日付のコマンドを検索(時刻記録が必要)
history | grep "2024-01-15"
# エラーを含むコマンドを検索
history | grep -i error
履歴の統計を取る
よく使うコマンドを分析できます。
# 最も使用頻度の高いコマンドトップ10
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10
# コマンドの組み合わせトップ5
history | awk '{print $2" "$3}' | sort | uniq -c | sort -rn | head -5
セキュリティとプライバシー
パスワードを履歴に残さない
重要:パスワードは履歴に残さないようにしましょう。
対策方法:
# スペースを先頭に付けて実行(HISTCONTROL=ignorespace時)
mysql -u root -pSecretPassword
# 履歴から特定の行を削除
history -d 500 # 500番の履歴を削除
# 現在のセッションの履歴をクリア
history -c
履歴ファイルの安全な削除
完全に履歴を消去する方法です。
# 履歴ファイルを安全に削除
shred -vfz -n 3 ~/.bash_history
# または単純に削除
rm ~/.bash_history
history -c
便利なエイリアスと関数
履歴関連のエイリアス
.bashrcに追加:
# よく使う履歴コマンド
alias h='history'
alias hg='history | grep'
# 最新の20件
alias h20='history 20'
# 履歴をクリア
alias hc='history -c'
# 履歴から実行
alias r='fc -s'
カスタム関数
より高度な履歴操作のための関数です。
# 履歴をfzfで検索(fzfのインストールが必要)
function fh() {
eval $(history | fzf --tac | sed 's/^[ ]*[0-9]*[ ]*//')
}
# 指定した文字列を含む履歴を実行
function hr() {
history | grep "$1" | tail -1 | sed 's/^[ ]*[0-9]*[ ]*//' | bash
}
zshとfishでの履歴機能
zshの履歴機能
bashより高機能な履歴管理ができます。
.zshrcの設定:
# 履歴サイズ
HISTSIZE=50000
SAVEHIST=50000
# 履歴ファイル
HISTFILE=~/.zsh_history
# 重複を記録しない
setopt HIST_IGNORE_DUPS
# 履歴を共有
setopt SHARE_HISTORY
fishの履歴機能
より直感的な履歴検索が可能です。
# 履歴検索は自動補完で表示
# ↑キーで部分一致検索
# Ctrl+Rで対話的検索
まとめ:履歴を制する者は、Linuxを制す!
ここまで読んでいただき、ありがとうございました!
今すぐ使える必須ショートカット
- Ctrl+R:履歴の逆方向検索(最重要!)
- !!:直前のコマンドを再実行
- !$:直前のコマンドの最後の引数
設定すべき環境変数
.bashrcに追加:
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "
履歴マスターへの道
初級:
- history コマンドを使える
- 矢印キーで履歴を辿れる
中級:
- Ctrl+R を使いこなす
- ! を使った履歴展開ができる
上級:
- 履歴の設定をカスタマイズ
- 複数端末で履歴を共有
- 統計分析で使用パターンを把握
コマンド履歴は、Linuxでの作業効率を劇的に向上させる機能です。
この記事で学んだテクニックを使えば、もう同じコマンドを何度も打つ必要はありません。過去のコマンドという宝の山を、存分に活用してください!
Happy Command History! 🐧
コメント