与えられた時間に複数のセッションを実行することがよくあります。これは、歴史を使用して作品を再構築しようとすると、時には問題を引き起こす可能性があります。そのため、シェルごとにソートしてから、時間ごとにソートできるように$BASHPIDを何らかの方法で含めると便利です。これに対する私の素朴な試みは
export HISTTIMEFORMAT="$BASHPID %Y %m %d - %H:%M:%S| "
しかし、これがすることは、現在のシェルの$ BASHPIDを "history"出力に追加するだけです。
HISTTIMEFORMATと$ BASHPIDを検索しても結果は返されません。この動作を実装する方法に関する提案はありますか?
答え1
「bash永遠の歴史」のようなものが必要です。
良い時間をお過ごしくださいここで説明動作させる。
このソリューションにはまだPIDがなく、次のように動作します。ここからのアイデア。
主に:
export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"' \
echo $$ $USER "$(history 1)" >> ~/.bash_eternal_history'
これは次のよう$PROMPT_COMMAND
に生成されます。
$PID $USER $LAST_COMMAND
実行された各コマンドの出力。
答え2
/etc/bash.bashrc
私の戦略は次の行に追加することです。
readonly PROMPT_COMMAND='history -a >(logger -t "cmdline $USER[$PWD] $SSH_TTY $SSH_CONNECTION")'
それから/etc/rsyslog.conf
:
*.* @syslogserver:514
私は次のように単一のファイルにログを記録するよりもこのアプローチを好みます。
- ファイルが回転しました(つまり、あまり大きくなりません)。
- ユーザーは自分の「記録」を削除できません。
- 改ざん/ハッキングからサーバーを保護するリモートログトレースを生成します。
- リモート syslog サーバーの循環ログを変更して、数ヶ月間のログ記録を維持できます。
- syslog-ngを使用すると、記録されたIPアドレスごとに別々のファイルログを持つことができます。
- すべてが1つの中央ポイントにあるので、何が起こっているのかを確認するために複数のサーバーに入る必要はありません。
- リモートbashセッションが終了するとローカル履歴が失われ、この方法を使用すると失われません。
- また、同じユーザーが複数のセッションを開くと、すべてのコマンドが履歴に含まれていないため、この方法でインポートされます。