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 flagslinha /proc/cpuinfo. Você precisa conhecer os possíveis sinalizadores da sua família de arquitetura. Por exemplo, nas plataformas i386 / amd64, o lmsinalizador 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]86são 32 bits enquanto x86_64sã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 -mum 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 -mpode retornar um valor "virtualizado". Por exemplo, no Linux, se você rodar setarch i386 bashem um sistema amd64, e você executar a uname -mpartir desse bash, você verá uname -mrelató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_releasecomando. Mais precisamente, lsb_release -simprime 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-architecturecore-2.0-ia32core-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_BITou, ao getconf LONG_BITinvés de ter que compilar seu próprio programa C (trivial e portátil, embora seja).
getconfaqui. 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 getconfdeve aplicar para c89ou c99em $(getconf PATH), mas na prática eu me preocupo com alguém instalar uma alternativa ccque é executado pelo c89wrapper do fornecedor .
.falta no regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo. Também só funciona para mim sem a -qbandeira
.: eu tinha "zero ou mais espaços", mas na verdade há uma aba. Eu mudei o regexp para permitir abas também. Com o -qsinalizador, 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 -qsinalizador.
-qbandeira. Ty, funciona agora :)
Você pode usar uname -ae procurar para x86_64ver 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/Linuxque está rodando um kernel de 64 bits. Se você obtiver algo parecido com o que i386/i486/i586/i686você 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