Die Antwort auf die Frage im Titel steht gleich am Anfang der Ausgabe:
ELF 64-Bit Ausführbare LSB-Datei, x86-64
ELF ist das Executable and Linkable Format, das binäre ausführbare Dateiformat, das am häufigsten von Linux verwendet wird.
x86-64 ist die Architektur der Binärdatei, der 64-Bit-Version des ursprünglich von AMD eingeführten x86-Befehlssatzes. Aus Gründen, die mir ein Rätsel sind, bezeichnet Microsoft es als "x64", aber das ist dasselbe.
Wenn Sie die Architektur des Kernels selbst kennen müssen, können Sie uname -mpi
verwenden . Auf meinem System wird beispielsweise Folgendes ausgegeben:
x86_64 unbekannt unbekannt
was bedeutet, dass ich einen x86-64-Kernel verwende.
Wenn Sie an der CPU selbst interessiert sind, schauen Sie sich /proc/cpuinfo
an für Einzelheiten über die CPU(s), die vom Linux-Kernel erkannt wurden.
Eine ausführbare 32-Bit-80x86-Datei wird durch file
identifiziert wie zum Beispiel:
ELF 32-Bit Ausführbare LSB-Datei, Intel 80386 , Version 1 (SYSV), dynamisch gelinkt (verwendet Shared Libs), für GNU/Linux 2.6.8, entfernt
was uns sagt, dass es sich um eine ausführbare 32-Bit-Datei handelt, die den Intel 80386-Befehlssatz verwendet (möglicherweise mit Erweiterungen).
Beachten Sie, dass es nicht ganz so einfach ist wie 32-Bit-gegenüber 64-Bit-Architekturen. Beispielsweise unterstützt der Linux-Kernel 32-Bit-Architekturen wie Intel 80386, AVR32, S/390 und Unicore32. Auf der 64-Bit-Seite ist Linux unter anderem auf PA-RISC, x86-64, Itanium und Alpha verwendbar. Nicht alle Distributionen stellen jedoch Binärdateien für alle Architekturen bereit (und ich bezweifle, dass es Distributionen gibt, die auf alle abzielen unterstützte CPU-Architekturen gleichermaßen). Wenn Sie also wissen möchten, ob eine bestimmte Binärdatei auf einem bestimmten System ausführbar ist, müssen Sie die Architektur berücksichtigen , und nicht die native Wortgröße der CPU.
Das 5. Byte einer ausführbaren Linux-Binärdatei (ELF-Format, siehe Wikipedia) ist 1 für eine ausführbare 32-Bit-Datei, 2 für eine ausführbare 64-Bit-Datei.
Um dies für ein Programm namens "foo" zu sehen, geben Sie in der Befehlszeile
einod -t x1 -t c foo | head -n 2
Wenn Sie das 'Head'-Rohr vermeiden möchten, können Sie dies tun
od -An -t x1 -j 4 -N 1 foo
Dies gibt 01 aus, wenn foo eine 32-Bit-Binärdatei ist, und 02, wenn es sich um eine 64-Bit-Binärdatei handelt. Es kann immer noch einige führende Leerzeichen enthalten - wissenswert, wenn Sie automatische Vergleiche der Ergebnisse durchführen.
Wenn dies in einem einfachen Ubuntu-Docker-Container nützlich ist, in dem „Datei“ nicht installiert wurde.