So prüfen Sie den 32-Bit / 64-Bit-Kernel für Linux

7

Ich muss ein Bash-Skript schreiben, wo ich überprüfen muss, ob der Linux-Kernel 32 Bit oder 64 Bit ist.

Ich verwende uname -a und es gibt mir x86_64 Ergebnis. Aber ich glaube, ich kann es nicht auf generische Weise verwenden, da das Ergebnis davon abweichen kann, wenn jemand die x86-Architektur verwendet.

Wie überprüft man den 32-Bit / 64-Bit-Kernel für Linux?

    
VJS 13.04.2012, 08:51
quelle

6 Antworten

15

Die Frage ist eher: Was wollen Sie erreichen, wenn Sie wissen, ob Sie 32 oder 64 sind? Was sind die Konsequenzen einer hypothetischen 128-Bit-Umgebung? Und welcher Teil wird tatsächlich auf N-Bit getestet? Eine CPU unterstützt möglicherweise die Ausführung im 64-Bit-Modus, die Umgebung ist jedoch 32-Bit. Darüber hinaus kann die Umgebung selbst ein gemischter Modus sein; Ziehen Sie in Erwägung, einen 64-Bit-Kernel mit einem 32-Bit-Benutzerbereich auszuführen (durchgeführt auf einer Handvoll klassischer RISCs). Und was ist dann, wenn der Benutzerraum kein homogenes Bit- / ausführbares Format hat? Deshalb ist getconf LONG_BIT ebenso sinnlos zu benutzen, weil es davon abhängt, wie es kompiliert wurde.

%Vor%     
jørgensen 13.04.2012 12:38
quelle
5

Sie könnten das System nach der Größe eines long int abfragen:

%Vor%

Aber ich bin mir nicht sicher, ob das auf allen verschiedenen Architekturen vollständig portierbar ist.

    
Job 13.04.2012 09:10
quelle
1

Suchen Sie nach dem Flag lm (long mode) in / proc / cpuinfo. Wenn dies zutrifft, bedeutet dies, dass Sie einen 64-Bit-Prozessor haben. Ein einfacher Grep sollte dir diese Informationen geben.

In Bezug auf die Kernel-Version können Sie immer auf den uname -a-Informationen zugreifen. Besser wäre es, die Quelle des uname Programms zu finden, so dass wir die Diskrepanz aufgrund eines bösartigen Hostnamens abwerten können.

    
prathmesh.kallurkar 13.04.2012 09:39
quelle
1

Ich habe folgendes gefunden. Es geht davon aus, dass init verwendet wird (einige Distributionen haben zu anderen Loadern gewechselt, aber es sollte leicht sein, eine Liste von häufig verwendeten zu erhalten) und dass Sie ELF , nicht a.out oder ein anderes exotisches ausführbares Format verwenden . Diese scheinen für die meisten Systeme vernünftige Annahmen zu sein, aber wahrscheinlich werden sie in eingebetteten Systemen usw. durchbrochen. Dennoch sollte es möglich sein, die allgemeine Idee anzupassen (zum init -Prozess oder Äquivalent gelangen und seine Bissigkeit mit file überprüfen ). Wenn Sie als root arbeiten, können Sie, anstatt den Pfad der Datei zu durchlaufen, file $(sudo readlink -e /proc/1/exe) verwenden (PID 1 ist init ist wahrscheinlich portabler, als wenn Sie irgendeinen Pfad angeben würden).

%Vor%     
Michał Kosmulski 13.04.2012 10:07
quelle
0

Verlasse, was du suchst, ich habe Maschine in 32 Bit auf 64 Bit proc installiert, alles oben würde 32 Bit in meinem Fall zurückgeben

Aber wenn ich mir Hardware anschaue, lshw auf Ubuntu (lshw -c cpu), zeigt die Beschreibung von CPU klar, dass ich eine 64-Bit-CPU habe, also könnte ich eine 64-Bit-Version von Ubuntu installieren.

/ proc / cpuinfo ist auch eine gute Quelle für Informationen über Hardware, wie die lm-Flags für den langen Modus stehen.

Schönen Tag noch. Jack.

    
JBat 27.10.2016 16:17
quelle
-2

Grep für '64' in uname Ausgabe

%Vor%     
Fedor Igumnov 13.04.2012 08:52
quelle

Tags und Links