サーバー上のすべてのユーザーのbash履歴を検索できますか?

サーバー上のすべてのユーザーのbash履歴を検索できますか?

複数のユーザーアカウントにわたってLinuxサーバーで実行されているすべてのbashコマンドを表示したいと思います。私が使用する特定のディストリビューションはCentOS 5.7です。サーバーから.bash_historyファイルを完全に検索する方法はありますか、それとももう少しローカライズされたプロセスですかlocate | cat | grep? (これをタイプするだけでも震えています)。

答え1

ホームディレクトリを列挙するために使用されますgetent

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern" 

ホームディレクトリがよく知られている場所にある場合は、次のように簡単にできます。

grep -e "$pattern" /home/*/.bash_history

もちろん、これはユーザーが他のシェルを使用しているのか、それとも別の値を使用しているのかについてはあまりHISTFILE言及していません。また、シェルを介して実行されていないコマンドやユーザーの$PATH。会計またはいくつかの高度な監査システムを参照してください。マイコンピュータのアクティビティを監視します。プロセスが完了した後に実行にかかった時間を確認するには?

答え2

find /home -name .bash_history | xargs grep <string>

または:

grep string $(find /home -name .bash_history)

これには、デフォルトの場所のホームディレクトリが含まれます。解析/etc/passwdまたは呼び出しgetent、出力を解析する方が良いです。

for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done

答え3

あなたはできます

find /home | grep bash_history | xargs grep "whatever"

しかし、私はそれがあなたの考えよりも優れているとは思わない。

関連情報