/ bin / etc / lib64 / root / sbin gelöscht oder vom mv-Ordner / * / * verschoben, während su

11

Betriebssystem ist Centos 6.5 64-Bit

Ich habe eine TAR-Datei heruntergeladen und wollte sie entpacken mv.

Ich habe nicht tariert, dann versehentlich (als root) mv folder/* /*statt mv folder/* .bash ausgeführt und gesagt, dass einige Dateien nicht überschrieben werden können, und dann um Erlaubnis für andere gebeten. Ich habe die Strg-Taste gedrückt.

Ich habe die Terminalsitzung offen gelassen, aber beendet su.

Jetzt habe ich den Zugriff auf die meisten shellBefehle verloren, kann lskeine Verzeichnisse mehr erstellen und kann nicht mehr darauf zurückgreifen su.

Der Webserver und die Dienste scheinen noch zu laufen. Ich kann nur sehr wenige Befehle ausführen, cdist einer von ihnen und wenn ich versuche, cdauf /etcoder /bines Fehler mit no directory found.

EDIT einfach alle Ordner bemerkt fehlt /( bin, etc, lib64, root, sbin) wurde zu bewegt /varVerzeichnis, habe ich versucht /var/bin/su& bekommen: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Webaholik
quelle
1
Kannst du nicht /var/bin/sudirekt rennen ?
Darkhogg
Bitte bearbeiten Sie die Frage nicht mit Lösungen. Im Stack Exchange-Netzwerk fügen Sie lieber eine Antwort hinzu und hinterlassen einen Kommentar zu einer vorhandenen Antwort, um eine Antwort zu verbessern.
Bernhard
@ Darkhogg /var/bin/su: user root does not existIch denke, wir haben festgestellt, dass es nicht möglich ist, weil / etc bei / var / etc ist
webaholik
@ Bernhard versuchte zu korrigieren
Webaholik

Antworten:

22

Wenn Ihr System busyboxinstalliert ist, können Sie dies verwenden, um die Dinge zurückzusetzen.

busyboxist eine Binärdatei mit vielen integrierten Standarddienstprogrammen. Dinge wie mv, sh, lsusw.

Aus Ihrem Kommentar zu Pavel's Antwort geht hervor, dass alles darin gelandet ist /var. Sie können es versuchen /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. Dadurch sollte der größte Teil Ihres Systems wieder betriebsbereit sein. Es gibt einige Verzeichnisse, /tmpdie auch als existieren /var/tmp, sodass Sie sie nicht einfach verschieben können. Hoffentlich haben sich diese mvbeschwert und wurden allein gelassen.

 

Eine Root-Shell bekommen

Sie haben auch erwähnt, dass Sie Ihre Root-Shell verloren haben und dass dies zu sueinem ld-linuxBibliotheksfehler führt. Möglicherweise können Sie Folgendes verwenden:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Hinweis: Bei diesem Versuch funktioniert es nicht. Dies liegt daran , suerfordert mehrere Dateien in /etc( passwd, pam.dund andere). Wenn dies /etcnoch intakt wäre, hätte dies gute Erfolgschancen.

 

Ohne Busybox

Wenn Sie keine Busybox zur Verfügung haben, können Sie möglicherweise denselben ld-linux-Trick verwenden wie für su:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

Von einer Live-CD

Wie in den Kommentaren erläutert, stecken Sie ziemlich fest, wenn Sie die Root-Shell verloren haben. Grundsätzlich benötigen Sie Root-Rechte, um dies zu beheben. Die einzige Möglichkeit, dorthin zu gelangen, besteht darin, ein Dienstprogramm wie Ihre Berechtigungen zu verwenden suoder zu erweitern sudo(beide sind derzeit nicht funktionsfähig) oder ein anderes Programm zu entführen, das bereits als Root ausgeführt wird (je nachdem, was ausgeführt wird, wahrscheinlich nicht möglich).

Dies lässt die einzige Option eine Live-CD. Mounten Sie nach dem Booten einer Live-CD (oder eines Live-USB-Geräts oder was auch immer) einfach das Root-Volume und verschieben Sie die betroffenen Verzeichnisse /varwieder in ihr ursprüngliches Zuhause /.


Zusammenfassung dessen, was passiert ist

folder/*hätte sich auf etwas wie folder/foound ausgeweitet folder/bar.
/*hätte sich auf so etwas ausgedehnt /bin /lib32 /lib64 /etc /home /root /var. Das /varist der letzte Punkt.
Wenn die Shell all diese Globs erweitert hätte, wäre sie ungefähr so ​​gelaufen:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

Wie /vardas letzte Element in der Liste wurde alles darin verschoben.


Warum /var/bin/suFehler mit/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Fast alle Binärdateien unter Linux sind dynamisch mit verknüpft ld-linux. ld-linuxist die Bibliothek, die für das Laden der anderen Bibliotheken verantwortlich ist, die von einer Binärdatei benötigt werden. Auf Ihrem System lebt dies bei /lib64/ld-linux-x86-64.so.2. Seit dieses Verzeichnis verschoben wurde, funktioniert jede dynamisch verknüpfte ausführbare Datei nicht mehr.

Der Grund, warum Busybox funktioniert, ist, dass Busybox statisch verknüpft ist. Es wird nicht verwendet ld-linux.

Patrick
quelle
Gute Idee. In CentOS ist aufgrund von initramfs normalerweise eine Busybox installiert , sodass dies möglicherweise gut funktioniert.
Pavel Šimerda
busyboxklingt wie die perfekte Lösung, leider nicht installiert, wird dies, nachdem dies behoben wurde ... in der Zwischenzeit gibt es sowieso den Pfad zu korrigieren, damit Befehle ausgeführt werden können, /var/lib64/ld-linux-x86-64.so.2anstatt /lib64/ld-linux-x86-64.so.2? Dies scheint das zu sein, was die Befehle in/var/bin
webaholik
@Patrick: Könnten Sie bitte die Information hinzufügen, dass auch der Befehl OP, der verwendet werden soll, falsch ist? Ich könnte dann meine Antwort löschen, da sie jetzt (fast) überflüssig ist. Ist es übrigens der richtige Weg, den Stapelaustausch zu nutzen?
Pavel Šimerda
1
Es sieht für mehrere Dinge , in /etcdenen nicht da sind ( /etc/passwd, /etc/nsswitch, /etc/pam.d, und wahrscheinlich mehr). Damit Sie suarbeiten können, /etcmüssen Sie sich wieder an Ihrem ursprünglichen Standort befinden. Es sei denn, Sie haben eine Wurzelschale herumliegen, ich denke, Sie stecken fest :-(
Patrick
2
@ user1296209 Sobald Sie eine Live-CD erstellt haben, mounten Sie einfach das Root-Volume und verschieben Sie diese Verzeichnisse zurück. Das sollte alles sein, was Sie brauchen, um wieder zum Laufen zu kommen.
Patrick
10

mv folder/* ./*ist auch falsch. Sie sollten bei der Semantik der von Ihnen ausgeführten Befehle vorsichtiger sein. Der mvBefehl mit mehr als zwei Argumenten nimmt nur alle Argumente außer dem letzten und verschiebt die Pfade, auf die sie zeigen, in das im letzten Argument angegebene Verzeichnis.

Um alle Verzeichnisse (außer versteckten) aus dem Ordner in das aktuelle Verzeichnis zu verschieben, sollten Sie Folgendes verwenden:

mv folder/* .

Sie haben Ihr laufendes System beschädigt. Ihre Shell- und integrierten Befehle funktionieren weiterhin. Sie müssen eine Live-CD starten und die Verzeichnisse zurück verschieben. Mir ist keine integrierte Bash zum Verschieben / Umbenennen von Dateien bekannt, mit der Sie die Situation ohne Neustart beheben können. Weitere Informationen finden Sie in Patricks Antwort.

Pavel Šimerda
quelle
Ich habe das nicht bemerkt: Ich kann nach / var / bin & / var / etc cd, sieht aus wie Ordner nach var verschoben wurden, trotzdem kann ich sie zurück verschieben? ... ohne livecd?
Webaholik
Ich habe versucht / var / bin / su & get: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: schlechter ELF-Interpreter: Keine solche Datei oder kein solches Verzeichnis
webaholik
Aha ... Ich werde die Antwort korrigieren.
Pavel Šimerda
Was hätte mein mvBefehl sein sollen, um alle Dateien und Ordner vom Ordner in das aktuelle Verzeichnis zu verschieben?
Webaholik
1
@ user1296209: Wenn Sie ein Live-System starten, haben Sie auf jeden Fall Root-Zugriff auf Ihr Lebenssystem. Ihr eigentliches System ist nur eine gemountete Partition ohne besondere Bedeutung für das Live-System. Die einzige Komplikation besteht darin, dass sich Ihre /und Ihre /varVerzeichnisse möglicherweise auf unterschiedlichen Partitionen befinden. In diesem Fall müssen Sie beide bereitstellen.
Celtschk
2

Ich bin versehentlich / usr nach / usr_old umgezogen und alles ist zur Hölle gegangen. Zum Glück blieb ich in der Eingabeaufforderung und konnte den folgenden Befehl ausführen, um den Ordner usr wiederherzustellen:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr
Mansehr
quelle
Willkommen bei U & L, war das der einzige Befehl, den Sie eingeben? Bitte geben Sie ein detaillierteres Verfahren an. (speziell für eine zehn Monate alte Frage, es besteht kein
Grund
1
Ja, nachdem ich diesen Befehl eingegeben habe, wurde alles wiederhergestellt. Vielleicht sollte ich erwähnen, dass ich während all dem Wurzel war.
Mansehr
1

WICHTIG Wenn Sie hier sind und mvfalsch ausgeführt wurden, keine shellBefehle ausführen können und Ordner im Stammverzeichnis ( /) fehlen , beenden Sie den SUVorgang zunächst NICHT, SUbis er behoben ist, da Sie ihn nicht zurückerhalten. Wenn Sie über eine Remoteverbindung verbunden sind und die Verbindung trennen, können Sie sshden Server nicht in Ruhe lassen. Die rebootmeisten ausgeführten Dienste sollten in Ordnung sein. Sie können eine der vielen von Patrick vorgeschlagenen Lösungen ausprobieren ... Sie benötigen jedoch wahrscheinlich physischen Zugriff, wenn Sie es wie ich vermasselt haben.

Einmal vor dem Computer habe ich ihn neu gestartet. Wie erwartet erhielt ich eine Kernel-Panik.

Ich dachte, dies wäre eine ziemlich einfache Lösung, lege eine Live-CD ein und gehe in den Rettungsmodus. BIS ZU DIESEM PUNKT WAR ES EINFACH - dann musste ich versuchen, mein Stammverzeichnis zu mounten. Ich brauchte jedoch mehr als nur einen einfachen Mount-Befehl.

Dies lag daran, dass ich, wie viele Menschen, ein lvm-Dateisystem hatte, und dies war das erste Mal, dass ich mich mit einer solchen Rettung befassen musste. Ich musste im Internet suchen, um zu sehen, was ich tun musste. Ich habe diese Informationen in diesem Beitrag zusammengefasst. Hier war mein Prozess, um mein Problem zu beheben.

1) Eingefügte Centos_6.4_min-CD

2) GUI-Oberfläche fragte, was ich tun wollte, wählte Rescue

3) Rescue hat versucht, das aktuelle System zu mounten, hat jedoch angegeben, dass ich keine Linux-Partitionen habe

4) Geben Sie ein, shellwann die Option angegeben wurde

Zu diesem Zeitpunkt habe ich viele Dinge versucht, um das System zu mounten, ohne Glück. Ich bin mir ziemlich sicher, dass dies alle Schritte sind, die ich unternehmen musste (wegen lvm):

5) Meine Bände gescannt,

lvmdiskscan

6) Ran lvscan, zeigte alle als "inaktiv" aufgeführt

lvscan

7) Gerätemodul laden

modprobe dm-mod

8) Ändern Sie die vorhandenen Volumes in aktiv

vgchange -ay

9) lvscanWieder gelaufen , jetzt alle Elemente als "aktiv" aufgeführt

10) Mountpoint erstellt und die logische Partition gemountet

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Ordner zurück verschoben (SIE benötigen möglicherweise andere):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13) ERFOLG!

Webaholik
quelle