-
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\s*:.*\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 kernel de 64 bits puede ejecutar programas de 32 bits en el espacio del usuario, 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
Tenga en cuenta también que
uname -m
puede devolver un valor "virtualizado". Por ejemplo, en Linux, si ejecutasetarch i386 bash
en un sistema amd64 y ejecutauname -m
de esa fiesta, verásuname -m
informandoi386
. Esto le permite fingir que está en un "sistema de 32 bits" aunque el kernel sea de 64 bits, por ejemplo, para compilar programas de 32 bits sin configurar la compilación cruzada. -
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 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)
.
Puedes usar uname -a
y busca x86_64
para ver si está ejecutando 64 bits. Cualquier otra cosa (hasta donde yo sé) y está ejecutando 32 bits o está en hardware que no es de PC como alpha
, sparc
o ppc64
.
uname -m | sed 's/x86_//;s/i[3-6]86/32/'