![bashの履歴を定期的に保存する](https://rvso.com/image/1330221/bash%E3%81%AE%E5%B1%A5%E6%AD%B4%E3%82%92%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B.png)
私は、履歴をファイルに保存するように bash を設定しました。これは、bash が [正常に] 終了するたびに実行されます。bash が適切に終了しないことがあるため、履歴が失われます。
そこで質問なのですが、履歴をより定期的に保存するように bash を設定できるでしょうか?
私は Linux カーネルで Debian Gnu (バージョン 6、Squeeze) を実行しています。
bash バージョン: GNU bash、バージョン 4.1.5(1)-リリース (i486-pc-linux-gnu)
答え1
これをbash_profileまたはbashrcに保存します
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
答え2
私は、プロンプトごとにメモリ内の履歴リストから履歴ファイルに書き込む .bash_aliases を使用することに決めましたexport PROMPT_COMMAND='history -a'
。重複排除でいくつか問題がありましたが、解決しました。また、ファイルをバックアップするために cron.daily と monthly を使用することに頼りました。ターミナルが終了せずに中断された場合、保存されません。終了をトラップしても機能しません。残念ながら、cron ジョブはメモリに保存されている履歴リストも保存できません。現在実行中のシェルにコマンドを送信して、history -w
リストからファイルに書き込む方法を見つけることができませんでした。その方法は使用できますが、作業を分離したい場合は、タブで開いているシェルごとに別の方法が必要になります。そうでない場合は、重複排除しながらプロンプトごとに書き込む方法について説明している別のリンクがあります。
答え3
$HISTFILE が root によって所有されている可能性があります。ログイン シェルとして bash を使用していると仮定します。確認方法は次のとおりです。
$ [ -z $HISTFILE ] && echo need to set HISTFILE || ls -l $HISTFILE
-rw------- 1 root root 36639 May 21 19:48 /home/joeb/.bash_history
HISTFILE のデフォルトは ~/.bash_history です。「HISTFILE を設定する必要があります」というエラーが表示される場合、または $HISTFILE が ~/.bash_history でない場合は、~/.profile または ~/.bash_profile または ~/.bashrc をチェックして、誤って設定またはリセットされていないことを確認する必要があります。
通常、所有者は root だけなので、リセットするだけです。
$ chown joeb.joeb $HISTFILE
$ ll $HISTFILE
-rw------- 1 joeb joeb 36639 May 21 19:48 /home/joeb/.bash_history
ログアウトしてからログインしてください。
$ history
ファイルが root によって所有される前に入力された最後のコマンド セットが表示され、その後にファイルの所有権が変更された後に入力されたコマンドが表示されます。