Respostas:
"uname -m" é o comando que você está procurando. Você pode executar 32 bits e 64 bits nos modernos processadores Intel e AMD, para que "uname -p" não o ajude (além disso, na maioria das vezes não funciona nos dias de hoje, este aqui core2 acha a resposta para "uname -p" É desconhecido").
Procurar a existência de / usr / lib64 (como foi sugerido) também não ajudará, pois alguns pacotes relacionados a hardware e sistema instalarão as bibliotecas de 32 bits e 64 bits para ficarem seguros. No meu sistema (debian), o pacote fakeroot faz exatamente isso.
Quanto à saída de "uname -m", se for i386 ou i686, é de 32 bits, se é x86_64 (ou alpha, ou ia64 ou alguma outra arquitetura de 64 bits que eu nunca vi :) é de 64 bits.
(como um divertimento à parte, meu servidor FreeBSD de 64 bits retorna "amd64", o que pode ser um pouco estranho para um intel quadcore, mas totalmente compreensível se você conhece o histórico da arquitetura x86 de 64 bits)
uname -a e procure por x86_64. Se você quiser saber se sua CPU suporta 64 bits, cat / proc / cpuinfo e procure por lm dentro dos sinalizadores.
Apenas para confundir as coisas, você pode executar um kernel de 64 bits com uma terra de usuário de 32 bits, que é o que estou fazendo. Nesse caso, uname -m
retorna , x86_64
mas não tenho bibliotecas de 64 bits instaladas para que a maioria dos programas de 64 bits não seja executada.
Então, quando você verificar uname, você precisa olhar para /lib64/ld-linux-x86-64.so.2
, /lib64/libc-2.7.so
e /lib/ld-linux.so.2
, /lib/libc-2.7.so
para ver se 64bit e 32bit bibliotecas estão disponíveis. E para ter certeza, execute esses arquivos e verifique se eles são executados corretamente.
Outra informação útil é a saída da lsb_release -a
qual é a distribuição cruzada e relatará quais módulos LSB específicos da arquitetura estão disponíveis.
lsb_release -a
não saída a arquitetura userland
$> getconf LONG_BIT
Resposta: 32 ou 64.
Outra maneira de fazer isso é perguntar ao perl qual compilador disse que o tamanho de um número inteiro longo é:
$ perl -MConfig -e 'print $Config{longsize}*8 . "\n";'
64
vs.
$ perl -MConfig -e 'print $Config{longsize}*8 . "\n";'
32
Ou, se você possui o gcc instalado, o mesmo em C:
$ cat > bits.c <<EOC
> #include <stdlib.h>
> #include <stdio.h>
>
> int main(void) {
> printf("%d\n", (int)sizeof(long)*8);
>
> exit(0);
> }
> EOC
$ gcc -Wall -o bits bits.c
$ ./bits
64
vs.
[...]
> EOC
$ gcc -Wall -o bits bits.c
$ ./bits
32
:-)
Como uma duplicata de:
Linux + como verificar a versão Linux 32 bits ou 64 bits
O uname -m fornecerá apenas o 'arch' / arquitetura em execução do kernel. NÃO informará se você está executando uma distribuição GNU / Linux de 32 bits em uma CPU com capacidade de 64 bits.
Para conhecer sua capacidade de CPU:
cat /proc/cpuinfo
O sinalizador 'LM' deve estar presente em sistemas de 64 bits, pois representa 'LONG MODE' (extensões de 64 bits, AMD64 da AMD ou EM64T da Intel).
$ uname -p
x86_64
Se você possui / usr / lib64, está executando o x86_64.
O comando de Brad Gilbert tinha um bug perl. Eu o corrigi e o comando abaixo funciona: cat / proc / cpuinfo | sinalizadores grep ^ | perl -e '$ = <>; print ($ ? "x86_64 \ n": "não x86_64 \ n")'