他のユーザーのコマンドライン履歴を取得するには?

他のユーザーのコマンドライン履歴を取得するには?

現在、各ユーザーのBash履歴をそのホームフォルダに即座に保存するサーバーが設定されており、現在のユーザーを切り替えて「history」Orderを実行する設定された間隔で実行されるスクリプトを作成したいと思います。

コマンドラインでsuとsudoのすべてのバリエーションを試しましたが、スクリプトで他のユーザーに対して "history"コマンドを実行したり、su / doを使用したりするたびに何も出力されません。

スクリプトでは、次のようにsuとsudoのすべてのバリエーションを試しました。

su <user>
history

しかし、それがすることはそのユーザーとしてシェルを開くだけで、「記録」の出力を返しません。

現在、RHEL6.9とBash 4.1.2を使用しています。

編集する:

現在、すべての.bash_historyファイルを監視するログコレクタがありますが、フィールドを割り当てて各コマンドの正確な実行時間を記録できるように、タイムスタンプとユーザーを追加するように/ etc / bashrcを設定しました。 .bash_historyにコマンドライン履歴を保存するためのBashの内部形式は、単にエポック時間を追加するだけであるため、個々のユーザーごとに「記録」を実行できる必要があります。

コマンドラインとスクリプト(別々)で以下を試しました。

su -c "history" <user>
sudo -i -u <user> history
sudo -S -u <user> -i /bin/bash -l -c 'history'

私はスクリプトでこれをやろうとしています。

su -i <user>
history

しかし、彼らは何の結果も返しません。

答え1

スクリプトを生成し、すべてのユーザーが使用できるPATHのどこかに保存します。たとえば、/binまたは/usr/bin

スクリプト

#!/usr/bin/env bash

HISTFILE=$HOME/.bash_history
history -r
unset HISTFILE
history

と同じ名前で保存してください。print_history

今試してみてください

su - user_name -c 'print_history'

時間形式があるとのことで、そのスクリプトで設定を解除して/etc/bashrcいません。HISTTIMEFORMATこのスクリプトのアイデアは私のものではありません。私は個人的にこのPROMPT_COMMAND変数を使用して対話型セッション中に入力/実行されるすべてのコマンド(そして私のシステムのすべてのユーザーに対して)をキャプチャするので、スクリプトを使用しません。したがって、スクリプトは次のようになります。それは言うことができます。もちろん、すべてのユーザーはログインシェルとしてbashを使用する必要があります。

関連情報