Wenn ich uname -a
eingebe, wird die folgende Ausgabe ausgegeben.
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux
Wie kann ich daraus erkennen, dass das angegebene Betriebssystem 32 oder 64 Bit ist?
Dies ist nützlich, wenn Sie configure
Skripte schreiben, zum Beispiel: Für welche Architektur baue ich?
Versuchen Sie uname -m
. Welches ist kurz von _uname --machine
_ und es gibt aus:
_x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
_
Andernfalls , nicht für den Linux-Kernel, sondern für die CPU , geben Sie Folgendes ein:
_cat /proc/cpuinfo
_
oder:
_grep flags /proc/cpuinfo
_
Unter dem Parameter "flags" sehen Sie verschiedene Werte: siehe " Was bedeuten die Flags in/proc/cpuinfo? " Unter ihnen heißt eines lm
: _Long Mode
_ ( x86-64 : AMD64, auch als Intel 64 bekannt, dh 64-Bit-fähig)
_lm ==> 64-bit processor
_
Oder mit lshw
(wie erwähnt nten von Rolf von Sachsen ), ohne Sudo
(nur zum Greifen der CPU Breite):
_lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
_
Hinweis: Sie können eine 64-Bit-CPU mit einem 32-Bit-Kernel installieren .
(als ysdx erwähnt in seine/ihre eigene Antwort , "Heutzutage kann ein System multiarch macht also sowieso keinen Sinn. Vielleicht möchten Sie das Standardziel des Compilers finden ")
Wenn Sie eine 64-Bit-Plattform verwenden, wird in der Ausgabe von name -a x86_64 oder ähnliches angezeigt
Damit wird der Name Ihrer spezifischen Computerhardware ausgeführt
uname -m
Sie können auch anrufen
getconf LONG_BIT
dies gibt entweder 32 oder 64 zurück
lscpu
listet unter anderem folgende Informationen zu Ihrer CPU auf:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
Ein weiterer nützlicher Befehl zur einfachen Bestimmung lautet wie folgt:
Befehl:
getconf LONG_BIT
Antworten:
Der Befehl
$ Arch
ist äquivalent zu
$ uname -m
ist aber doppelt so schnell zu tippen
#include <stdio.h>
int main(void)
{
printf("%d\n", __WORDSIZE);
return 0;
}
Ich habe mich darüber speziell gewundert, um Software in Debian zu erstellen (das installierte Debian-System kann eine 32-Bit-Version mit einem 32-Bit-Kernel, Bibliotheken usw. oder eine 64-Bit-Version sein mit Dingen, die für den 64-Bit-Kompatibilitätsmodus und nicht für den 32-Bit-Kompatibilitätsmodus kompiliert wurden).
Debian-Pakete müssen selbst wissen, für welche Architektur sie bestimmt sind (natürlich), wenn sie das Paket mit all seinen Metadaten, einschließlich der Plattformarchitektur, erstellen. Daher gibt es ein Paket-Tool, das es ausgibt, damit andere Paket-Tools und Skripte es verwenden können dpkg-architecture . Es enthält sowohl das, wofür es konfiguriert ist, als auch den aktuellen Host. (Normalerweise sind diese jedoch identisch.) Beispielausgabe auf einem 64-Bit-Computer:
DEB_BUILD_Arch=AMD64
DEB_BUILD_Arch_OS=linux
DEB_BUILD_Arch_CPU=AMD64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_Host_Arch=AMD64
DEB_Host_Arch_OS=linux
DEB_Host_Arch_CPU=AMD64
DEB_Host_GNU_CPU=x86_64
DEB_Host_GNU_SYSTEM=linux-gnu
DEB_Host_GNU_TYPE=x86_64-linux-gnu
Sie können nur eine dieser Variablen drucken oder einen Test anhand ihrer Werte mit Befehlszeilenoptionen für die Architektur dpkg - durchführen.
Ich habe keine Ahnung, wie dpkg-architecture die Architektur herleitet, aber Sie können sich die Dokumentation oder den Quellcode ansehen (dpkg-architecture und ein Großteil des dpkg-Systems im Allgemeinen sind Perl).
Wenn Sie ein 64-Bit-Betriebssystem anstelle von i686 haben, haben Sie x86_64
oder ia64
in der Ausgabe von uname -a
. Insofern haben Sie keine dieser beiden Saiten; Sie haben ein 32-Bit-Betriebssystem (beachten Sie, dass dies nicht bedeutet, dass Ihre CPU nicht 64-Bit ist).
Das System ist 32bit. iX86 in uname
bedeutet, dass es sich um eine 32-Bit-Architektur handelt. Wenn es 64-Bit wäre, würde es zurückkehren
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux
Heutzutage kann ein System mehrarchig sein, daher macht es sowieso keinen Sinn. Möglicherweise möchten Sie das Standardziel des Compilers ermitteln:
$ cc -v 2> & 1 | grep ^ Target Target: x86_64-pc-linux-gn
Sie können versuchen, eine Hallo-Welt zu kompilieren:
$ echo 'int main () {return 0; } '| cc -xc - -o foo $ file foo foo: ELF-64-Bit-LSB-Programm, x86-64, Version 1 (SYSV), dynamisch verknüpft, Interpreter/lib64/ld-linux- x86-64.so.2, für GNU/Linux 2.6.32, BuildID [sha1] = b114e029a08abfb3c98db93d3dcdb7435b5bba0c, nicht entfernt
In Bezug auf die Antwort "getconf LONG_BIT" .
Ich habe eine einfache Funktion in 'C' geschrieben:
/*
* check_os_64bit
*
* Returns integer:
* 1 = it is a 64-bit OS
* 0 = it is NOT a 64-bit OS (probably 32-bit)
* < 0 = failure
* -1 = popen failed
* -2 = fgets failed
*
* **WARNING**
* Be CAREFUL! Just testing for a boolean return may not cut it
* with this (trivial) implementation! (Think of when it fails,
* returning -ve; this could be seen as non-zero & therefore true!)
* Suggestions?
*/
static int check_os_64bit(void)
{
FILE *fp=NULL;
char cb64[3];
fp = popen ("getconf LONG_BIT", "r");
if (!fp)
return -1;
if (!fgets(cb64, 3, fp))
return -2;
if (!strncmp (cb64, "64", 3)) {
return 1;
}
else {
return 0;
}
}
Gute Idee, die "getconf"!
Sie können auch eine Umgebungsvariable verwenden, um Folgendes zu überprüfen:
echo $HOSTTYPE
Ergebnis:
i386
-> 32 Bits
x86_64
-> 64 Bit
Auszug aus: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
getconf verwendet die wenigsten Systemaufrufe:
$ strace getconf LONG_BIT | wc -l
253
$ strace Arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301
In Bash mit Integer-Überlauf:
if ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
Es ist viel effizienter, als einen anderen Prozess aufzurufen oder Dateien zu öffnen.
Wenn Sie 1 um 32 nach links verschieben und 1 erhalten, ist Ihr System 32-Bit. Wenn Sie 1 um 64 nach links verschieben und 1 erhalten, ist Ihr System 64-Bit.
Mit anderen Worten,
if echo $((1<<32)) gives 1 then your system is 32 bit
.
if echo $((1<<64)) gives 1 then your system is 64 bit
.
Einfaches Skript, um 64-Bit oder 32-Bit zu erhalten
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
Ich kann nicht glauben, dass in all dieser Zeit niemand erwähnt hat:
Sudo lshw -class cpu
um Details über die Geschwindigkeit, Menge, Größe und Leistungsfähigkeit der CPU-Hardware zu erhalten.
[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"
Basierend auf der Tatsache, dass 64-Bit normalerweise x86_64
und 32-Bit i686
usw. ist.
Wenn die verfügbaren Binärdateien stark eingeschränkt sind (z. B. in initramfs), haben meine Kollegen Folgendes vorgeschlagen:
$ ls -l /lib*/ld-linux*.so.2
Auf meinen ALT Linux-Systemen hat i586 /lib/ld-linux.so.2
und x86_64 /lib64/ld-linux-x86-64.so.2
.