タイトルの質問に対する答えは、出力の最初にあります:
<ブロック引用>ELF 64 ビット LSB 実行可能ファイル、x86-64
ELF は Executable and Linkable Format であり、Linux で最も一般的に使用されるバイナリ実行可能ファイル形式です。
x86-64 はバイナリのアーキテクチャであり、AMD によって最初に導入された x86 命令セットの 64 ビット バージョンです。私には理解できない理由で、Microsoft はこれを「x64」と呼んでいますが、それは同じことです。
カーネル自体のアーキテクチャを知る必要がある場合は、 uname -mpi
を使用できます .たとえば、私のシステムでは次のように表示されます:
x86_64 不明 不明
これは、x86-64 カーネルを実行していることを意味します。
CPU 自体に興味がある場合は、/proc/cpuinfo
を参照してください。 Linux カーネルによって検出された CPU の詳細については、
32 ビット 80x86 実行可能ファイルは file
で識別されます 例:
ELF 32 ビット LSB 実行可能ファイル、Intel 80386 、バージョン 1 (SYSV)、動的にリンク (共有ライブラリを使用)、GNU/Linux 2.6.8 用、削除済み
これは、Intel 80386 命令セット (おそらく拡張機能付き) を使用した 32 ビット実行可能ファイルであることを示しています。
32 ビット アーキテクチャと 64 ビット アーキテクチャほど単純ではないことに注意してください。たとえば、Linux カーネルは、Intel 80386、AVR32、S/390、および Unicore32 などの 32 ビット アーキテクチャをサポートしています。 64 ビットの面では、Linux は PA-RISC、x86-64、Itanium、Alpha などで使用できます。ただし、すべてのディストリビューションがすべてのアーキテクチャのバイナリを提供しているわけではありません (すべて を対象とするディストリビューションがあるとは思えません)。 サポートされている CPU アーキテクチャも同様です)。したがって、特定のバイナリが特定のシステムで実行可能かどうかを知りたい場合は、アーキテクチャを考慮する必要があります。 、CPU のネイティブ ワード サイズではなく。
Linux バイナリ実行可能ファイル (ELF 形式、ウィキペディアを参照) の 5 番目のバイトは、32 ビット実行可能ファイルの場合は 1、64 ビット実行可能ファイルの場合は 2 です。
「foo」という名前のプログラムについてこれを確認するには、コマンド ラインで次のように入力します
od -t x1 -t c foo | head -n 2
「ヘッド」パイプを避けたい場合は、できます
od -An -t x1 -j 4 -N 1 foo
これにより、foo が 32 ビット バイナリの場合は 01 が出力され、64 ビット バイナリの場合は 02 が出力されます。結果の自動比較を行う場合は、先頭にスペースが含まれている可能性があります。
「ファイル」がインストールされていない基本的な Ubuntu Docker コンテナーでこれが役立つことがわかった場合。