uname -m
dává i686 a uname -m
dává výstup i686 i386 ve stroji Red Hat Enterprise Linux Server verze 5.4 (Tikanga). Potřebuji nainstalovat Oracle Database 10g Release 2 do tohoto počítače. Jak tedy mohu rozhodnout, zda je architektura jádra 32bit nebo 64bit?
i386 a i686 jsou 32bitové.
x86_64 je 64-bit
příklad pro 64 bit:
[email protected]:~$ uname -a
Linux behrooz 2.6.32-5-AMD64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux
ÚPRAVA:
Viz je moje linux ARM 32 nebo 64 bit? pro ARM
Je to jednoduché! Použijte příkaz Arch
.
@ behrooz je správné. Bohužel uname
vyžaduje, abyste znát architektury. Vlastně jsem hledal seznam architektur a našel jsem tento článek , který odpovídá vaší otázce. Co se týká uname -m
:
x86_64 GNU/Linux označuje, že máte spuštěné 64bitové jádro systému Linux. Pokud použijete příkaz i386/i486/i586/i686, jedná se o 32bitové jádro.
Chcete-li zjistit, zda je hardware schopen spustit 64bitové jádro
grep flags /proc/cpuinfo
Ve výstupu vyhledejte následující (všechny příznaky načtené z tato odpověď stackoverflow pro stejnou otázku)
lm
znamená CPU v dlouhém režimu - 64bitový procesortm
příznak znamená Chráněný režim - 32bitový procesorrm
flag znamená Real Mode - 16 bit CPU(ÚPRAVA: tato odpověď je špatná. Díky poznámce @ Lizardxa)
V Bash pomocí přetečení celého čísla:
if ((1<<32)); then
echo 64bits
else
echo 32bits
fi
Je to mnohem efektivnější než vyvolání jiného procesu nebo otevření souborů.
Pro Debian:
Na mém PC
~> dpkg --print-architecture AMD64
~> dpkg --print-cizí-architektury i386
My Raspberry Pi 2
~> dpkg --print-architecture armhf
Nejjednodušší způsob je spustit:
getconf LONG_BIT
což bude výstup 64 nebo 32 v závislosti na tom, zda je to 32 nebo 64 bitů.
např:
[email protected]:~$ getconf LONG_BIT
64
použijte syscap z Formake project
syscap umožňuje snímat mnoho vlastností systému a testovat závislosti. Je to přenosný skript Shell.
Získejte architekturu CPU:
syscap info -Arch
Získejte název a verzi jádra:
syscap info -kernel -kernver
Dalším způsobem je zkontrolovat architekturu, pro kterou byl kompilován nějaký systémový soubor
$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
Nebo můžete použít to, co interně dělá příkaz name, pokud chcete implementovat některé věci sami:
#include <sys/utsname.h>
#include <stdio.h>
int main() {
struct utsname name;
uname(&name);
printf("%s\n",name.machine);
return 0;
}
Zde je další metoda používající uname
.
Z man uname
:
... -i, --hardware-platform print the hardware platform or "unknown" ...
# uname -i x86_64
#
Pokud hledáte jednoduchou linii, je to nejspolehlivější řešení, které jsem našel a vrací 64 nebo 2. Nezáleží na tom, zda běžíte ARM nebo ne), a mělo by to fungovat na každém systému pomocí bash nebo sh.
Pozor, předpokládá se, že systém je 32bitový nebo 64bitový. Viz moje vysvětlení níže, pokud potřebujete detekovat 8- 16- nebo nějakou jinou bitovou architekturu.
[$ ((0xffffffff)) -eq -1] && echo 32 || echo 64
Co se tady děje?
Logika je velmi jednoduchá a vše se scvrkává na to, jak počítače ukládají podepsaná celá čísla. 32bitová architektura má pouze 32 bitů, které může použít pro ukládání celých čísel podepsaných, zatímco 64bitová architektura má 64 bitů! Jinými slovy sada celých čísel, která lze uložit, je omezená. Polovina této sady představuje záporná čísla a polovina představuje kladná čísla. Podepsané celé číslo rovné -1 je představováno jako největší číslo, které může být pro danou architekturu uloženo v daném počtu bitů. V 32bitovém systému může být -1 představováno hexadecimální hodnotou 0xFFFFFFFF (což je 32 binárních bitů, všechny se rovnají 1). V 64bitovém systému se 0xFFFFFFFF překládá na 4 294 967 295, základní 10, zatímco 0xFFFFFFFFFFFFFFFF je reprezentace pro -1). Uvidíte, jak by to bylo snadno škálovatelné pro systémy, které jsou také 8- nebo 16bitové, což by se rovnalo -1 při 0xFF a 0xFFFF.