Wenn Sie noch eine Root-Shell haben, haben Sie möglicherweise die Möglichkeit, Ihr System zu reparieren. Lassen Sie uns sagen , dass Sie alle gemeinsame Verzeichnisse verschoben ( /bin, /etc, /lib, /sbin, /usr- das sind diejenigen , die Erholung erschweren könnte) unter /oops.
Sie können den mvBefehl nicht direkt ausgeben , selbst wenn Sie den vollständigen Pfad angeben /oops/bin/mv. Das liegt daran, dass mves dynamisch verknüpft ist . Da Sie das /libVerzeichnis verschoben haben , mvkann es nicht ausgeführt werden, da die Bibliotheken, die Teil des Codes sind, nicht gefunden werden können. Tatsächlich ist es sogar noch schlimmer: mvDer dynamische Loader kann nicht gefunden werden /lib/ld-linux.so.2(der Name kann je nach Architektur und Unix-Variante variieren, und das Verzeichnis kann ein anderer Name sein wie /lib32oder /lib64). Daher müssen Sie, bis Sie das /libVerzeichnis zurück verschoben haben , den Linker explizit aufrufen und den Pfad zu den verschobenen Bibliotheken angeben. Hier ist der Befehl, der auf Debian Squeeze i386 getestet wurde.
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
Möglicherweise müssen Sie dies für andere Distributionen oder Architekturen etwas anpassen. Zum Beispiel für CentOS unter x86_64:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
Wenn Sie etwas vermasselt haben /lib, ist es hilfreich, einen statisch verknüpften Werkzeugkasten herumliegen zu lassen. Einige Distributionen (ich kenne CentOS nicht) bieten eine statisch verknüpfte Kopie von Busybox . Es gibt auch Sash , eine eigenständige Shell mit vielen eingebauten Befehlen. Wenn Sie eine davon haben, können Sie von dort aus Ihre Wiederherstellung durchführen. Wenn Sie sie noch nicht installiert haben, ist es zu spät.
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
Wenn Sie keine Root-Shell mehr haben, aber immer noch einen SSH-Daemon haben, der überwacht, und Sie sich direkt als Root über ssh anmelden können und über eine dieser statisch verknüpften Toolboxen verfügen, können Sie möglicherweise ssh ausführen kann funktionieren, wenn Sie umgezogen sind /libund /bin, aber nicht /etc.
ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
Einige Administratoren richten für diese Art von Problemen ein alternatives Konto mit einer statisch verknüpften Shell ein oder lassen das Root-Konto eine statisch verknüpfte Shell verwenden.
Wenn Sie keine Root-Shell haben und keine Vorkehrungen getroffen haben, müssen Sie von einer Linux-Live-CD / USB-Festplatte booten (jede muss neu genug sein, um auf Ihre Festplatten und Dateisysteme zugreifen zu können) und Verschieben Sie die Dateien zurück.