この質問は特にLinuxについて言及しているのは知っていますが、Googleでの最初の結果なので、私が探していた答えを追加したかっただけです(例えば、あなたが今の私のように、雇用主によって非GNU/Linuxシステムを使用することを余儀なくされている場合)。
あなたが本当にしたいことは実行可能なファイルで何かをしたい場合に備えて、私は別のアプローチを持っています – 必ずしも実際に強制的に見つけること自体をフィルタリングする必要はありません:
for i in `find -type f`; do [-x $i] && echo "$i is executable"; done
私はこれを好みます。
-executable
は重要です。なぜなら、-perm
は *nix のディレクトリがトラバース可能であるために実行可能でなければならないからで、-type f
コマンドの中のクエリーの数が多ければ多いほど、あなたのコマンドはメモリ効率が良くなります。
実行可能とマークされたファイルは、実行可能なファイルやロード可能なファイルやオブジェクトである必要はありません。
1ライナーのファンとして…
find /usr/bin -executable -type f -print0 | xargs file | grep ASCII
findコマンドからの出力を取るために'xargs'を使用しています(スペースを含むファイル名が正しく処理されるようにprint0を使用しています)。これで実行可能なファイルのリストができたので、'file’ コマンドのパラメータとしてそれらを一つずつ指定します。そして、バイナリを無視するために ASCII という用語を grep します。findコマンドの-executableは、お好みのスタイル(以前の回答を参照してください)や'NIX OS
で動作するもので代用してください。 rootが所有するスクリプトでevalを持つファイルを見つけるために上記を必要としたので、rootユーザが安全ではないパラメータを持つスクリプトを実行している場合のprivエスカレーションの弱点を見つけるのに役立つように以下を作成しました…
echo -n "+ Identifying script files owned by root that execute and have an eval in them..."
find / -not \( -path /proc -prune \) -type f -executable -user root -exec grep -l eval {} \; -exec file {} \; | grep ASCII| cut -d ':' -f1 > $outputDir"/root_owned_scripts_with_eval.out" 2>/dev/null &
今夜、システムパスにない実行ファイルやディレクトリにない実行ファイルを見つけるための機能を ~/.bashrc
で作りました:
# Quickly locate executables not in the path
xlocate () {
locate -0r "$1" | xargs -0 -I{} bash -c '[[-x "$1"]] && [[! -d "$1"]] \
&& echo "executable: $1"' _ {}
} # xlocate ()
この機能の利点は、3つのLinuxディストロとWindowsインストールを、find
コマンドが15分かかるのに対し、1秒以内に検索することです。