Linuxコマンド履歴の完全ガイド!historyを極めて作業効率10倍アップ

Linux

「さっき実行した長いコマンド、もう一回打つの面倒…」
「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:逆方向検索(これが革命的!)

コマンド履歴機能の真骨頂がこれです。

使い方:

  1. Ctrl+Rを押す
  2. 検索したいコマンドの一部を入力
  3. 該当するコマンドが表示される
  4. 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を制す!

ここまで読んでいただき、ありがとうございました!

今すぐ使える必須ショートカット

  1. Ctrl+R:履歴の逆方向検索(最重要!)
  2. !!:直前のコマンドを再実行
  3. !$:直前のコマンドの最後の引数

設定すべき環境変数

.bashrcに追加:

export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTCONTROL=ignoreboth
export HISTTIMEFORMAT="%F %T "

履歴マスターへの道

初級:

  • history コマンドを使える
  • 矢印キーで履歴を辿れる

中級:

  • Ctrl+R を使いこなす
  • ! を使った履歴展開ができる

上級:

  • 履歴の設定をカスタマイズ
  • 複数端末で履歴を共有
  • 統計分析で使用パターンを把握

コマンド履歴は、Linuxでの作業効率を劇的に向上させる機能です。

この記事で学んだテクニックを使えば、もう同じコマンドを何度も打つ必要はありません。過去のコマンドという宝の山を、存分に活用してください!

Happy Command History! 🐧

コメント

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