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?
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.
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.
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).
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.
Tags und Links linux linux-kernel archlinux