Linuxサーバーで複数のユーザーアカウントで実行されたすべてのbashコマンドを確認したいと思います。私が使用している特定のディストリビューションはCentOS 5.7です。サーバー上の.bash_historyファイルをグローバルに検索する方法はありますか、それともlocate | cat | grep
? (私はそれをタイプアウトするだけで身震いします)。
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
の初期の一部のユーザーディレクトリにあった削除された外部コマンドについても通知しません。ユーザーが実行したコマンドを知りたい場合は、プロセスアカウンティングまたはより洗練された監査システムが必要です。 コンピューター上のアクティビティの監視を参照してください。 、 プロセスが終了してからどれだけの時間実行されたかを確認する方法は? 。
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
あなたができる
find /home | grep bash_history | xargs grep "whatever"
しかし、私はそれがあなたが考えていたものよりもずっと良いとは本当に思っていません。