Wie finde ich ausführbare Dateitypen?

Wie finde ich ausführbare Dateitypen?

Ich möchte Dateitypen finden, die aus Sicht des Kernels ausführbar sind. Soweit ich weiß, sind alle ausführbaren Dateien unter Linux ELF-Dateien. Daher habe ich Folgendes versucht:

find * | file | grep ELF

Das funktioniert jedoch nicht. Hat jemand andere Ideen?

Antwort1

Spätere Bearbeitung: Nur dieses hier macht, was Jan braucht: Danke, Huygens;

find . -exec file {} \; | grep -i elf

Antwort2

Alternative Lösung ohne fileund readelffür Benutzer eingeschränkter (z. B. eingebetteter) Systeme:

find $WHERE -type f -exec hexdump -n 4 -e '4/1 "%2x" " {}\n"'  {} \; | grep ^7f454c46

Im Grunde geben wir die ersten vier Bytes aus hexdumpund verwenden sie alsUnterschriftWir können dann alle Dateien vom Typ greppenELFmithilfe seiner Signatur 7f454c46.

Oder, da 7fist dieZeichen löschen, und 45, 4c, 46Bytes sind jeweils E, L, FZeichen, wir könnten auch verwenden:

find $WHERE -type f -exec hexdump -n 4 -e '4/1 "%1_u" " {}\n"'  {} \; | grep ^delELF

In diesem Fall können Sie headstattdessen auch Folgendes verwenden :hexdump

find $WHERE -type f -exec head -c 4 {} \; -exec echo " {}" \;  | grep ^.ELF

Antwort3

Wie andere möchte auch ich antworten. Meine Antwort basiert findebenfalls auf der Verwendung des Dienstprogramms, aber ich habe eine Idee, die sich von anderen Antworten unterscheidet. Sie basiert auf der Tatsache, dass -execauch das als Suchkriterium verwendet werden kann. Wenn wir dies berücksichtigen, können wir nun alle vorherigen Vorschläge zu diesem umgestalten:

find /path -type f -exec sh -c "file {} | grep -Pi ': elf (32|64)-bit' > /dev/null" \; -print

D. h. wir haben das grepin das verschoben -exec.

Sie fragen sich vielleicht, was uns das bringt? Wir können die Flexibilität von -printund anderen Dienstprogrammen nutzen find. Wir können beispielsweise eine Ausgabe nach unserem Geschmack formatieren oder die verwenden -print0und eine Ausgabe an ein Skript usw. umleiten.

Antwort4

Angenommen, die ursprüngliche Frage bezieht sich aufELFnur Dateien (und keine anderen „ausführbaren Dateien aus Sicht des Kernels“), gibt es eine kürzere und höchstwahrscheinlich schnellere Alternative zu find+ file:

$ scanelf -R /SEARCH/PATH
 TYPE   FILE 
ET_DYN /SEARCH/PATH/library.so
ET_EXEC /SEARCH/PATH/app1
ET_EXEC /SEARCH/PATH/app2

Es sucht rekursiv nach ELF-Dateien und druckt für jede Datei den Objektdateityp und den Dateipfad.

Schränken Sie die Suche auf ausschließlich ausführbare ELF-Dateien ein: scanelf -EET_EXEC -R /SEARCH/PATH.

Banner und Typ unterdrücken, nur Dateipfade behalten: scanelf -EET_EXEC -RBF %F /SEARCH/PATH.

verwandte Informationen