tcshのヒストリーの消去

FreeBSDで標準のshellはtcsh。Linuxだとbashあたりだろうから「何それ知らない」という人も。cshの上位互換だよね。

このtcshの何が良いかって[↑][↓]キーを押すとヒストリ (history)機能が使えること。つまり[↑]を1回押すと1つ前に入力したコマンドが表示されるので[Enter]を押すとそれが実行される。
それだけならどうでも良いけど、過去に入力したコマンドの最初の数文字を入力して[↑]を押せば入力した部分は確定でその後の部分だけリストリで補完される。だから、よく使うようなコマンドは最初の数文字入れて[↑]を何度か押せば出てくる。これが単純ながらとても便利。
そのせいでbashに移行できない。bashにも補完機能はあるし高機能だけど全然好みじゃないのよね。(tcshの補完機能もわざと拡張せずに使ってる)

ということで、学生時代からオッサンになった今まで(これからも?)大変長らくお世話になっているtcshのヒストリ機能なんだけど、基本的には問題ないものの稀におかしくなることがあってログアウトする度に履歴ファイルの容量が倍になる不具合が発生することがある。原因はヒストリファイルの破損なんだろうけど何故そうなったら倍々になるのかは知らない。

ヒストリファイルはユーザーディレクトリ直下にある .history

ファイルの容量が倍になるといっても最初は大した問題じゃない。でも、「倍々」が続くとヤバくてログインログアウトを何度も繰り返していると次第にそのログイン・ログアウトに時間がかかるようになるしシステムの空きメモリもガンガン減るようになる。最後はシステムの全空きメモリを食いつぶして既存のプロセスが殺されたり動かなくなったり、もちろんそうなった時はもうアウトなのでログインも何もできなくなっている。運良くシェルが表示されるところまで辿り着いてもコマンドを打ったとたんにハングアップとか。
もしもシステムが動いている内に気付いたなら、或いは残念なことにシステムが動かなくなってしまってたら諦めてシステムを再起動してから、とにかく速攻でやることはヒストリーファイルの始末。ただし、これがやっかいなことに普通にヒストリーファイルを削除してもログアウト・ログインで戻ってしまう(ログインしたらメモリに取り込んでログアウトで書き出すから)。しかも不具合(破損)が起きているときはそれが残ったまま。

不具合を断ち切るのは以下。

実行例:  rootの履歴ファイルを消す
# echo > /root/.history && history -c

凄い簡単、これだけ。