Woher weiß ich, ob mein Linux-Kernel mit 32 Bit oder 64 Bit läuft?

13427
Daniel Cukier

Wenn ich eine Katze in / proc / cpuinfo mache, wird eine Zeile mit clflushsize angezeigt: 64

Bedeutet das, dass mein Kernel in 64 Bit läuft?

10

6 Antworten auf die Frage

15
Rich Bradshaw
uname -a 

wird Ihnen den Kernel mitteilen - das Ende-Bit zeigt Ihnen die Architektur.

Zwei Beispiele:

Mein 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 

Mein Dreamhost-Hosting:

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 bit

x86_64 = 64 Bit

Diese Antwort ist falsch. Das Ende-Bit zeigt die Architektur an, die dem Prozess zur Verfügung gestellt wird, nicht die Kernel-Architektur. Siehe [diesen Link] (http://pastebin.com/6GYN4MbD). David Schwartz vor 8 Jahren 3
10
drrlvn

uname -mgibt Ihnen die Architektur, für die Sie den Kernel kompiliert haben. Wenn es gedruckt wird, i686ist Ihr Kernel 32 Bit, wenn x86_64es 64 Bit ist, vorausgesetzt, Sie haben einen Intel / AMD-Chip.

Könnte auch "i386" auf älteren 32-Bit-Plattformen sein (und ich habe sogar einige Pakete gesehen, die für "i586" kompiliert wurden - nicht sicher, ob dies jemals von "uname" ausgegeben werden würde) a_m0d vor 14 Jahren 0
Diese Antwort ist falsch. "uname -m" gibt Ihnen die Architektur, die der Kernel für diesen bestimmten Prozess verfügbar macht, nicht die native Architektur des Kernels. Siehe [diesen Link] (http://pastebin.com/NbZDr46f). David Schwartz vor 8 Jahren 3
@David Schwartz: Dein Kommentar ist aus keinem guten Grund zu hart und die Tatsache, dass du keine Alternative gepostet hast, macht es noch schlimmer. Beachten Sie jedoch, dass "uname -m" * standardmäßig * die tatsächliche Architektur angibt. Wenn dies nicht der Fall ist, möchte der Administrator höchstwahrscheinlich wirklich, dass Sie glauben, dass Sie sich auf dieser anderen Architektur befinden, und Ihre beste Wette ist zu akzeptieren, dass er weiß, was er tut. Wenn Sie der Administrator sind und mit `setarch` herumspielen, wissen Sie es sowieso schon besser. ndemou vor 8 Jahren 0
Ich weiß nicht, was hart an der wahren Tatsachenaussage ist, dass die Antwort falsch ist. Was meinen Sie mit "es noch schlimmer aussehen lassen". Vielleicht gibt es keinen Weg. Vielleicht gibt es einen guten Weg. Ich weiß es nicht, also habe ich diese Frage nicht beantwortet. Was das Ende Ihrer Kommentare angeht, stimme ich einfach nicht zu. Skripte können `setarch` verwenden, und Sie können ein solches Skript aufrufen, ohne zu wissen, dass` uname -m` etwas anderes zurückgibt. Es ist möglich, vielleicht sogar wahrscheinlich, dass das OP diese Fragen stellt. David Schwartz vor 8 Jahren 0
@ndemou der Administrator hat das System möglicherweise so eingerichtet, dass jede Anwendung, die `init` enthält, den Eindruck hat, dass es sich um 32-Bit handelt: Die Situation hierfür ist ein 64-Bit-Kernel mit 32-Bit-Benutzerraum. Viele Kompilierungssysteme hängen von 'uname -m' ab, um Compiler-Flags zu bestimmen, z. B. die von GDB. Sie müssen mit einer gefälschten Persönlichkeit versorgt werden. Einige andere Userspace-Anwendungen können jedoch immer noch wissen, welche Art von Kernel es hat (z. B. für einige Low-Level-Anforderungen), unabhängig von der Persönlichkeit. Ruslan vor 7 Jahren 0
7
Aquarius Power

Ich denke, der genaueste Weg ist

getconf LONG_BIT 

hier zeigt es genau 64

auf diesem Tipp gefunden

getconf ist aus Paket libc-bin (auf Ubuntu)

1
a_m0d

Wenn Sie nur die Plattform anzeigen möchten, auf der Sie ausgeführt werden, können Sie verwenden

uname -i 

Die vollständige Liste der unterstützten Optionen für unameist

$ 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` druckt` GenuineIntel`, was eigentlich nicht das ist, wonach er sucht. drrlvn vor 14 Jahren 0
und `Unknown` auf einem Mac. Rich Bradshaw vor 14 Jahren 0
druckt `i386` auf meiner Maschine! a_m0d vor 14 Jahren 0
0
Toby Speight

CLFLUSHSIZEsagt Ihnen nichts über den Betriebsmodus des Prozessors. Gemäß dieser Antwort bezieht es sich auf die kleinste löschbare Cache-Einheit. In Ihrem Fall werden Cache-Zeilen in Einheiten von 64 Bytes gelesen / geschrieben.

unameDie Ausgabe variiert zu stark, um nützlich zu sein, wie ein Blick auf die Beispieltabelle von Wikipedia zeigt. Die zuverlässigste Methode ist getconf LONG_BITals Show in Wassermann Power Antwort . Dies funktioniert unabhängig von der Prozessorarchitektur, ist also bei ARM, Power oder MIPS genauso zu Hause wie bei x86.

0
ndemou

Diese vier Bash-Befehle erklären Ihnen fast alles, was Sie wissen möchten:

grep -w 'lm' /proc/cpuinfo > /dev/null && echo "You have a 64bit CPU" || echo "You have a 32bit CPU" echo "Your kernel reports it's running on a $(uname -m|sed -e 's/x86_64/64bit/' -e 's/i.86/32bit/') machine" echo "Your /sbin/init process is $(file /sbin/init|sed -e 's/^.* \(32\|64\)-bit.*$/\1bit/')" echo "Your C compiler is setup to produce $(getconf LONG_BIT)bit executables" 

Wenn die Ergebnisse widersprüchlich erscheinen, beachten Sie bitte die folgenden Fakten:

  • Sie können 32-Bit-Kernel auf 64-Bit-CPUs ausführen (nicht jedoch invers).
  • Sie können ausführbare 32-Bit-Programme auf 64-Bit-Kerneln ausführen (nicht jedoch die inversen).

und lesen Sie diese Seite https://stackoverflow.com/questions/246007/how-to-determine-whether-a-given-linux-is-32-bit-or-64-bit und die Antwort https: // unix. stackexchange.com/a/134394/73271