web-dev-qa-db-de.com

Wie kann man feststellen, ob ein bestimmtes Linux 32-Bit oder 64-Bit ist?

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?

466

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 ")

731
VonC

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

153
Thomas Watnedal

lscpu listet unter anderem folgende Informationen zu Ihrer CPU auf:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...
42
asharma

Ein weiterer nützlicher Befehl zur einfachen Bestimmung lautet wie folgt:

Befehl:

getconf LONG_BIT

Antworten:

  • 32, wenn das Betriebssystem 32 Bit ist
  • 64, wenn das Betriebssystem 64-Bit ist
33
user3207041

Der Befehl

$ Arch    

ist äquivalent zu

$ uname -m

ist aber doppelt so schnell zu tippen

12
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}
11
scotty

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).

11
Reed Hedges

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).

10
Denis R.

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
6
Louis Gerbarg

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 
6
ysdx

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"!

5
kaiwan

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

4
LinuxMaintwo

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
3
user5859111

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.

3
Luchostein

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.

2
Sandeep Giri

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
1
lakshmikandan
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
1
alex

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.

1
Rolf of Saxony

[ -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.

1
79man

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.

1