🎯 この記事で学べること
- 1historyコマンドの基本的な使い方をマスターできます
- 2Ctrl+Rを使ったインクリメンタル検索で素早くコマンドを見つけられるようになります
- 3!記号を使った履歴展開で効率的にコマンドを再実行できるようになります
- 4履歴のカスタマイズ設定で、より使いやすい環境を構築できます
- 5セキュリティを考慮した履歴管理の方法を習得できます
読了時間: 約8分
はじめに
こんにちは!今日は「history」という、とっても便利なコマンドを学びましょう。
「さっき打った長いコマンド、もう一度使いたい...」「昨日実行したコマンドを忘れてしまった...」そんな経験はありませんか?
historyコマンドは、まるで優秀な秘書のように、あなたが今まで実行したコマンドをすべて記憶してくれています。しかも、ただ記憶するだけでなく、簡単に呼び出して再実行できるんです!
historyの基本的な使い方
コマンド履歴を表示(過去の記憶を呼び起こそう!)
まずは基本から始めましょう:
# 履歴をすべて表示
history
# 最新の10件を表示(最近何したかな?)
history 10
# 履歴番号付きで表示(デフォルト)
history | tail -20
ファイルツリー
番号付きで表示されるので、後で簡単に再実行できますよ!
履歴から特定のコマンドを検索(探偵モード!)
「あのコマンド、どうやって打ったんだっけ?」という時は:
# grepと組み合わせて検索
history | grep "ls"
# 特定の文字列を含むコマンドを検索(大文字小文字無視)
history | grep -i "docker"
# 行番号付きで検索結果を表示
history | grep -n "git"
grepコマンドとパイプ(|)を使うことで、履歴の中から特定のコマンドだけを抜き出せます。まるでフィルターのようですね!
🎮 理解度チェック
履歴からコマンドを実行する方法(タイムマシン機能!)
履歴番号を使った実行(番号で呼び出し!)
「500番のコマンドをもう一度!」そんな時は:
# 履歴番号500のコマンドを実行
!500
# 最後のコマンドを再実行(一番使う!)
!!
# 2つ前のコマンドを実行
!-2
!!
は「さっきのコマンドをもう一回!」という意味です。特にsudoを忘れた時にsudo !!
とするのが便利ですよ!
文字列マッチングによる実行(おまかせ検索!)
番号を覚えていなくても大丈夫:
# "ls"で始まる最新のコマンドを実行
!ls
# "git"を含む最新のコマンドを実行
!?git?
# 最後に実行したコマンドの引数を使用
ls !$ # 例:mv file.txt backup.txt の後なら ls backup.txt になる
ファイルツリー
便利なショートカットキー(これが本当にすごい!)
Ctrl+R: インクリメンタル検索(魔法の検索機能!)
これは本当に便利です!まるでタイムマシンで検索するような感覚です:
# Ctrl+Rを押すと検索モードに入る
(reverse-i-search)`git': git commit -m "Update README"
# もう一度Ctrl+Rで次の候補へ
# Ctrl+Gでキャンセル
Ctrl+Rを押してから文字を入力すると、履歴からリアルタイムでマッチするコマンドを探してくれます。「git」と入力すれば、git関連のコマンドが次々に出てきます!
矢印キーでの履歴参照(シンプルで便利!)
# ↑キー: 前のコマンド
# ↓キー: 次のコマンド
# Ctrl+P: 前のコマンド(↑と同じ) - Previous
# Ctrl+N: 次のコマンド(↓と同じ) - Next
矢印キーをカチカチ押すだけで、過去のコマンドを簡単に呼び出せます!
🎮 理解度チェック
history設定のカスタマイズ
履歴サイズの変更
# ~/.bashrcに追加
export HISTSIZE=10000 # メモリ上の履歴サイズ
export HISTFILESIZE=20000 # ファイルの履歴サイズ
履歴の保存方法をカスタマイズ
# 重複を削除
export HISTCONTROL=ignoredups
# 重複とスペースで始まるコマンドを無視
export HISTCONTROL=ignoreboth
# 特定のコマンドを履歴から除外
export HISTIGNORE="ls:cd:pwd:exit:history"
タイムスタンプを追加
# 履歴にタイムスタンプを記録
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
# 設定後のhistory表示例
# 1234 2025-08-08 14:30:45 ls -la
# 1235 2025-08-08 14:31:02 cd /home/user
ファイルツリー
高度な活用テクニック
履歴の展開と編集
# 最後のコマンドを表示(実行せず)
!!:p
# 最後のコマンドの特定の引数を使用
!^ # 最初の引数
!$ # 最後の引数
!* # すべての引数
# 例: mv file1.txt file2.txt を実行後
ls !$ # ls file2.txt と同じ
履歴の置換
# 最後のコマンドの文字列を置換して実行
^old^new^
# 例
ls -la /home/user
^user^root^ # ls -la /home/root を実行
fc コマンドでの編集
# 最後のコマンドをエディタで編集
fc
# 履歴番号100-105をエディタで編集
fc 100 105
# viエディタを指定
fc -e vi
履歴の管理
履歴のクリア
# 現在のセッションの履歴をクリア
history -c
# 履歴ファイルを削除
rm ~/.bash_history
# 特定の履歴エントリを削除
history -d 番号
履歴の保存と読み込み
# 現在の履歴をファイルに書き込み
history -w
# 履歴ファイルから読み込み
history -r
# 別ファイルに保存
history -w ~/my_history.txt
セキュリティ上の注意点
パスワードを含むコマンドの扱い
# スペースで始めると履歴に残らない(HISTCONTROL=ignorespaceの場合)
mysql -u root -pMyPassword # 先頭にスペース
# 履歴から特定のエントリを削除
history -d 番号
共有環境での注意
# 履歴ファイルの権限を確認
ls -la ~/.bash_history
# 他ユーザーから読めないように設定
chmod 600 ~/.bash_history
実用的な活用例
よく使うコマンドの統計
# 最も使用頻度の高いコマンドTOP10
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -10
# 特定期間のコマンドを抽出(タイムスタンプ設定時)
history | grep "2025-08-08"
作業ログの作成
# 今日の作業内容を出力
history | grep "$(date +%Y-%m-%d)" > ~/work_log_$(date +%Y%m%d).txt
# 特定のプロジェクトの作業履歴
history | grep -E "(git|docker|npm)" > project_commands.txt
ファイルツリー
まとめ
historyコマンドは単なる履歴表示ツールではなく、効率的な作業フローを構築するための強力な機能です。以下のポイントを押さえることで、日々の作業効率を大幅に向上させることができます:
- Ctrl+R でインクリメンタル検索を活用
- !記号 を使った素早いコマンド再実行
- HISTCONTROL で不要な履歴を除外
- HISTTIMEFORMAT でタイムスタンプを記録
- セキュリティを考慮した履歴管理
これらのテクニックを組み合わせることで、ターミナル作業がより快適で生産的になります。