Ich habe versehentlich alle Ordner vom Stammverzeichnis in einen Unterordner verschoben. ( /bin
, /etc
, /home
, /lib
, /usr
... alles bewegt) die einzigen, die nicht verschoben wurden, da sie in Gebrauch waren, sind /bak
, /boot
, /dev
, /proc
, /sys
.
Nun, jeder Befehl, den ich auszuführen versuche, wird einfach nicht passieren. Ich bekomme ständig "Keine solche Datei oder Verzeichnis".
Ich bin über ssh und ftp verbunden, kann aber keine Dateien über ftp verschieben, da die direkte SU-Anmeldung deaktiviert ist. Ich habe auch Zugriff auf den eigentlichen Server, wenn ich etwas direkt von dort aus tun muss.
Ich gehe davon aus, dass ich eine Konfigurationsdatei bearbeiten müsste, um zu bestimmen, wo sich der /bin
Ordner befindet, und das würde mir helfen, wieder auf die Datei zuzugreifen kann nicht einmal ausgeführt werden chmod
, um Berechtigungen zu ändern).
Gibt es einen anderen Ausweg als die Neuinstallation?
Ich arbeite an einer alten Version von CentOS.
Ich bin extrem neu in der Welt von Linux, daher diese Aktion und die Frage ...
Antworten:
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
mv
Befehl nicht direkt ausgeben , selbst wenn Sie den vollständigen Pfad angeben/oops/bin/mv
. Das liegt daran, dassmv
es dynamisch verknüpft ist . Da Sie das/lib
Verzeichnis verschoben haben ,mv
kann 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:mv
Der 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/lib32
oder/lib64
). Daher müssen Sie, bis Sie das/lib
Verzeichnis 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.Möglicherweise müssen Sie dies für andere Distributionen oder Architekturen etwas anpassen. Zum Beispiel für CentOS unter x86_64:
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.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
/lib
und/bin
, aber nicht/etc
.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.
quelle
Sie können wahrscheinlich ohne Neustart wiederherstellen. Starten Sie also erst neu, wenn Sie einige andere Dinge ausprobiert haben, da dies nicht funktioniert. Wenn Ihre SSH-Sitzung noch geöffnet ist, versuchen Sie Folgendes:
Woher Programme ausgeführt werden, wird mit der Variablen $ PATH festgelegt. Sie können dem Pfad Ihren neuen Lagerort hinzufügen, indem Sie ausführen
export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"
. Möglicherweise müssen Sie auch die entsprechenden sbin- Verzeichnisse hinzufügen . Sie können Programme auch manuell über ihren vollständigen Pfad/path/to/mv [from] [to]
ausführen. Dies sollte beispielsweise auch dann funktionieren, wenn sich mv an einem anderen Ort befindet. Der schwierige Teil ist, dass die meisten Befehle auf allgemeine Bibliotheken zugreifen möchten und Sie sagen, dass sie/lib
verschoben wurden, sodass Sie eine Variable festlegen müssen, für die auch dies gilt.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib
Sobald Sie einige grundlegende Befehle ausführen können, verschieben Sie das Zeug zurück!
mv /path/to/subfolder/* /
wäre in ordnung! Sobald alles wieder an seinem Platz ist, sollte sich das System normal verhalten.Wenn dies fehlschlägt, sollten Sie durch Starten einer beliebigen Live-CD und Aktivieren des Laufwerks die Ordner dorthin verschieben können, wo sie hingehören. Sie müssen Ihre distros livecd weder neu installieren noch verwenden. Sie müssen lediglich das Laufwerk einbinden und die Ordner wieder an den richtigen Speicherort auf der Festplatte verschieben. Viele Linux-basierte Rettungsdisketten haben sich darauf spezialisiert, Ihnen nur ein paar grundlegende Konsolentools für diese Art der Reparatur zur Verfügung zu stellen.
quelle
LD_LIBRARY_PATH
, Sie müssen auch den Dynamic Loader explizit aufrufen, zLD_LIBRARY_PATH=/newpath/to/lib /newpath/to/lib/ld-linux.so.2 /newpath/to/bin/mv
.Sie sollten in der Lage sein, den Computer mit einer Installations-CD im Einzelbenutzermodus neu zu starten, das Root-Dateisystem bereitzustellen und die Dateien unter Linux zurück zu verschieben. Ich kenne nicht viel Centos, aber es ist wie RHEL, also sollte das funktionieren.
quelle
Vielen Dank an Gilles, 5 Jahre später und deine Beiträge haben meinen Tag gerettet, wenn nicht sogar meine Woche.
Ich wollte den Inhalt eines Unterordners in den aktuellen Ordner verschieben, aber stattdessen
mv sub/* .
habemv sub /* .
ich alles in den aktuellen Ordner verschoben. Zum Glück habe ich diese Antwort gefunden und konnte meine Maschine relativ einfach reparieren. Ich musste die Befehle jedoch leicht anpassen, da ich auf einem x86_64-Computer arbeite, auf dem Ubuntu 16.04 ausgeführt wird. Ich möchte die Anweisungen hier lassen, falls jemand Probleme hat:quelle
Ich möchte ein paar weitere Befehle hinzufügen, nachdem Sie die Antwort von Ktipr für moderne Systeme (x86_64-Computer unter Unix) angewendet haben. Ich konnte die Verzeichnisse "etc" nicht mit mv verschieben, da sie einen Fehler aufwiesen
also musste ich benutzen
um sicherzustellen, dass ich alles wieder in Ordnung bringen konnte. Wenn Sie es noch nicht installiert haben, müssen Sie es zuerst installieren.
quelle