Como determinar a arquitetura do kernel do Linux?

88

uname -m fornece i686 e uname -m fornece i686 i386 na máquina Red Hat Enterprise Linux Server versão 5.4 (Tikanga). Eu preciso instalar o Oracle Database 10g Release 2 nessa máquina. Então, como posso decidir se a arquitetura do kernel é de 32 bits ou 64 bits?

    
por user2914 02.05.2011 / 09:46

11 respostas

87

i386 e i686 são ambos de 32 bits.
x86_64 é de 64 bits

exemplo para 64 bits:

behrooz@behrooz:~$ uname -a  
Linux behrooz 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

EDITAR:
Veja meu linux ARM 32 ou 64 bits? para ARM

    
por 02.05.2011 / 09:59
35

É simples! Use o comando arch .

    
por 23.03.2013 / 04:33
31

@behrooz está correto. Infelizmente uname exige que você conheça arquiteturas. Na verdade, eu estava procurando por uma lista de arquiteturas e encontrei este artigo que responde à sua pergunta. Em relação a uname -m :

x86_64 GNU/Linux indicates that you've a 64bit Linux kernel running. If you use see i386/i486/i586/i686 it is a 32 bit kernel.

Para determinar se o hardware é capaz de executar um kernel de 64 bits

grep flags /proc/cpuinfo

Procure o seguinte na saída (todos os sinalizadores recuperados de esta resposta do stackoverflow para a mesma pergunta)

  • lm flag significa CPU de modo longo - CPU de 64 bits
  • tm flag significa Modo protegido - CPU de 32 bits
  • rm flag significa Modo Real - CPU de 16 bits
por 02.05.2011 / 20:04
21

(EDIT: esta resposta é ERRADA. Graças ao comentário de @ Lizardx)

No Bash, usando o estouro de inteiro:

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

É muito mais eficiente do que invocar outro processo ou abrir arquivos.

    
por 10.11.2014 / 14:56
12

A maneira mais simples é executar:

getconf LONG_BIT

, que produzirá 64 ou 32, dependendo de ser 32 ou 64 bits.

por exemplo:

dannyw@dannyw-redhat:~$ getconf LONG_BIT
64
    
por 27.08.2015 / 03:48
12

Para Debian :

No meu PC

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

Meu Raspberry Pi 2

    ~ > dpkg --print-architecture
    armhf
    
por 28.08.2015 / 14:45
1

Outra maneira é verificar a arquitetura para a qual algum arquivo de sistema foi compilado, 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
    
por 04.05.2011 / 10:51
1

use syscap em projeto Formake

syscap permite sondar muitas propriedades do sistema e testar dependências. É um script de shell portátil.

Obtenha arquitetura de CPU:

syscap info -arch

Obtenha o nome e a versão do kernel:

syscap info -kernel -kernver
    
por 02.04.2017 / 23:49
0

Ou você pode usar a maneira como o comando uname faz internamente se você quiser implementar algumas coisas por conta própria:

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

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}
    
por 16.02.2015 / 15:28
0

Aqui está outro método usando uname .

De man uname :

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

# uname -i x86_64 #

    
por 18.11.2016 / 00:57
0

Se você está procurando um simples one-liner, esta é a solução mais confiável que encontrei e que retorna 64 ou 32 . Não importa se você está executando o ARM ou não, e ele deve funcionar em qualquer sistema usando bash ou sh .

Cuidado, isso pressupõe que o sistema seja de 32 ou 64 bits. Veja minha explicação abaixo se precisar detectar arquitetura de 8-16- ou alguns outros bits.

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

O que está acontecendo aqui?
A lógica é muito simples e tudo se resume a como os computadores armazenam números inteiros assinados. Uma arquitetura de 32 bits tem apenas 32 bits que podem ser usados para armazenar números inteiros assinados, enquanto uma arquitetura de 64 bits tem 64 bits! Em outras palavras, o conjunto de números inteiros que podem ser armazenados é finito. Metade desse conjunto representa números negativos e metade representa números positivos. O número inteiro assinado igual a -1 é representado como o maior número que pode ser armazenado em um determinado número de bits para essa arquitetura. Em um sistema de 32 bits, -1 pode ser representado pelo valor hexadecimal 0xFFFFFFFF (que é 32 bits binários, todos iguais a 1). Em um sistema de 64 bits, 0xFFFFFFFF é traduzido como 4.294.967.295, base 10, enquanto 0xFFFFFFFFFFFFFFFF é a representação para -1). Você pode ver como isso seria facilmente dimensionado para sistemas de 8 ou 16 bits, o que equivaleria a -1 em 0xFF e 0xFFFF, respectivamente.

    
por 26.09.2018 / 10:05