GNU/Linux >> LINUX-Kenntnisse >  >> Linux

uname ist kaputt:Wie ermittle ich den aktuell laufenden Kernel?

Sie haben Ihre libc (die grundlegendste Systembibliothek) aktualisiert und jetzt funktioniert kein Programm mehr. Genau genommen funktioniert kein dynamisch gelinktes Programm.

In Ihrem speziellen Szenario sollte der Neustart funktionieren. Die jetzt installierte libc erfordert einen neueren Kernel, und wenn Sie neu starten, sollten Sie diesen neueren Kernel erhalten.

Solange Sie noch eine funktionierende Shell haben, gibt es oft eine Möglichkeit, sich zu erholen, aber es kann schwierig sein, wenn Sie es nicht geplant haben. Wenn Sie keine Shell haben, gibt es normalerweise keine andere Lösung als einen Neustart.

Hier können Sie möglicherweise nicht ohne Neustart wiederherstellen, aber Sie können zumindest leicht herausfinden, welcher Kernel ausgeführt wird. Verwenden Sie einfach eine Möglichkeit, /proc/version zu lesen das erfordert keinen externen Befehl.

read v </proc/version; echo $v
echo $(</proc/version)               # in zsh/bash/ksh

Wenn Sie noch eine Kopie der alten libc haben, können Sie Programme damit ausführen. Zum Beispiel, wenn die alte libc in /old/lib ist und Sie haben ausführbare Dateien, die mit dieser alten libc in /old/bin funktionieren , können Sie

ausführen
LD_LIBRARY_PATH=/old/lib /old/lib/ld-linux.so.2 /old/bin/uname

Wenn Sie einige statisch gelinkte Binärdateien haben, funktionieren sie trotzdem. Ich empfehle, für diese Art von Problem statistisch verknüpfte Systemdienstprogramme zu installieren (aber Sie müssen dies tun, bevor das Problem auftritt). Installieren Sie beispielsweise unter Debian/Ubuntu/Mint/… eines oder mehrere von busybox-static (Sammlung grundlegender Linux-Befehlszeilentools einschließlich einer Shell), sash (Shell mit einigen zusätzlichen integrierten Funktionen), zsh-static (nur eine Shell, aber mit einigen praktischen integrierten Tools).

busybox-static uname
sash -c '-cat /proc/version'
zsh-static -c '</proc/version'

Das scheint der Fehler zu sein, den glibc auslöst, wenn es auf einem Kernel läuft, der älter ist als das, für dessen Unterstützung die Bibliothek kompiliert wurde. Die Fehlermeldung steht in DL_SYSDEP_OSCHECK(FATAL) Makro in sysdeps/unix/sysv/linux/dl-osinfo.h

Dafür gibt es eine Kompilierzeitoption:

--enable-kernel=version
Diese Option ist derzeit nur auf GNU/Linux-Systemen sinnvoll. Der Versionsparameter sollte die Form X.Y.Z haben und beschreibt die kleinste Version des Linux-Kernels, die die generierte Bibliothek unterstützen soll. Je höher die Versionsnummer ist, desto weniger Kompatibilitätscode wird hinzugefügt und desto schneller wird der Code.

Es scheint also, dass Sie aus irgendeinem Grund ein System mit einem alten Kernel, aber einer installierten glibc betreiben, die den alten Kernel nicht mehr unterstützt. Wie Sie das bekommen haben, ist ohne Informationen darüber, um welches System es sich handelt, schwer zu sagen, aber man könnte annehmen, dass dies passieren könnte, wenn die Bibliothek aktualisiert wird, der Kernel jedoch nicht.

file scheint die Mindestversion anzuzeigen, die von einer ausführbaren Datei oder einer Bibliothek benötigt wird (aber natürlich benötigen Sie eine funktionierende Bibliothek, um sie auszuführen):

/lib/x86_64-linux-gnu/libc-2.23.so: ELF 64-bit LSB shared object, x86-64, ..., for GNU/Linux 2.6.32, stripped

Auf meinen halbaktuellen Debian-Systemen ist die erforderliche Kernel-Version 2.6.32 wie oben bei allen Binärdateien, die ich überprüft habe, was es ziemlich unwahrscheinlich machen würde, dass ein Problem mit der Kernel-Version auftritt.


Versuchen Sie es damit:

cat /proc/version

Linux
  1. Linux – Wie kann man feststellen, welches Modul den Kernel verschmutzt?

  2. Linux – Wie gibt man dem Dateisystem-Cache Ram?

  3. Wie bestimmt der Linux-Kernel die Reihenfolge der __init-Aufrufe?

  4. Wie überprüfe ich HZ im Terminal?

  5. So überprüfen Sie, ob die aktuell ausgeführte Shell BusyBox ist

Wie der Linux-Kernel mit Interrupts umgeht

Wie man einen Linux-Kernel im 21. Jahrhundert kompiliert

So überprüfen Sie die Kernel-Version in Linux

So finden Sie heraus, welche Version des Linux-Kernels auf Ihrem PC läuft

So überprüfen Sie alle laufenden Dienste in Linux

Wie soll ich die aktuelle Netzwerkauslastung ermitteln?