desarrollo-web-br-bd.com

¿Cómo determinar la arquitectura del kernel de Linux?

uname -m da i686 y uname -m proporciona la salida i686 i386 en la máquina Red Hat Enterprise Linux Server versión 5.4 (Tikanga). Necesito instalar Oracle Database 10g Release 2 en esa máquina. Entonces, ¿cómo puedo decidir si la arquitectura del núcleo es de 32 bits o de 64 bits?

105
user2914

i386 e i686 son ambos de 32 bits.
x86_64 es de 64 bits

ejemplo para 64 bits:

[email protected]:~$ uname -a  
Linux behrooz 2.6.32-5-AMD64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

EDITAR:
Ver ¿es mi linux ARM 32 o 64 bit? para ARM

99
Behrooz

¡Es simple! Use el comando Arch.

49
PHPst

@ behrooz es correcto. Desafortunadamente uname requiere que conozcas arquitecturas. En realidad, estaba buscando una lista de arquitecturas y encontré este artículo que responde a su pregunta. En lo que respecta a uname -m:

x86_64 GNU/Linux indica que tiene un núcleo Linux de 64 bits en ejecución. Si usa ver i386/i486/i586/i686, es un kernel de 32 bits.

Para determinar si el hardware es capaz de ejecutar un núcleo de 64 bits

grep flags /proc/cpuinfo

Busque lo siguiente en la salida (todas las banderas recuperadas de esta respuesta de stackoverflow para la misma pregunta)

  • lm flag significa CPU de modo largo - CPU de 64 bits
  • tm flag significa modo protegido - CPU de 32 bits
  • rm flag significa Modo Real - CPU de 16 bits
32
xenoterracide

(EDITAR: esta respuesta es INCORRECTA. Gracias al comentario de @ Lizardx)

En Bash, usando el desbordamiento de enteros:

if ((1<<32)); then
  echo 64bits
else
  echo 32bits
fi

Es mucho más eficiente que invocar otro proceso o abrir archivos.

21
Luchostein

Para Debian:

En mi PC

 ~> dpkg --print-architecture 
 AMD64 
 ~> dpkg --print-foreign-architectures 
 i386 

Mi frambuesa pi 2

 ~> dpkg --print-architecture 
 armhf 

La forma más simple es ejecutar:

getconf LONG_BIT

que generará 64 o 32 dependiendo de si es de 32 o 64 bits.

p.ej:

[email protected]:~$ getconf LONG_BIT
64
13
dannyw

use syscap de proyecto Formake

syscap permite probar muchas propiedades del sistema y probar dependencias. Es un script de Shell portátil.

Obtener arquitectura de CPU:

syscap info -Arch

Obtenga el nombre y la versión del kernel:

syscap info -kernel -kernver
2
Alex

Otra forma es verificar la arquitectura para la que se compiló un archivo de sistema, como

$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
1
minaev

O puede utilizar la forma en que lo hace internamente el comando name si desea implementar algunas cosas por su cuenta:

#include <sys/utsname.h>
#include <stdio.h>

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}
0
Meow

Aquí hay otro método usando uname.

Desde man uname:

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64#

0
clusterdude

Si está buscando una línea simple, esta es la solución más confiable que he encontrado que devuelve 64 o 2. No le importa si está ejecutando ARM o no, y debería funcionar en cualquier sistema que use bash o sh.

Cuidado, esto supondrá que el sistema es de 32 bits o de 64 bits. Consulte mi explicación a continuación si necesita detectar una arquitectura de 8-16 o algún otro bit.

[$ ((0xffffffff)) -eq -1] && echo 32 || echo 64

¿Qué pasa aquí?
La lógica es muy simple y todo se reduce a cómo las computadoras almacenan enteros con signo. ¡Una arquitectura de 32 bits solo tiene 32 bits que puede usar para almacenar enteros con signo, mientras que una arquitectura de 64 bits tiene 64 bits! En otras palabras, el conjunto de enteros que se pueden almacenar es finito. La mitad de este conjunto representa números negativos y la otra mitad representa números positivos. El entero con signo igual a -1 se representa como el número más grande que se puede almacenar en un número dado de bits para esa arquitectura. En un sistema de 32 bits, -1 puede representarse por el valor hexadecimal 0xFFFFFFFF (que es 32 bits binarios, todos iguales a 1). En un sistema de 64 bits, 0xFFFFFFFF se traduce en 4,294,967,295, base 10, mientras que 0xFFFFFFFFFFFFFFFF es la representación de -1). Puede ver cómo esto se escalaría fácilmente para sistemas de 8 o 16 bits que serían iguales a -1 en 0xFF y 0xFFFF, respectivamente.

0
b_laoshi