如何查找可執行檔類型?

如何查找可執行檔類型?

我想找到從內核角度可執行的文件類型。據我所知Linux上的所有可執行檔都是ELF檔。因此我嘗試了以下方法:

find * | file | grep ELF

但這是行不通的;還有人有其他想法嗎?

答案1

稍後編輯:只有這個可以滿足 jan 的需要:謝謝惠更斯;

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

答案2

對於有限(例如嵌入式)系統上的系統,不使用file和 的替代解決方案:readelf

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

基本上,我們輸出前四個位元組並將hexdump它們用作簽名。然後我們可以 grep 所有類型的文件極低頻使用它的簽名7f454c46

或者,因為7f刪除字元, , 45, 4c,46位元組分別是E, L,F字符,我們也可以使用:

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

另外,在這種情況head下您可以使用:hexdump

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

答案3

和其他人一樣,我也想回答。我的答案也是基於使用該find實用程序,但我有一個想法,它與其他答案不同。它基於這樣一個事實,即-exec也可以用作搜尋條件。現在,考慮到這一點,我們可以將之前的所有提案重構為這個提案:

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

即我們已將grep移至-exec.

您可能會問,這為我們帶來了什麼?我們可以利用該實用程式-print和其他實用程式的靈活性find。例如,我們可以根據自己的喜好格式化輸出,或使用-print0並將輸出重新導向到某個腳本等。

答案4

假設原來的問題指的是極低頻僅文件(而不是任何其他“從內核角度來看可執行檔”),有一個更短且最有可能更快的替代方案find+ file

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

它遞歸地搜尋 ELF 文件,列印每個文件的目標文件類型和文件路徑。

將搜尋範圍縮小到僅可執行 ELF 檔案:scanelf -EET_EXEC -R /SEARCH/PATH.

抑制橫幅和類型,僅保留檔案路徑:scanelf -EET_EXEC -RBF %F /SEARCH/PATH

相關內容