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 /binInhalt 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 chrootin 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 /binVerzeichnis 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 chrootwir nachher eine Liste von Paketen erhalten, die Dateien installiert haben, in /bindenen verwendet wird:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
Und wir können auch verwenden:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
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 /binmit etwas wie:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
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:
sudo -i
Hängen Sie Ihr rootDateisystem ein (für mich ist es /dev/sda1):
mount /dev/sda1 /mnt
Wir benötigen eine Verbindung zum Internet, kopieren Sie also resolv.confvon Ubuntu live auf Ihre gemountete Root-Partition:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Kopieren Sie nun das Skript irgendwo auf die gemountete Partition, zB:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
oder Sie können es herunterladen mit wget, etc. wie:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Andere notwendige Pfade einhängen:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Und hier ist der kleine Unterschied : Wie können wir chrootzu einem kaputten System kommen, wenn sich dort kein /binVerzeichnis befindet? Welche Shell sollen wir ausführen?
Erstellen Sie also ein temporäres bin-Verzeichnis. zB: benannt bintmpin Ihrem kaputten Systemstamm:
mkdir /mnt/bintmp
Dann binde das Leben /binin das:
mount --bind /bin /mnt/bintmp
Starten Sie das System, während Sie die /bintmp/bashals Login-Shell festlegen:
chroot /mnt /bintmp/bash
Exportieren Sie die /bintmpals PATHUmgebungsvariable:
export PATH=/bintmp:$PATH
Geben Sie dem Skript das ausführbare Bit:
chmod +x restore-bin.sh
Führen Sie das Skript aus:
./restore-bin.sh
Warten Sie, bis die Suche abgeschlossen ist, und beantworten Sie die im Screenshot angezeigte Frage. Es wird anfangen, das wiederherzustellen /binund wir sind fast fertig.
Verwenden Sie anschließend CTRL+ D, um die chrootUmgebung zu verlassen und die gemounteten Pfade zu entfernen:
umount -R /mnt
Starten Sie das System neu.
Wiederherstellung der Links innerhalb /bin
Jetzt sind fast alle Dateien im /binVerzeichnis zurück, mit Ausnahme von 5 symbolischen Links, die von verwaltet werden update-alternatives.
Führen Sie in Ihrem laufenden System Folgendes aus:
sudo update-alternatives --all
Es stellt Ihnen einige Fragen; Sie können einfach drücken ENTER, um alle zu akzeptieren.
Und jetzt sind wir fertig.
/binUbuntu nicht nur ein Symlink zu/usr/bindiesen Tagen? Alles was Sie tun müssen, ist den Symlink zurückzusetzen?