¿Qué es un comando de Linux que puedo ejecutar para devolver programáticamente 32 o 64 para indicar si el procesador es un procesador de 32 bits o de 64 bits?
¿Qué es un comando de Linux que puedo ejecutar para devolver programáticamente 32 o 64 para indicar si el procesador es un procesador de 32 bits o de 64 bits?
Respuestas:
Puede ver si la CPU es de 64 bits, 32 bits o capaz de ambas cosas al registrar la flags
línea /proc/cpuinfo
. Tienes que conocer las posibles banderas en tu familia de arquitectura. Por ejemplo, en plataformas i386 / amd64, el lm
indicador identifica las CPU con capacidad amd64 (las CPU que no tienen ese indicador son solo i386).
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
Puede ver si el núcleo es de 32 bits o de 64 bits consultando la arquitectura con uname -m
. Por ejemplo, i[3456]86
son de 32 bits mientras que x86_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 uname -m
muestra un núcleo 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 ejecuta setarch i386 bash
en un sistema amd64 y ejecuta uname -m
desde ese bash, verá uname -m
informes i386
. Esto efectivamente le permite fingir que está en un "sistema de 32 bits" a pesar de que el núcleo es de 64 bits, por ejemplo, para compilar programas de 32 bits sin configurar la compilación cruzada.
Puede ver lo que está disponible en userland consultando el soporte de LSB con el lsb_release
comando. Más precisamente, lsb_release -s
imprime una :
lista separada de las funciones LSB compatibles. Cada característica tiene la forma . Por ejemplo, la disponibilidad de una biblioteca ix86 C se indica mediante , mientras que 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 disponible de lo que se puede detectar de esta manera.module-version-architecture
core-2.0-ia32
core-2.0-amd64
Puede encontrar 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*)
o sizeof(size_t)
.
getconf WORD_BIT
o en getconf LONG_BIT
lugar de tener que compilar su propio programa C (trivial y portátil, aunque lo sea).
getconf
aquí. Suena bien en principio, pero es difícil asegurarse de que los resultados se apliquen al compilador de C particular que usará, si hay más de uno (generalmente gcc / icc o similar en Linux, gcc / native cc en otro lugar). En un sistema estándar getconf
debería aplicarse c89
ao c99
en $(getconf PATH)
, pero en la práctica me preocuparía que alguien instale una alternativa cc
que se ejecuta por el c89
contenedor del proveedor .
.
falta en la expresión regular: grep '^flags.*:.*\blm\b' /proc/cpuinfo
. También solo funciona para mí sin la -q
bandera
.
: tenía "cero o más espacios", pero en realidad hay una pestaña. También he cambiado la expresión regular para permitir pestañas. Con el -q
indicador, no hay salida, pero el estado de salida del comando le indica si el indicador está presente. Si desea salida, elimine la -q
bandera.
-q
bandera. Ty, funciona ahora :)
Puede usar uname -a
y buscar para x86_64
ver si está ejecutando 64 bits. Todo lo demás (Por lo que yo sé) y está ejecutando 32 bits o se usa hardware de PC no como alpha
, sparc
o ppc64
.
alpha
, sparc64
, ppc64
, ...
Tipo:
uname -a
Si consigues x86_64 GNU/Linux
, estás ejecutando un kernel de 64 bits. Si obtiene algo similar i386/i486/i586/i686
, probablemente esté ejecutando un kernel de 32 bits
getconf usa la menor cantidad de llamadas al sistema:
$ strace getconf LONG_BIT | wc -l
253
$ strace arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301