Ich habe an einem Verzeichnis mit dem Namen gearbeitet bin
. Nachdem ich fertig war, bin
lief ich aufgrund des Eigentums und einiger darin enthaltener Dateien versehentlich:
sudo rm -r /bin
Anstatt von:
sudo rm -r bin
Es scheint, als hätten meine Hände vor allem, /
was ich tippe, ein Zeichen eingefügt.
Wie kann ich mein /bin
Verzeichnis wiederherstellen ?
Ich möchte die gleichen Dateien, die zu meinem Ubuntu gehören. Ich möchte sie nicht von einer Live-Festplatte oder einem anderen laufenden System kopieren und einfügen.
command-line
restore
Ravexina
quelle
quelle
/bin
Ubuntu nicht nur ein Symlink zu/usr/bin
diesen Tagen? Alles was Sie tun müssen, ist den Symlink zurückzusetzen?/bin
ist kein symbolischer Link zu/usr/bin
hier, ich denke das wäre gegen dieFHS
. auch wenn wir ein triviales Paket wiecoreutils
inzesty
(hier) überprüfen . Wir können sehen, dass eine Menge Dinge/bin
neben dem installiert werden/usr/bin
, aber es kann trotzdem ein Link sein, dessen ich mir nicht bewusst bin./bin
, ich habe überlegt, was jemand anderem passieren könnte (basierend auf einer anderen Frage, auf die ich geantwortet habe). Dann schrieb ich eine Anweisung, mein Wissen zu teilen mit anderen :), obwohl ich alle Kommentare schätze, sind sie auch für andere Leute hilfreich, die kommen, um diese Frage zu lesen. Vielen Dank an alle;)Antworten:
Ist es möglich?
Nun, die meisten einfachen und wichtigen Hilfsprogramme sind in installiert
/bin
, und jetzt haben Sie den Zugriff auf alle verloren. Tatsächlich kann Ihr System nach einem Neustart nicht mehr gestartet werden.Wie auch immer, wir werden das Problem beheben und den
/bin
Inhalt so nah wie möglich an den Ort bringen, an dem er sich befand. Der einzige Unterschied wären einige symbolische Links, die wir ebenfalls reparieren werden.Wie?
Zuerst sollten wir
chroot
in Ihr kaputtes System eindringen, aber mit einem kleinen Unterschied ! Danach erhalten wir eine Liste der auf Ihrem System installierten Pakete, auf denen eine Datei im/bin
Verzeichnis installiert ist. Anschließend laden wir nur die benötigten Pakete herunter und extrahieren die erforderlichen Dateien in dieses Verzeichnis/bin
. Dann sind wir fertig.Zum Beispiel können
chroot
wir nachher eine Liste von Paketen erhalten, die Dateien installiert haben, in/bin
denen verwendet wird:Und wir können auch verwenden:
um die installierten Dateien nach diesen Paketen aufzulisten
/bin
.Dann erstellen wir einfach eine Liste aller Pakete, die für uns notwendig sind, laden sie herunter und extrahieren sie
/bin
mit etwas wie:Wir müssen jedoch ein Skript verwenden, um alle installierten Pakete auf unserem System zu überprüfen, da es nur Wahnsinn ist, dies manuell zu tun.
Also habe ich ein Skript geschrieben, das alles tut, was wir brauchen. Es findet alle für die Wiederherstellung erforderlichen Pakete
/bin
, zeigt den Namen jedes Pakets und die zugehörigen zugehörigen Dateien an/bin
. Hier ist ein Screenshot:Am Ende entscheiden wir uns, alle Pakete neu zu installieren oder nur die erforderlichen Dateien herunterzuladen und zu extrahieren
/bin
(was die empfohlene Option ist):Sie können eine Kopie dieses Skripts herunterladen oder direkt herunterladen .
Lasst uns beginnen
Chroot
Booten Sie Ihr System mit einer Live-Festplatte, die dieselbe Architektur hat wie Ihr installiertes Ubuntu, öffnen Sie ein Terminal und erhalten Sie root-Zugriff:
Hängen Sie Ihr
root
Dateisystem ein (für mich ist es/dev/sda1
):Wir benötigen eine Verbindung zum Internet, kopieren Sie also
resolv.conf
von Ubuntu live auf Ihre gemountete Root-Partition:Kopieren Sie nun das Skript irgendwo auf die gemountete Partition, zB:
oder Sie können es herunterladen mit
wget
, etc. wie:Andere notwendige Pfade einhängen:
Und hier ist der kleine Unterschied : Wie können wir
chroot
zu einem kaputten System kommen, wenn sich dort kein/bin
Verzeichnis befindet? Welche Shell sollen wir ausführen?Erstellen Sie also ein temporäres bin-Verzeichnis. zB: benannt
bintmp
in Ihrem kaputten Systemstamm:Dann binde das Leben
/bin
in das:Starten Sie das System, während Sie die
/bintmp/bash
als Login-Shell festlegen:Exportieren Sie die
/bintmp
alsPATH
Umgebungsvariable:Geben Sie dem Skript das ausführbare Bit:
Führen Sie das Skript aus:
Warten Sie, bis die Suche abgeschlossen ist, und beantworten Sie die im Screenshot angezeigte Frage. Es wird anfangen, das wiederherzustellen
/bin
und wir sind fast fertig.Verwenden Sie anschließend CTRL+ D, um die
chroot
Umgebung zu verlassen und die gemounteten Pfade zu entfernen:Starten Sie das System neu.
Wiederherstellung der Links innerhalb
/bin
Jetzt sind fast alle Dateien im
/bin
Verzeichnis zurück, mit Ausnahme von 5 symbolischen Links, die von verwaltet werdenupdate-alternatives
.Führen Sie in Ihrem laufenden System Folgendes aus:
Es stellt Ihnen einige Fragen; Sie können einfach drücken ENTER, um alle zu akzeptieren.
Und jetzt sind wir fertig.
quelle
Wenn Ihr aktuelles System noch über eine laufende Shell und einen Internetzugang verfügt, können Sie hierfür Tools verwenden, die an anderer Stelle im System vorhanden sind. Ich gehe mal davon aus, dass du nur gelöscht hast
/bin
./bin
Natürlich hat es das bequemste Dienstprogramm, das Sie in einer solchen Situation verwenden können (busybox), aber ohne das müssen wir ein wenig kreativ werden.Da Sie bereits eine laufende Shell haben und
sudo
sich in dieser befindet/usr/bin
, lassen Sie uns eine laufende Root-Shell erstellen, bevor wir weiteren Schaden anrichten. Aber/bin/bash
und die meisten anderen Muscheln sind weg! Glücklicherweise hat Linux immer noch eine speicherinterne Kopie der von Ihnen verwendeten Shell. Damit:Genau genommen brauchen wir für vieles, was folgt, keine Root-Shell. Aber wie auch immer.
Funktioniert jetzt
dpkg
immer noch, zumindest um herauszufinden, in welchen Paketen Dateien enthalten sind/bin
:Wir können verwenden ,
awk
sie zu verarbeiten und die Paketnamen erhalten, undxargs
undapt-get
die Pakete (alle in herunterladen/usr/bin
). Wenn Sie ein temporäres Verzeichnis haben, das Sie dort verwenden könnencd
, weil Ihr aktuelles Verzeichnis etwas unordentlich wird:Das größte Problem, das wir haben, ist, dass
/bin/tar
es fehlt und ohne das wirdpkg
die Archive nicht extrahieren können. Wir können zwei Drittel des Weges dorthin schaffen, weil:.deb
Dateien sind eigentlichar
Archive (wieder in/usr/bin
):Bestehend aus zwei
.tar.*
Archivendata
undcontrol
:Während die gzip-Dienstprogramme in sind
/bin
,unxz
ist in/usr/bin
:Jetzt haben wir eine
data.tar
Datei, ohne sietar
zu extrahierentar
.Python zur Rettung ! Dies ist, wo
sudo
wirklich benötigt wird:Jetzt können wir verwenden
dpkg
eine einigermaßen vollständig erhalten die verbleibenden deb - Dateien zu extrahieren/bin
:Wir sollten jedoch trotzdem eine ordnungsgemäße Installation der deb-Dateien durchführen, damit Symlinks usw., die von Paketen erstellt werden, neu erstellt werden:
Oder:
Anmerkungen:
Wir können Python 2 nicht verwenden, um die
data.tar.xz
Datei direkt zu extrahieren , da Python 2 nur die Komprimierung von gzip und bzip2 unterstützt. Python 3 unterstützt es jedoch, sodass Sie Python 3 direkt verwenden können, ohneunxz
:/bin/tar
müssen Sie noch einige der deb-Dateien extrahieren, bevor Sie sie verwenden könnenapt-get
: die Shells, Coreutils usw. Einfacher, alle zu extrahieren und später erneut zu installieren.quelle
/usr/bin
, ich sagte, was auch immer ich mit Chroot gehe ... Super./proc/$$/exe
Link zu/bin/bash
? Wie funktioniert es, wenn/bin
es entfernt wird? (Es funktioniert, aber wie), ich dachte, es sollte eine kaputte Verbindung sein ... deshalb habe ich diese Idee hinter mir gelassen.Sie können temporär Dateien von einer Live-CD oder einem anderen System in Ihr System
/bin
legen, um es nutzbar zu machen, und diese dann durch Dateien aus Ihrer Ubuntu-Installation ersetzen, indem Sieapt-get install --reinstall
Pakete ausführen, in denen sich Inhalte befinden/bin
.quelle
Einige Ergänzungen dieser ausgezeichneten Antwort , nachdem ich dieses Problem aufgetreten (zusammen mit dem Löschen
/boot
,/etc
,/lib
und/lib64
):chroot
benötigt/lib
und/lib64
anwesend sein; Andernfalls erhalten Sie die folgende Fehlermeldung:failed to run command ‘/bin/bash’: No such file or directory
Ich habe diese vom LiveCD-Betriebssystem kopiert und hatte keine Probleme beim Wiederherstellen. YMMV abhängig von den Paketen, die Sie auf dem System installiert haben
cp /etc/resolv.conf /mnt/etc/resolv.cof
sollte sein
cp /etc/resolv.conf /mnt/etc/resolv.conf
/boot
kann leicht mit Madenwerkzeugen restauriert werden. Sehen Sie hier .apt install --reinstall <package>
ist eine gute Möglichkeit , fehlende Dateien in wiederherzustellen/bin
,/lib
und/lib64
.libaio1
,mysql-server
,openvpn
,vsftpd
Hinweis für sich selbst:
rm -rf folder /*
ist nicht dasselbe wierm -rf folder/*
quelle