Como sei se meu kernel Linux está rodando em 32 bits ou 64 bits?

10

Quando eu faço um gato em / proc / cpuinfo, ele mostra uma linha com clflushsize: 64

Isso significa que meu kernel está sendo executado em 64 bits?

Daniel Cukier
fonte

Respostas:

15
uname -a

lhe dirá o kernel - o bit final mostra a arquitetura.

Dois exemplos:

Meu mac:

Darwin Mac.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386

Minha hospedagem Dreamhost:

Linux ecco 2.6.24.5-serf-xeon-c6.1-grsec #1 SMP Tue Oct 7 06:18:04 PDT 2008 x86_64 GNU/Linux

i386 = 32 bits

x86_64 = 64 bits

Rich Bradshaw
fonte
3
Esta resposta está errada. O bit final mostra a arquitetura exposta ao processo, não a arquitetura do kernel. Veja este link .
David Schwartz
12

uname -mfornecerá a arquitetura para a qual o kernel é compilado. Se for impresso i686, seu kernel é de 32 bits, se x86_64for de 64 bits, supondo que você tenha um chip Intel / AMD.

drrlvn
fonte
Também poderia ser i386em plataformas de 32 bits mais antigos (e eu vi mesmo alguns pacotes compilados para i586- não tenho certeza se isso seria sempre a produção em uname, embora)
a_m0d
3
Esta resposta está errada. uname -mfornece a arquitetura que o kernel escolhe expor a esse processo específico, não a arquitetura nativa do kernel. Veja este link .
David Schwartz
@ David Schwartz: Seu comentário é muito duro, sem uma boa razão e o fato de você ter postado nenhuma alternativa está fazendo com que pareça ainda pior. De qualquer forma, observe que, por padrão uname -m , relata a arquitetura real. Caso contrário, o administrador provavelmente realmente quer que você acredite que está nessa outra arquitetura e sua melhor aposta é aceitar que ele sabe o que está fazendo. Se você é o administrador e está mexendo, setarchentão já sabe melhor.
Ndemou 02/12/2015
Não sei o que é severo na afirmação factual verdadeira de que a resposta está errada. O que você quer dizer com "fazer parecer ainda pior". Talvez não tenha jeito. Talvez haja um bom caminho. Por acaso não sei, então não respondi a essa pergunta. Quanto ao final de seus comentários, eu simplesmente não concordo. Os scripts podem, e fazem, usar, setarche você pode invocá-lo sem ter idéia de que ele uname -mretorna algo diferente. É possível, talvez até provável, que esse tipo de problema seja o motivo pelo qual o OP está perguntando.
David Schwartz
@ndemou o administrador pode ter configurado o sistema de tal maneira que qualquer aplicativo, inclusive, initpense que é de 32 bits: a situação é o kernel de 64 bits com espaço de usuário de 32 bits. Muitos sistemas de compilação dependem uname -mpara determinar os sinalizadores do compilador, por exemplo, o GDB, eles devem ser fornecidos com personalidade falsa. Mas algum outro aplicativo de espaço do usuário ainda pode querer saber que tipo de kernel possui (por exemplo, para algumas necessidades de baixo nível), independentemente da personalidade.
Ruslan
9

Eu acho que a maneira mais precisa é

getconf LONG_BIT

aqui mostra exatamente 64

encontrado nesta dica

getconf é do pacote libc-bin (no ubuntu)

Poder de Aquário
fonte
2

Se você deseja um relatório fácil, porém detalhado, sobre o seu sistema (software CPU, Kernel e Core OS) e não apenas o kernel , aqui está um pequeno script bash que fornecerá as respostas rapidamente.

Se você conhece o suficiente sobre as peculiaridades das CPUs e S / W de 32 bits / 64 bits, é simplesmente útil. Se você não sabe muito e acha que seu "sistema" é de 32 bits ou 64 bits, isso ajudará você a descobrir que a verdade pode ser mais complexa (partes do sistema podem ser de 64 bits enquanto outras de 32 bits) sem confundi-lo.

Novamente, este script (e resposta) não é para a pergunta literal "Como sei se meu kernel Linux está executando em 32 bits ou 64 bits?" mas para aqueles que também querem conhecer o arco de sua CPU e o SO principal do sistema operacional.

Relatórios de exemplo

Estes são exemplos para um caso bastante incomum:

Relatório do mini-script (para usuários experientes)

You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
Your /sbin/init process is 64 bit
Your C compiler is configured to produce 32 bit executables

Relatório de script maior (para usuários menos experientes)

