O que é um comando do Linux que eu posso executar para retornar programaticamente 32 ou 64 para indicar se o processador é um processador de 32 ou 64 bits?
O que é um comando do Linux que eu posso executar para retornar programaticamente 32 ou 64 para indicar se o processador é um processador de 32 ou 64 bits?
Respostas:
Você pode ver se a CPU é de 64 bits, 32 bits ou capaz de ambos, verificando a flags
linha /proc/cpuinfo
. Você precisa conhecer os possíveis sinalizadores da sua família de arquitetura. Por exemplo, nas plataformas i386 / amd64, o lm
sinalizador identifica 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 uname -m
. Por exemplo, i[3456]86
são 32 bits enquanto x86_64
são 64 bits. Observe que, em várias arquiteturas, um kernel de 64 bits pode executar programas de usuário 32 bits, portanto, mesmo se houver uname -m
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ê rodar setarch i386 bash
em um sistema amd64, e você executar a uname -m
partir desse bash, você verá uname -m
relatórios 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 do LSB com o lsb_release
comando. Mais precisamente, lsb_release -s
imprime uma :
lista separada de recursos LSB suportados. Cada recurso tem o formulário . Por exemplo, a disponibilidade de uma biblioteca ix86 C é indicada por , enquanto é 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.module-version-architecture
core-2.0-ia32
core-2.0-amd64
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 imprime sizeof(void*)
ou sizeof(size_t)
.
getconf WORD_BIT
ou, ao getconf LONG_BIT
invés de ter que compilar seu próprio programa C (trivial e portátil, embora seja).
getconf
aqui. Parece bom, em princípio, mas é difícil garantir que os resultados se apliquem ao compilador C específico que você usará, se houver mais de um (normalmente gcc / icc ou similar no Linux, gcc / cc nativo em outro lugar). Em um sistema padrão getconf
deve aplicar para c89
ou c99
em $(getconf PATH)
, mas na prática eu me preocupo com alguém instalar uma alternativa cc
que é executado pelo c89
wrapper do fornecedor .
.
falta no regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo
. Também só funciona para mim sem a -q
bandeira
.
: eu tinha "zero ou mais espaços", mas na verdade há uma aba. Eu mudei o regexp para permitir abas também. Com o -q
sinalizador, não há saída, mas o status de saída do comando informa se o sinalizador está presente. Se você quiser saída, remova o -q
sinalizador.
-q
bandeira. Ty, funciona agora :)
Você pode usar uname -a
e procurar para x86_64
ver se está executando 64 bits. Qualquer outra coisa (tanto quanto eu sei) e você estiver executando 32 bits ou você está em hardware não-PC, como alpha
, sparc
, ou ppc64
.
alpha
, sparc64
, ppc64
, ...
Tipo:
uname -a
Se você perceber x86_64 GNU/Linux
que está rodando um kernel de 64 bits. Se você obtiver algo parecido com o que i386/i486/i586/i686
você está provavelmente executando um kernel de 32 bits
O getconf usa o menor número de chamadas do 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