2009-09-10 11:56:56 +0000 2009-09-10 11:56:56 +0000
170
170

Linuxで特定のディレクトリ以下の実行ファイルだけを探すにはどうしたらいいですか?

Linuxで特定のディレクトリ以下の実行ファイルだけを探すにはどうしたらいいですか?

回答 (7)

170
170
170
2009-09-10 11:59:26 +0000

実行可能ファイルのチェックは、-perm (推奨されない) または -executable (ACL を考慮しているので推奨) で行うことができます。検索可能なディレクトリではなく、実行可能なファイルだけを見つけたい場合は、-executableオプションを使用するには:

find <dir> -executable
find <dir> -executable -type f

-type fと組み合わせてください:

&001

35
35
35
2009-09-10 15:55:13 +0000

findの-permオプションを使用してください。これはカレントディレクトリの中から、所有者、グループメンバー、または他の人が実行可能なファイルを見つけます:

find . -perm /u=x,g=x,o=x

編集:

少なくともGNU find 4.4.0に存在する別のオプションを見つけました:

find . -executable

ACLも考慮されているので、これはもっとうまく動作するはずです。

16
16
16
2017-06-01 06:59:33 +0000

この質問は特にLinuxについて言及しているのは知っていますが、Googleでの最初の結果なので、私が探していた答えを追加したかっただけです(例えば、あなたが今の私のように、雇用主によって非GNU/Linuxシステムを使用することを余儀なくされている場合)。

3
3
3
2016-04-24 02:38:26 +0000

あなたが本当にしたいことは実行可能なファイルで何かをしたい場合に備えて、私は別のアプローチを持っています – 必ずしも実際に強制的に見つけること自体をフィルタリングする必要はありません:

for i in `find -type f`; do [-x $i] && echo "$i is executable"; done

私はこれを好みます。

-executable は重要です。なぜなら、-perm は *nix のディレクトリがトラバース可能であるために実行可能でなければならないからで、-type f コマンドの中のクエリーの数が多ければ多いほど、あなたのコマンドはメモリ効率が良くなります。

2
2
2
2014-03-26 07:52:24 +0000

実行可能とマークされたファイルは、実行可能なファイルやロード可能なファイルやオブジェクトである必要はありません。

1
1
1
2017-07-09 12:31:14 +0000

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 &
0
0
0
2019-06-06 00:08:27 +0000

今夜、システムパスにない実行ファイルやディレクトリにない実行ファイルを見つけるための機能を ~/.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秒以内に検索することです。

関連する質問

6
10
11
7
4