私はよく .bash_history ファイルを調べて、プログラムをどのように実行したか、または使用した引数を正確に確認しています。問題は、私の履歴が非常に不完全に見えることです。数か月前に実行したことがわかるコマンドもあれば、昨日実行して存在しないコマンドもあります。問題は、私が ssh で頻繁に作業していることだと思います。多くの場合、きれいにログアウトせず、ラップトップがスリープ状態になるか、別の Wi-Fi ネットワークに移動すると切断されます。そのため、bash は終了時にのみ履歴ファイルに書き込むようです。これは正しいですか?すべてのコマンド、またはいくつかのコマンドごとに強制的に書き込む方法はありますか?
3 に答える
各プロンプトの前に保存した履歴を更新するには、に追加history -a
します。PROMPT_COMMAND
PROMPT_COMMAND='history -a'
これはあなたの.bashrc
ファイルに入るはずです。
または履歴をsqliteデータベースに書き込むオープンソースツールであるAdvanced Shell Historyをインストールできます。これは単純に に含めるよりも少し極端ですが、現在の作業ディレクトリ、コマンド終了コード、コマンドの開始時間と終了時間、セッションの開始時間と終了時間、tty なども記録します。bash
zsh
history -a
PROMPT_COMMAND
履歴データベースにクエリを実行する場合は、カスタム SQL クエリを作成して、バンドルされているash_query
ツールで使用できるようにすることもできます。いくつかの便利なパッケージ済みクエリもありますが、私は SQL をよく知っているので、何かを探す必要がある場合は通常、データベースを開いて独自のクエリを作成します。
ただし、非常に便利なコマンドの 1 つは、現在の作業ディレクトリの履歴を確認することです。何かに取り組んでいるときに中断した場所を思い出すのに役立ちます。
vagrant@precise32:~$ ash_query -q CWD
session
when what
1
2014-08-27 17:13:07 ls -la
2014-08-27 17:13:09 cd .ash
2014-08-27 17:16:27 ls
2014-08-27 17:16:33 rm -rf advanced-shell-history/
2014-08-27 17:16:35 ls
2014-08-27 17:16:37 less postinstall.sh
2014-08-27 17:16:57 sudo reboot -n
そして、現在の作業ディレクトリ (およびその下のすべて) を使用した同じ履歴:
vagrant@precise32:~$ ash_query -q RCWD
session
where
when what
1
/home/vagrant/advanced-shell-history
2014-08-27 17:11:34 nano ~/.bashrc
2014-08-27 17:12:54 source /usr/lib/advanced_shell_history/bash
2014-08-27 17:12:57 source /usr/lib/advanced_shell_history/bash
2014-08-27 17:13:05 cd
/home/vagrant
2014-08-27 17:13:07 ls -la
2014-08-27 17:13:09 cd .ash
/home/vagrant/.ash
2014-08-27 17:13:10 ls
2014-08-27 17:13:11 ls -l
2014-08-27 17:13:16 sqlite3 history.db
2014-08-27 17:13:43 ash_query
2014-08-27 17:13:50 ash_query -Q
2014-08-27 17:13:56 ash_query -q DEMO
2014-08-27 17:14:39 ash_query -q ME
2014-08-27 17:16:26 cd
/home/vagrant
2014-08-27 17:16:27 ls
2014-08-27 17:16:33 rm -rf advanced-shell-history/
2014-08-27 17:16:35 ls
2014-08-27 17:16:37 less postinstall.sh
2014-08-27 17:16:57 sudo reboot -n
FWIW - 私はプロジェクトの作成者でありメンテナーです。