Zshの履歴が消える?データ紛失バグの原因を徹底解明してみた
Tracking down a Zsh history data loss bug
Tracking down a Zsh history data loss bug
Zshでコマンド履歴が保存されずに消えてしまうバグに遭遇したことはありませんか?この問題の根本原因を追跡し、設定を最適化することで確実に履歴を残すための解決策を解説します。
いい仕事だね!zshの履歴が消えたかもって思ったことはあったけど、実際に調べたことはなかったな。
自分はもう10年近くzshの履歴を溜め込んでる。記事を読んで、過去にそのバグを踏んでた可能性があることに気づいたよ。しかも読み進めてたら、著者がうっかりHISTFILE[1]をエクスポートしてたって話が出てきて、ゾッとしてPCに駆け寄った。ずっとやってたミスに気づいたんだ…。このブログを読んだことに、喜びと悲しみが両方入り混じってるよ。
[1] https://github.com/stapelberg/configfiles/commit/32dcda0f49ab619592068bf911ffbecc391c8b34
zshってデフォルトでコマンド数2000の制限があるの?そんな初期設定のシステムには期待できないよ。伝統は尊重するけど、コマンド履歴をシステムに依存するならbash_historyを読み込むような仕組みじゃダメだね。インクリメンタルな改善じゃなくて、革命が必要だよ。
追伸:自分はサイズも行数も無制限にしてるけど、これはフォレンジックレベルの監査ログじゃないからね。OSレベルかsshコマンドロガーが必要だし、できれば外部ディスクに書き出すのがいい。少なくともroot管理下のファイルであるべきで、ユーザー所有のファイルにしておくべきじゃない。セキュリティは攻撃者から守るだけじゃなくてバグからも守るためのものだから、ユーザーが自分の履歴を削除できないようにすべきなんだ。そうじゃないなら、慣性と怠慢で引きずっている誤ったアーキテクチャだよ。