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?
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?
Respostas:
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
uname -m
fornecerá a arquitetura para a qual o kernel é compilado. Se for impresso i686
, seu kernel é de 32 bits, se x86_64
for de 64 bits, supondo que você tenha um chip Intel / AMD.
i386
em 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)
uname -m
fornece a arquitetura que o kernel escolhe expor a esse processo específico, não a arquitetura nativa do kernel. Veja este link .
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, setarch
então já sabe melhor.
setarch
e você pode invocá-lo sem ter idéia de que ele uname -m
retorna algo diferente. É possível, talvez até provável, que esse tipo de problema seja o motivo pelo qual o OP está perguntando.
init
pense 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 -m
para 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.
Eu acho que a maneira mais precisa é
getconf LONG_BIT
aqui mostra exatamente 64
encontrado nesta dica
getconf
é do pacote libc-bin (no ubuntu)
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.
Estes são exemplos para um caso bastante incomum:
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
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)
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"
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
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
uname -i
impressões GenuineIntel
, o que não é realmente o que ele está procurando.
Unknown
em um Mac.
i386
na minha máquina!
CLFLUSHSIZE
nã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.
uname
a produção varia muito para ser útil, como mostra a tabela de exemplos da Wikipedia . O método mais confiável é getconf LONG_BIT
o 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.