tengo - ¿Cómo determinar si un Linux dado es de 32 o 64 bits?
ver version de linux red hat (21)
Cuando uname -a
, da el siguiente resultado.
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux
¿Cómo puedo saber de esto que el sistema operativo dado es de 32 o 64 bits?
Esto es útil cuando se escriben scripts de configure
, por ejemplo: ¿para qué arquitectura estoy construyendo?
Con respecto a la respuesta "getconf LONG_BIT" .
Escribí una función simple para hacerlo en ''C'':
/*
* check_os_64bit
*
* Returns integer:
* 1 = it is a 64-bit OS
* 0 = it is NOT a 64-bit OS (probably 32-bit)
* < 0 = failure
* -1 = popen failed
* -2 = fgets failed
*
* **WARNING**
* Be CAREFUL! Just testing for a boolean return may not cut it
* with this (trivial) implementation! (Think of when it fails,
* returning -ve; this could be seen as non-zero & therefore true!)
* Suggestions?
*/
static int check_os_64bit(void)
{
FILE *fp=NULL;
char cb64[3];
fp = popen ("getconf LONG_BIT", "r");
if (!fp)
return -1;
if (!fgets(cb64, 3, fp))
return -2;
if (!strncmp (cb64, "64", 3)) {
return 1;
}
else {
return 0;
}
}
Buena idea, el ''getconf''!
El comando
$ arch
es equivalente a
$ uname -m
pero es el doble de rápido para escribir
En Bash, utilizando desbordamiento de enteros:
if ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
Es mucho más eficiente que invocar otro proceso o abrir archivos.
Ese sistema es de 32 bits. iX86 en uname
significa que es una arquitectura de 32 bits. Si fuera de 64 bits, volvería.
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux
Hoy en día, un sistema puede ser multiarca por lo que no tiene sentido de todos modos. Es posible que desee encontrar el destino predeterminado del compilador:
$ cc -v 2>&1 | grep ^Target Target: x86_64-pc-linux-gn
Puedes intentar compilar un hola mundo:
$ echo ''int main() { return 0; }'' | cc -x c - -o foo $ file foo foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, not stripped
Me preguntaba sobre esto específicamente para construir software en Debian (el sistema Debian instalado puede ser una versión de 32 bits con un kernel de 32 bits, bibliotecas, etc., o puede ser una versión de 64 bits con material compilado para el 64- modo de compatibilidad de bits en lugar de 32 bits).
Los propios paquetes de Debian necesitan saber para qué arquitectura están (por supuesto) cuando realmente crean el paquete con todos sus metadatos, incluida la arquitectura de la plataforma, por lo que hay una herramienta de empaquetado que lo envía a otras herramientas de empaquetado y scripts para usar, llamado dpkg-arquitectura . Incluye tanto para lo que está configurado para compilar como para el host actual. (Aunque normalmente son lo mismo). Ejemplo de salida en una máquina de 64 bits:
DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu
Puede imprimir solo una de esas variables o hacer una prueba con sus valores con las opciones de la línea de comandos para dpkg -architecture.
No tengo idea de cómo dpkg-architecture deduce la arquitectura, pero puede consultar su documentación o código fuente (dpkg-architecture y gran parte del sistema de dpkg en general son Perl).
No puedo creer que en todo este tiempo, nadie haya mencionado:
sudo lshw -class cpu
para obtener detalles sobre la velocidad, cantidad, tamaño y capacidades del hardware de la CPU.
Otro comando útil para una fácil determinación es el siguiente:
Mando:
getconf LONG_BIT
Responder:
- 32, si el sistema operativo es de 32 bits
- 64, si el sistema operativo es de 64 bits
Primero tienes que descargar Virtual Box. Luego seleccione un nuevo y un Linux de 32 bits. Luego arranca el linux usándolo. Si arranca, entonces es de 32 bits, si no lo hace, entonces es de 64 bits.
Prueba uname -m
. Que es corto de uname --machine
y produce:
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
De lo contrario, no para el kernel de Linux, sino para la CPU , escriba:
cat /proc/cpuinfo
o:
grep flags /proc/cpuinfo
En el parámetro "flags", verás varios valores: consulta " ¿Qué significan los flags en / proc / cpuinfo? " Entre ellos, uno se llama lm
: Long Mode
( x86-64 : amd64, también conocido como Intel 64, es decir, Capaz de 64 bits)
lm ==> 64-bit processor
O usando lshw
(como se menciona a below por Rolf de Sajonia ), sin sudo
(solo para grepping el ancho de la CPU):
lshw -class cpu|grep "^ width"|uniq|awk ''{print $2}''
Nota: puede tener una CPU de 64 bits con un kernel de 32 bits instalado .
(como ysdx menciona ysdx en su propia respuesta , "Hoy en día, un sistema puede ser multiarch por lo que no tiene sentido de todos modos. Es posible que desee encontrar el destino predeterminado del compilador")
Sencillo script para obtener 64 bit o 32 bit.
if $(getconf LONG_BIT | grep ''64''); then
echo "64 bit system"
else
echo "32 bit system"
fi
Si desplaza 1 izquierda por 32 y obtiene 1, su sistema es de 32 bits. Si desplaza 1 izquierda por 64 y obtiene 1, su sistema es de 64 bits.
En otras palabras,
if echo $((1<<32)) gives 1 then your system is 32 bit
.
if echo $((1<<64)) gives 1 then your system is 64 bit
.
Si estuviera ejecutando una plataforma de 64 bits, vería x86_64 o algo muy similar en la salida de uname -a
Para ejecutar el nombre de hardware de su máquina específica
uname -m
También puedes llamar
getconf LONG_BIT
que devuelve 32 o 64
Si tiene un sistema operativo de 64 bits, en lugar de i686, tiene x86_64
o ia64
en la salida de uname -a
. En eso no tienes ninguna de estas dos cuerdas; tiene un sistema operativo de 32 bits (tenga en cuenta que esto no significa que su CPU no sea de 64 bits).
Si uno está muy limitado en los binarios disponibles (por ejemplo, en initramfs), mis colegas sugirieron:
$ ls -l /lib*/ld-linux*.so.2
En mis sistemas ALT Linux, i586 tiene /lib/ld-linux.so.2
y x86_64 tiene /lib64/ld-linux-x86-64.so.2
.
También puede verificar usando una variable de entorno:
echo $HOSTTYPE
Resultado:
i386
-> 32 bits
x86_64
-> 64 bits
Extraído de: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
lscpu
mostrará una lista con otra información sobre su CPU:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"
Basado en el hecho de que 64 bits es generalmente x86_64
y 32 bits es i686
etc.
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
#include <stdio.h>
int main(void)
{
printf("%d/n", __WORDSIZE);
return 0;
}
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set