El hardware, el kernel y los programas de espacio de usuario pueden tener diferentes tamaños de palabra¹.
-
Puede ver si la CPU es de 64 bits, 32 bits, o ambos, marcando el
flags
línea en/proc/cpuinfo
. Tienes que conocer las posibles banderas en tu familia de arquitectura. Por ejemplo, en las plataformas i386/amd64, ellm
identifica las CPU compatibles con amd64 (las CPU que no tienen esa bandera son solo i386).grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
-
Puede ver si el kernel es de 32 bits o de 64 bits consultando la arquitectura con
uname -m
. Por ejemplo,i[3456]86
son de 32 bits mientras quex86_64
es de 64 bits. Tenga en cuenta que, en varias arquitecturas, un núcleo de 64 bits puede ejecutar programas de usuario de 32 bits, por lo que incluso si eluname -m
muestra un kernel de 64 bits, no hay garantía de que las bibliotecas de 64 bits estén disponibles.[ "$(uname -m)" = "x86_64" ] # Assuming a PC
-
Puede ver lo que está disponible en la zona de usuario consultando el soporte de LSB con el
lsb_release
dominio. Más precisamente,lsb_release -s
imprime un:
-Lista separada de funciones LSB admitidas. Cada función tiene la formamodule-version-architecture
. Por ejemplo, la disponibilidad de una biblioteca ix86 C se indica mediantecore-2.0-ia32
, mientras quecore-2.0-amd64
es el análogo para amd64. Sin embargo, no todas las distribuciones declaran todos los módulos LSB disponibles, por lo que puede haber más disponibles de los que se pueden detectar de esta manera. -
Puede ver para qué programas de arquitectura en el sistema están construidos con un comando como
file /bin/ls
. Tenga en cuenta que es posible tener un sistema mixto; incluso sils
es un programa de 64 bits, su sistema puede tener bibliotecas instaladas para ejecutar programas de 32 bits y (menos comúnmente) viceversa. -
Puede averiguar el tamaño de palabra preferido para el desarrollo (suponiendo que haya un compilador C disponible) compilando un programa C de 5 líneas que imprima
sizeof(void*)
osizeof(size_t)
. Puede obtener la misma información de una manera un poco menos confiable² ejecutando el comandogetconf LONG_BIT
.#include <stdio.h> int main() { printf("%d\n", (int)sizeof(void*)); return 0; }
En cuanto a las máquinas virtuales, si puede ejecutar una VM de 64 bits en un sistema de 32 bits o viceversa, depende de la tecnología de su máquina virtual. Ver en particular¿Cómo puedo instalar una máquina virtual Linux de 64 bits en una Linux de 32 bits?
¹ "Tamaño de palabra" es el nombre habitual para lo que llamas bitness.
² Puede no ser confiable si alguien instaló un compilador de C alternativo con una arquitectura de destino diferente pero mantuvo el sistema predeterminado getconf
.