La salida de uname:
root@debian:~ # uname -a
Linux 5asnb 2.6.32-5-amd64 #1 SMP Mon Jun 13 05:49:32 UTC 2011 x86_64 GNU/Linux
Sin embargo, el /sbin/initejecutable aparece como 32 bits:
root@debian:~ # file /sbin/init
/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
Otros aspectos del sistema también parecen contradecir las cosas:
root@debian:~ # echo $HOSTTYPE
i486
root@debian:~ # getconf LONG_BIT
32
linux
64bit
32bit
cpu-architecture
kiiwii
fuente
fuente

Todos los procesadores que admiten el conjunto de instrucciones x64 (también conocido como x86_64 o amd64) también admiten el conjunto de instrucciones x86 (también conocido como i386 o i686, que son estrictamente versiones específicas de x86). Lo mismo ocurre con ARM A64 (el nuevo conjunto de instrucciones de 64 bits que aparece en ARMv8) y A32 (el nombre del conjunto de instrucciones "clásico" de 32 bits), para SPARC64 y SPARC , y creo que para MIPS64 y MIPS . Entonces, en todas estas familias de arquitectura, si un procesador puede ejecutar código de 64 bits, también puede ejecutar código de 32 bits.
El kernel de Linux admite la ejecución de código de usuario de 32 bits con un kernel de 64 bits (creo que en todas las familias de arquitectura mencionadas anteriormente). El núcleo debe ser homogéneo (todos de 64 bits o todos de 32 bits), y cada proceso debe ser homogéneo, pero puede tener una mezcla de procesos de 32 bits y 64 bits en un núcleo de 64 bits. Lo contrario no es posible: con un núcleo de 32 bits, no puede ejecutar procesos de 64 bits.
Esta es una opción de diseño en Linux, motivada por el deseo de ejecutar binarios existentes de 32 bits en instalaciones de 64 bits. Otras variantes de Unix han hecho diferentes elecciones: Solaris puede ejecutar programas de 64 bits en un kernel de 32 bits y viceversa, mientras que OpenBSD no puede ejecutar programas de 32 bits en un kernel de 64 bits.
Puede obtener información sobre la CPU en
/proc/cpuinfo. Si su CPU x86 tiene lalmbandera, es una CPU de 64 bits.Por defecto,
uname -moarchmuestra la arquitectura para la que se compiló el núcleo. Linux puede establecer la "personalidad" de un proceso (con lapersonality) llamada al sistema. Puede ejecutar un subproceso en una personalidad diferente con elsetarchcomando;setarch i686 someprogramolinux32 someprogramejecuta el programa especificado en un entorno dondeuname -mregresai686whilesetarch amd64 someprogramolinux64 someprogramejecuta el programa especificado en un entorno dondeuname -mregresaamd64.file /sbin/initle dice para qué arquitecturainitse compila el programa. Aunque es posible mezclar ejecutables de 32 bits y 64 bits en una instalación, generalmente todos los programas principales del sistema operativo son de la misma arquitectura, porque es mucho más fácil de administrar.$HOSTYPEes una variable bash y te dice para qué arquitecturabashse compiló el programa.getconf LONG_BITle permite saber si el compilador C predeterminado está configurado para compilar programas de 32 bits o de 64 bits. Una prueba más precisa es compilar ay ejecutar un programa que imprimasizeof(void*)osizeof(size_t): las llamadasgetconfsolo pueden proporcionar información sobre lo quegetconfcree que es el compilador predeterminado.fuente