Comando Linux para retornar o número de bits (32 ou 64)?

13

O que é um comando do Linux que eu posso executar para retornar programaticamente 32 ou 64 para indicar se o processador é de 32 ou 64 bits?

    
por WilliamKF 08.11.2010 / 00:48

5 respostas

13
  • Você pode ver se a CPU é de 64 bits, 32 bits ou capaz de ambas, verificando a linha flags em /proc/cpuinfo . Você precisa conhecer os possíveis sinalizadores em sua família de arquitetura. Por exemplo, nas plataformas i386 / amd64, o sinalizador lm identifica as CPUs compatíveis com amd64 (as CPUs que não possuem esse sinalizador são apenas i386).

    grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo    # Assuming a PC
    
  • Você pode ver se o kernel é de 32 bits ou 64 bits, consultando a arquitetura com uname -m . Por exemplo, i[3456]86 são de 32 bits, enquanto x86_64 é de 64 bits. Observe que, em várias arquiteturas, um kernel de 64 bits pode executar programas de usuário 32 bits, portanto, mesmo que o uname -m mostre um kernel de 64 bits, não há garantia de que as bibliotecas de 64 bits estarão disponíveis.

    [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
    

    Observe também que uname -m pode retornar um valor "virtualizado". Por exemplo, no Linux, se você executar setarch i386 bash em um sistema amd64 e executar uname -m desse bash, verá uname -m reporting i386 . Isso efetivamente permite que você finja que está em um “sistema de 32 bits”, mesmo que o kernel seja de 64 bits, por exemplo, para compilar programas de 32 bits sem configurar a compilação cruzada.

  • Você pode ver o que está disponível no userland consultando o suporte LSB com o lsb_release comando. Mais precisamente, lsb_release -s imprime uma lista separada por : de recursos LSB suportados. Cada recurso possui o formato module-version-architecture . Por exemplo, a disponibilidade de uma biblioteca ix86 C é indicada por core-2.0-ia32 , enquanto core-2.0-amd64 é o análogo para amd64. Nem todas as distribuições declaram todos os módulos LSB disponíveis, portanto, pode estar disponível mais do que é detectável desta forma.

  • Você pode descobrir o tamanho da palavra preferida para desenvolvimento (supondo que um compilador C esteja disponível) compilando um programa C de 5 linhas que imprima sizeof(void*) ou sizeof(size_t) .

por 08.11.2010 / 01:04
3

Você pode usar uname -a e procurar x86_64 para ver se está executando 64 bits. Qualquer outra coisa (até onde eu sei) e você está executando 32 bits ou está em um hardware que não é do PC, como alpha , sparc ou ppc64 .

    
por 08.11.2010 / 00:59
1

Tipo:

uname -a

Se você obtiver x86_64 GNU/Linux , estará executando um kernel de 64 bits. Se você obtiver algo parecido com i386/i486/i586/i686 , provavelmente estará executando um kernel de 32 bits

    
por 08.11.2010 / 00:59
1
uname -m | sed 's/x86_//;s/i[3-6]86/32/'
    
por 08.11.2010 / 01:01
1

o getconf usa o menor número de chamadas ao 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
    
por 06.02.2016 / 23:27