回答:
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
。知りたいことがユーザーが実行したコマンドである場合、プロセスアカウンティングまたはより洗練された監査システムが必要です。コンピューターでのアクティビティの監視を参照してください。、プロセスが終了してから実行された時間を確認するにはどうすればよいですか?。
getent passwd | cut -d : -f 6 | sed "s:$:/.bash_history:" | xargs -d'\n' -I{} sh -c "[ -f {} ] && echo {}" | xargs -d'\n' grep -Hn -e "$pattern"
{}
このような使用は非常に危険です。ファイル名は、スクリプト内で直接補間されます。たとえば、$(rm -rf /)
またはを含むファイル名(ここではユーザー名)がある場合;rm -rf /;
、コマンドが実行されます。シェルスクリプトへの引数として常にファイル名を渡し、findまたはxargsの{}
メカニズムを使用しないでください。