複数のユーザーアカウントにわたって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"
しかし、私はそれがあなたの考えよりも優れているとは思わない。