Die Ausgabe von uname
:
root@debian:~ # uname -a
Linux 5asnb 2.6.32-5-amd64 #1 SMP Mon Jun 13 05:49:32 UTC 2011 x86_64 GNU/Linux
Die /sbin/init
ausführbare Datei wird jedoch als 32-Bit angezeigt:
root@debian:~ # file /sbin/init
/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
Andere Aspekte des Systems scheinen ebenfalls zu widersprechen:
root@debian:~ # echo $HOSTTYPE
i486
root@debian:~ # getconf LONG_BIT
32
linux
64bit
32bit
cpu-architecture
kiiwii
quelle
quelle
Alle Prozessoren, die den x64- Befehlssatz (auch als x86_64 oder amd64 bezeichnet) unterstützen, unterstützen auch den x86- Befehlssatz (auch als i386 oder i686 bezeichnet, bei denen es sich streng genommen um bestimmte Versionen von x86 handelt). Gleiches gilt für ARM A64 (der neue 64-Bit-Befehlssatz in ARMv8) und A32 (der Name für den „klassischen“ 32-Bit-Befehlssatz) für SPARC64 und SPARC , und ich glaube für MIPS64 und MIPS . Wenn in all diesen Architekturfamilien ein Prozessor 64-Bit-Code ausführen kann, kann er auch 32-Bit-Code ausführen.
Der Linux-Kernel unterstützt das Ausführen von 32-Bit-Userland-Code mit einem 64-Bit-Kernel (bei allen oben genannten Architekturfamilien, glaube ich). Der Kernel muss homogen sein (alle 64-Bit oder alle 32-Bit), und jeder Prozess muss homogen sein. Sie können jedoch eine Mischung aus 32-Bit- und 64-Bit-Prozessen auf einem 64-Bit-Kernel verwenden. Das Umgekehrte ist nicht möglich: Mit einem 32-Bit-Kernel können Sie keine 64-Bit-Prozesse ausführen.
Dies ist eine Design-Wahl unter Linux, die durch den Wunsch motiviert ist, vorhandene 32-Bit-Binärdateien auf 64-Bit-Installationen auszuführen. Andere Unix-Varianten haben andere Entscheidungen getroffen: Solaris kann 64-Bit-Programme auf einem 32-Bit-Kernel ausführen und umgekehrt, während OpenBSD keine 32-Bit-Programme auf einem 64-Bit-Kernel ausführen kann.
Sie können erhalten Informationen über die CPU in
/proc/cpuinfo
. Wenn Ihre x86-CPU daslm
Flag hat, handelt es sich um eine 64-Bit-CPU.Standardmäßig
uname -m
oderarch
zeigt die Architektur an, für die der Kernel kompiliert wurde. Linux kann die „Persönlichkeit“ eines Prozesses (mit dempersonality
) Systemaufruf festlegen . Mit demsetarch
Befehl können Sie einen Unterprozess in einer anderen Persönlichkeit ausführen .setarch i686 someprogram
oderlinux32 someprogram
führt das angegebene Programm in einer Umgebung aus, in deruname -m
zurückgegeben wird,i686
währendsetarch amd64 someprogram
oderlinux64 someprogram
das angegebene Programm in einer Umgebung ausgeführt wird, in deruname -m
zurückgegeben wirdamd64
.file /sbin/init
Hier erfahren Sie, für welche Architektur dasinit
Programm kompiliert wurde. Obwohl es möglich ist, ausführbare 32-Bit- und 64-Bit-Dateien in einer Installation zu mischen, stammen normalerweise alle Kernprogramme des Betriebssystems von derselben Architektur, da die Verwaltung viel einfacher ist.$HOSTYPE
ist eine Bash-Variable und gibt an, für welche Architektur dasbash
Programm kompiliert wurde.getconf LONG_BIT
Hier erfahren Sie, ob der Standard-C-Compiler zum Kompilieren von 32-Bit- oder 64-Bit-Programmen eingerichtet ist. Ein genauerer Test besteht darin, ein Programm zu kompilieren und auszuführen, das drucktsizeof(void*)
odersizeof(size_t)
aufruft. Esgetconf
kann nur Informationen darüber geben, wasgetconf
der Standard-Compiler für möglich hält.quelle