開発者にとって、Macは標準でターミナルが付いてるので、ssh接続するときに助かります。また、Mac OS XはUnix系のシステムであるため、開発用にローカルWebサーバーを簡単に構築できたりするので、とても便利です。

しかし、私のようにVisualStudioの便利さにどっぷりと浸かり、Unixのコマンドは青春時代の思い出とともに置き去りにした人間には、思い出すのも、覚えるのもしんどいものです。ましてや、パスを思い出すのは、なおさら無理です。

そんな時は、エイリアスを登録しておく方法もありますが、やっぱりhistoryコマンドを使うのが手っ取り早いです。そうなると、一度入力したコマンドは、もう二度と自分で打ち込みたくなくなるので、デフォルトの500個だけでは、保存される履歴は少ないです。

そこで、今回は保存する履歴を10000個に増やしてみました。そして、historyを検索をする2通りの方法をご紹介します。

私みたいに年老いてから、スマホ開発のためにMacに乗り換えて、コマンドが億劫になっている人がもしもいらっしゃれば、少しでも参考になれば嬉しいです。

保存する履歴の数を増やす

ホームディレクトリの「.bash_profile」を編集します。ターミナルを開いて、以下のコマンドを実行します。

$ nano -w ~/.bash_profile

ここでは、nanoを使って編集しています。nanoはデフォルトでは、単語の区切りで改行しちゃいます。ワープロならそれで構わないのですが、プログラムでは具合が悪いので、-wオプションをつけて禁止します。

nanoで「.bash_profile」を開いたら以下の1行を加えて、保存します(CTRL+xの後にY)。私は10000にしましたが、状況に応じて好きな数を設定してください。

HISTFILESIZE=10000

ターミナルを再起動するか、以下のコマンドを実行して、「.bash_profile」を再読み込みさせます。これで10000まで履歴が保存されます。

$ source ~/.bash_profile

historyを効率良く検索する

1. grepを使う方法

単純にgrepでマッチするコマンドを検索します。

$ history | grep nano
380 nano --version
425 nano -w .bash_profile
455 nano -w /usr/local/etc/apache2/2.2/extra/httpd-vhosts.conf
481 nano -w /usr/local/etc/php/5.4/php.ini

以上の検索結果のなかから、455番のコマンドを再実行する場合には次のようにします。

$ !455
# nano -w /usr/local/etc/apache2/2.2/extra/httpd-vhosts.confが実行される

この方法でも十分かもしれませんが、検索されるコマンドが多くなると使いづらくなります。もっとスムーズに検索したくなります。そんな時は、リバースサーチを使います。

2. リバースサーチを使う方法

ターミナルでCTRL+rを押すと、以下のようにプロンプトが変わります。

(reverse-i-search)`': 

そのまま、例えばnanoと入力すると、nanoを含むコマンド履歴が表示されます。

(reverse-i-search)`nano': nano --version

再度、CTRL+rを押すと、次の検索結果を表示することができます。実行したいコマンドが出てくるまで、CTRL+rを押します。

(reverse-i-search)`nano': nano -w .bash_profile

ENTERを押せば、表示しているコマンドが実行されます。中止する時は、CTRL+cを押してください。

メモリにキャッシュされている履歴をクリアする

「今回は入力したコマンドを保存しなくない」という場合は、以下のコマンドを実行します。

$ history -c

キャッシュされているコマンドがクリアされるので、ターミナルを閉じた時に履歴は保存されません。ただし、以下のコマンドを実行した後のコマンドは、保存されるので注意してください。全て保存したくない場合は、最後に実行してください。

他の方法として、ターミナルを開いた後すぐに、以下を実行すれば、メモリに一切キャッシュされなくなります。

$ export HISTSIZE=0

historyはターミナルのセッションを閉じた時に保存される

コマンドの履歴は、セッションを閉じた時にホームディレクトリの「.bash_history」に保存されます。そして、次回開いた時に、このファイルから読み込まれます。

履歴ファイルを完全に消去する

セキュリティ上の理由などで、ホームディレクトリにあるコマンドの履歴ファイル「.bash_history」を完全に消去したい場合は、以下を実行します。

# srm -m ~/.bash_history

-mオプションをつけることで、米国防総省(DOD)方式で多重に上書して消去されるので、復元不能になります。srm(secure remove)コマンドは、完全消去するので、使用上十分留意してください。

Time Machineから履歴ファイルを復元する

履歴ファイル「.bash_history」は、頭にドット(.)が付いているので、そのままではFinderで表示されません。以下のコマンドを実行して、まず見えるようにします。

$ defaults write com.apple.finder AppleShowAllFiles TRUE ; killall Finder

Time Machineで復元が完了したら、以下のコマンドで戻します。そのままでも、構いませんが、デスクトップにもドットファイルが表示されてしまい、とても見づらいので、戻すことをお奨めします。

$ defaults write com.apple.finder AppleShowAllFiles FALSE ; killall Finder

以上、Macのhistoryについてまとめてみました。コマンド入力の省力化については、他にもいろんな方法があります。日々のことなので、自分が覚えやすく、使いやすい方法を是非さがしてみてください。