はじめに
Linuxを操作していて、「さっき打ったあの長いコマンド、もう一回打ちたいな」と思った時、皆さんはどうしていますか?おそらく、キーボードの「上矢印キー(↑)」を押して履歴を遡っている方が多いと思います。
もちろん直前のコマンドを呼び出すならそれで十分ですが、例えば「3ヶ月前にこのサーバーを構築した時、何のパッケージをインストールしたっけ…?」と思い出したい時、上矢印キーを何千回も押すわけにはいきませんよね。
そこで活躍するのが、過去の自分の足跡をすべて記録している history コマンドです。 今回は、単なる履歴の呼び出しにとどまらない、環境構築の「自動マニュアル」としても使える history の強力な使い方を紹介します。

1. history コマンドの基本
使い方は非常にシンプルで、ターミナルに以下のように打ち込むだけです。
history【出力例】
101 cd /var/www/html
102 ls -l
103 nano index.html
104 systemctl restart nginx
105 historyこのように、左側に「履歴番号」、右側に「実行したコマンド」がズラッと一覧表示されます。
2. 真の価値は「環境構築の記録」にある
この履歴データは、実はターミナルを閉じても消えません。(ホームディレクトリにある .bash_history という隠しファイルに自動的に保存され続けています)。
これが最も役立つのが、サーバーの環境構築や初期設定の場面です。
「とりあえずネットの記事を見ながら色々コマンドを打って、なんとか動くようになった!」という経験はありませんか? その後、「他のPCでも同じ環境を作りたい」「チームメンバーに手順書を共有したい」となった時、自分の記憶を頼りに手順書を書くのは困難です。
そんな時は、自分が打った history の結果をコピペするだけで、立派な環境構築の手順書(マニュアル)が完成します。 history は、あなたの作業を裏でずっと記録してくれている優秀な書記官なのです。
3. 実務で役立つ!履歴の検索と再実行
何百、何千という履歴の中から目的のコマンドを探し出し、再実行するためのテクニックを紹介します。
① grep で特定のコマンドだけを探す
第2シリーズで学んだ「パイプ(|)」と「検索(grep)」の合わせ技です。これが一番よく使われます。
history | grep "apt install"これで、「過去に何をインストールしたか」だけを絞り込んで表示できます。
② 履歴番号で再実行する (!<番号>)
history で表示された左側の「番号」を使えば、長いコマンドを打ち直すことなく一発で再実行できます。

historyの結果の例
historyで上記のような履歴があるとき 179番目のコマンド(treeっぽく標準コマンドだけでフォルダ構造表示させる)を再度実行したいときは以下のように実行すればOKです。
#過去コマンドを1撃で再実行
# !<番号>
!179ディレクトリ構造をいい感じに出力させるコマンドチートシート
フォルダの形式を確認したいとき、treeコマンドが使えない(標準)や、TREEより形式を自分好みに調整したいという場合があると思います。そんな時に使えるコマンド集を作ってみました。良ければ参考にしてみてください。
【ステガノグラフィ入門】#3 LSB法とその仕組み ~スパイ映画だけの話じゃない!画像にメッセージを忍ばせる驚きの技術とは?~
なぜ見た目を変えずに画像へ情報を隠せるのか?その答えが「ステガノグラフィ」の基本『LSB法』です。人間の目では識別困難な、色のごく僅かな変化(最下位ビット)を利用する巧妙な仕組みを図解します。
③ 直前のコマンドを再実行する (!!)
上矢印キーを押してEnterを押すのと同じですが、コマンドライン上で「直前のコマンド」を意味するショートカットです。 特に、**「あ! sudo を付け忘れて権限エラーになった!」**という時に、以下のように打つのがエンジニアの定番の手癖です。
sudo !!(直前のコマンドの先頭に sudo をくっつけて再実行してくれます)
4. 履歴を消したい時(パスワードを打っちゃった!)
たまに、コマンドの引数に間違えて「自分のパスワード」や「秘密のキー」をそのまま打ち込んでしまうというミスがあります。履歴に残ったままだとセキュリティ上危険です。
特定の行だけ削除する (-d)
103番の履歴を消したい場合は、-d (delete) オプションを使います。
# -d <数字> で数字のログを削除
history -d 103履歴をすべてリセットする (-c)
環境構築が終わって、ごちゃごちゃになった履歴を一度真っさらにしたい時は、-c (clear) を使います。
history -c5. 【おまけ】履歴に「実行日時」を表示する
デフォルトの history は「いつ」そのコマンドを実行したか分かりません。 第2回で学んだ .bashrc に以下の設定を追記すると、履歴にタイムスタンプ(日時)がつくようになります!
# ~/.bashrc に以下を追記
export HISTTIMEFORMAT='%Y-%m-%d %H:%M:%S '設定を反映(source ~/.bashrc)した後に history を打つと、以下のように記録されるようになります。
105 2024-03-15 10:00:00 systemctl restart nginxいつ作業したか一目でわかるので、トラブルシューティングの際に「昨日エラーが起きた時間に何をしてたっけ?」を振り返るのに劇的に役立ちます。
まとめ
history: 過去のコマンド実行記録を一覧表示する。環境構築の手順書づくりに最適。- 検索:
history | grep 〇〇で目的のコマンドを探す。 - 再実行:
!番号で指定した履歴を、!!で直前の履歴を再実行。 - 削除: 危険な履歴は
history -d 番号でこっそり消す。
過去の自分を振り返る術を身につけましたね! しかし、「いちいち history | grep と打つすら面倒くさい…もっと直感的に探したい!」というワガママな方のために、次回は「現代のタイムマシン」とも呼べる最強の履歴検索ショートカットを紹介します。
第四回”Linuxコマンド入門 Part4 ~自分好みの環境を整える~”では、linuxでの作業を効率化し自分好みの環境を作り上げる方法を紹介しています
Linuxコマンド入門 Part4 ~ターミナル操作の効率化とシェル環境のカスタマイズ~
Linuxで、コマンドライン操作を効率化したり、自分好みにカスタマイズする方法を学ぼう。
ここまで読んでいただきありがとうございます。
では、次の記事で。 lumenHero