Solución:
La respuesta a la pregunta en el título está justo al comienzo de la salida:
DUENDE 64 bits Ejecutable LSB, x86-64
ELF es el formato ejecutable y enlazable, el formato de archivo ejecutable binario más utilizado por Linux.
x86-64 es la arquitectura del binario, la versión de 64 bits del conjunto de instrucciones x86 introducido originalmente por AMD. Por razones que no entiendo, Microsoft se refiere a él como “x64”, pero eso es lo mismo.
Si necesita conocer la arquitectura del kernel en sí, puede usar uname -mpi
. Por ejemplo, en mi sistema, eso imprime:
x86_64 desconocido desconocido
lo que significa que estoy ejecutando un kernel x86-64.
Si está interesado en la CPU en sí, mire /proc/cpuinfo
para obtener detalles sobre las CPU detectadas por el kernel de Linux.
Un ejecutable 80×86 de 32 bits se identifica mediante file
como por ejemplo:
DUENDE 32 bits Ejecutable LSB, Intel 80386, versión 1 (SYSV), enlazado dinámicamente (usa bibliotecas compartidas), para GNU / Linux 2.6.8, despojado
lo que nos dice que es un ejecutable de 32 bits que usa el conjunto de instrucciones Intel 80386 (posiblemente con extensiones).
Tenga en cuenta que no es tan simple como las arquitecturas de 32 bits frente a las de 64 bits. Por ejemplo, el kernel de Linux admite arquitecturas de 32 bits como Intel 80386, AVR32, S / 390 y Unicore32. En el lado de los 64 bits, Linux se puede utilizar en PA-RISC, x86-64, Itanium y Alpha, entre otros. Sin embargo, no todas las distribuciones proporcionan binarios para todas las arquitecturas (y dudo que haya distribuciones que tengan como objetivo todos arquitecturas de CPU compatibles por igual). Entonces, si desea saber si un binario dado será ejecutable en un sistema dado, debe considerar la arquitectura, en lugar del tamaño de palabra nativa de la CPU.
El quinto byte de un archivo ejecutable binario de Linux (formato ELF, consulte Wikipedia) es 1 para un ejecutable de 32 bits, 2 para un ejecutable de 64 bits.
Para ver esto para un programa llamado “foo”, escriba en la línea de comando
od -t x1 -t c foo | head -n 2
Si desea evitar la tubería de ‘cabeza’, puede hacer
od -An -t x1 -j 4 -N 1 foo
Esto imprimirá 01 si foo es un binario de 32 bits y 02 si es 64. Aún puede incluir algunos espacios iniciales; vale la pena saberlo si está haciendo comparaciones automáticas de los resultados.
Si encuentra esto útil en un contenedor Docker de Ubuntu básico donde no se instaló ‘archivo’.