You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
    If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)
    In this case he has (because we have 64bit programs)
Your /sbin/init process is 64 bit
    Most other core OS programs will probably be 64 bits also.
    You may use the following command to check a specific program.
      file -L /path/to/program
Your C compiler is configured to produce 32 bit executables
    (Note that a 64bit compiler may be setup to produce 32bit code)

Os scripts

Mini-script (para administradores experientes)

Essas 4 linhas fornecem todas as informações essenciais.

grep -w 'lm' /proc/cpuinfo > /dev/null && echo "You have a 64 bit CPU" || echo "You have a 32 bit CPU"
echo "Your kernel reports that the architecture is $(uname -m|sed -e 's/x86_64/64 bit/' -e 's/i.86/32 bit/')"
echo "Your /sbin/init process is $(file /sbin/init|sed -e 's/^.* \(32\|64\) bit.*$/\1bit/')"
echo "Your C compiler is configured to produce $(getconf LONG_BIT) bit executables"

Script maior (para usuários menos experientes)

Esse script imprime muitas explicações e é útil se você não tem experiência no assunto e se depara com um caso peculiar.

#!/bin/bash

# collect system info
grep -w 'lm' /proc/cpuinfo > /dev/null && CPU=64 || CPU=32
ARCH=$(uname -m|sed -e 's/x86_64/64/' -e 's/i.86/32/')
INIT=$(file -L /sbin/init|sed -e 's/^.* \(32\|64\)-bit.*$/\1/')
COMPILER=$(getconf LONG_BIT)

# if all values are the same we set UNIFORM="YES"
! echo "$CPU $ARCH $INIT $COMPILER" | grep -q "$CPU $CPU $CPU $CPU" && UNIFORM="NO" || UNIFORM="YES"

# report to the user
echo "You have a $CPU bit CPU"
echo "Your kernel reports that the architecture is $ARCH bit"
if [ "$UNIFORM" = "NO" ] && [ "$ARCH" = "32" ] ; then
       echo "    If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)"
       if  [ "$INIT" = "64" ] ||  [ "$COMPILER" = "64" ] ; then
           echo "    In this case he has (because we have 64bit programs)"
       else
           echo "    We don't see such signs so you most likely run a 32bit kernel"
           echo "    (A 64bit CPU can run 32bit kernels)"
       fi
fi
echo "Your /sbin/init process is $INIT bit"
if [ "$CPU" = "64" ] ; then
     echo "    Most other core OS programs will probably be $INIT bits also."
     echo "    You may use the following command to check a specific program."
     echo "      file -L /path/to/program"
fi
if [ "$UNIFORM" = "NO" ] && [ "$INIT" = "32" ] ; then
     echo "    (Note that a 64bit kernel may start a 32bit init process)"
fi
echo "Your C compiler is configured to produce $COMPILER bit executables"
if [ "$UNIFORM" = "NO" ] && [ "$COMPILER" = "32" ] ; then
        echo "    (Note that a 64bit compiler may be setup to produce 32bit code)"
fi

Se você quiser saber mais, leia estas duas páginas de onde obtive a maioria das informações. A) /programming/246007/how-to-determine-whether-a-given-linux-is-32- bit ou 64 bits b) /unix//a/134394/73271

ndemou
fonte
0

Se você quiser ver apenas a plataforma em que está executando, poderá usar

uname -i

A lista completa de opções suportadas unameé

$ uname --help
Usage: uname [OPTION]...
Print certain system information.  With no OPTION, same as -s.

  -a, --all                print all information, in the following order,
                             except omit -p and -i if unknown:
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type or "unknown"
  -i, --hardware-platform  print the hardware platform or "unknown"
  -o, --operating-system   print the operating system
      --help     display this help and exit
      --version  output version information and exit
a_m0d
fonte
uname -iimpressões GenuineIntel, o que não é realmente o que ele está procurando.
drrlvn 26/08/09
e Unknownem um Mac.
22320 Rich Bradshaw
impressões i386na minha máquina!
a_m0d
0

CLFLUSHSIZEnão diz nada sobre o modo operacional do processador. De acordo com esta resposta , refere-se à menor unidade de cache liberável. No seu caso, as linhas de cache são lidas / gravadas em unidades de 64 bytes.

unamea produção varia muito para ser útil, como mostra a tabela de exemplos da Wikipedia . O método mais confiável é getconf LONG_BITo mostrado na resposta da Aquarius Power . Isso funciona independentemente da arquitetura do processador, portanto, fica em casa no ARM, Power ou MIPS e no x86.

Toby Speight
fonte