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