ファイルシステムで単一のコマンドを使用して32ビットELFオブジェクトのファイルを見つけることができるかどうか疑問に思います。私は実際にFedora 23 64ビットで作業していますが、これらのファイルを見つけることができませんが、私が正確に実行したい練習では32ビットELFファイルでなければならないと述べています。助けてくれてありがとう。
答え1
あなたがしなければならないのは、ファイルの最初の5バイトが7f 45 4c 46 01であることを確認することだけですfile
。したがって、各ファイルの5バイトのみを読み取ることができます。
PERLIO=:raw find . -type f -size +51c -exec perl -lne '
BEGIN{$/=\5};print $ARGV if $_ eq "\x7f\x45\x4c\x46\x01"; close ARGV' {} +
ここでは、少なくとも52バイトの一般ファイルのみを確認してください。ELFヘッダ32ビットELFファイルの場合、ELFファイルは通常これよりはるかに大きいです。
答え2
この試み:
find . -type f -exec file '{}' \; | grep -i 'elf 32'
答え3
file
このように使用されるコマンドを意味しますか?
$ which ls
/bin/ls
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=cecbb9e27978d91bc6fe2cc4d46d0cd58deafdb2, stripped
$
次のfind
コマンドを実行できます。file
$ find /bin -type f -exec file '{}' \; | grep -c "ELF 32-bit LSB executable"
88
$ find /bin -type f -exec file '{}' \; 2>&1 | grep "ELF 32-bit LSB executable" | head -2
/bin/bzip2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=8ec5364bf1b5aae5a29b02aaa89db511e988f26a, stripped
/bin/more: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=2cf8c3651ba3e5dd6a053d40a969b4b7bca9cac0, stripped
$
答え4
を使用してfind
ファイルをインポートし、file
ファイル情報を取得し、出力から文字列を取得できますgrep
。32-bit
file
find /bin /usr/bin -type f -exec sh -c '{ file -L "$1" | grep -q 32-bit ;} \
&& echo "$1"' _ {} \;
必要に応じて検索場所を変更/追加してください。
例:
% find /usr/bin -type f -exec sh -c '{ file -L "$1" | grep -q 32-bit ;} && echo "$1"' _ {} \;
/usr/bin/unix2dos
/usr/bin/dos2unix