-
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 sinalizadorlm
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, enquantox86_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 ouname -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ê executarsetarch i386 bash
em um sistema amd64 e executaruname -m
desse bash, veráuname -m
reportingi386
. 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 formatomodule-version-architecture
. Por exemplo, a disponibilidade de uma biblioteca ix86 C é indicada porcore-2.0-ia32
, enquantocore-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*)
ousizeof(size_t)
.