Apa itu mungkin?
Nah, sebagian besar utilitas yang sepele dan penting diinstal /bin, dan sekarang Anda kehilangan akses ke semuanya. Faktanya, jika Anda reboot, sistem Anda tidak akan bisa boot-up lagi.
Bagaimanapun, kami akan memperbaiki masalah ini dan membuat /binisinya sedekat mungkin dengan tempatnya. Satu-satunya perbedaan adalah beberapa tautan simbolis yang akan kami perbaiki juga.
Bagaimana?
Pertama, kita harus chrootmasuk ke sistem rusak Anda, tetapi dengan perbedaan kecil ! Setelah itu kami akan mendapatkan daftar paket yang diinstal pada sistem Anda yang memiliki file yang diinstal dalam /bindirektori, maka kami hanya akan mengunduh paket yang diperlukan dan mengekstrak file yang diperlukan ke dalam /bin. Lalu kita akan selesai.
Sebagai contoh, setelah itu chroot, kita bisa mendapatkan daftar paket yang telah menginstal file /binmenggunakan:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
Dan kita juga bisa menggunakan:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
untuk mendaftarkan file yang diinstal oleh paket ini di /bin.
Kemudian kita cukup membuat daftar semua paket yang diperlukan untuk kita, lalu mengunduhnya dan mengekstraknya /bindengan sesuatu seperti:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
Namun kita harus menggunakan skrip untuk memeriksa semua paket yang terinstal di sistem kita, karena melakukannya secara manual hanyalah kegilaan.
Jadi saya menulis naskah yang melakukan semua yang kita butuhkan. Ia menemukan semua paket yang diperlukan untuk kami pulihkan /bin, menunjukkan kepada kami nama setiap paket dan file terkait miliknya /bin. Ini screenshotnya:

Pada akhirnya kami memilih untuk menginstal ulang semua paket atau hanya mengunduh dan mengekstrak file yang diperlukan /bin(yang merupakan opsi yang disarankan):

Anda dapat mengambil salinan skrip ini atau mengunduhnya secara langsung .
Ayo mulai
chroot
Boot sistem Anda dengan live disk yang arsitekturnya sama dengan Ubuntu yang Anda instal, buka terminal dan dapatkan akses root:
sudo -i
Pasang rootsistem file Anda (bagi saya itu /dev/sda1):
mount /dev/sda1 /mnt
Kami akan membutuhkan konektivitas ke Internet, jadi salin resolv.confdari Ubuntu langsung ke partisi root yang Anda pasang:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Sekarang salin skrip ke suatu tempat di partisi yang terpasang, misalnya:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
atau Anda dapat mengunduhnya menggunakan wget, dll. seperti:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Pasang jalur lain yang diperlukan:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Dan inilah perbedaan kecilnya : bagaimana kita chrootmenuju sistem yang rusak ketika tidak ada /bindirektori di sana? Cangkang mana yang harus kita jalankan?
Jadi buat direktori bin sementara. misalnya: dinamai bintmpdalam root sistem Anda yang rusak:
mkdir /mnt/bintmp
Kemudian ikat langsung /binke dalamnya:
mount --bind /bin /mnt/bintmp
Chroot masuk ke sistem sambil mengatur /bintmp/bashshell login Anda:
chroot /mnt /bintmp/bash
Ekspor /bintmpsebagai PATHvariabel lingkungan Anda :
export PATH=/bintmp:$PATH
Berikan script bit yang dapat dieksekusi:
chmod +x restore-bin.sh
Jalankan skrip:
./restore-bin.sh
Tunggu pencarian selesai kemudian jawab pertanyaan yang kami lihat di tangkapan layar. Ini akan mulai mengembalikan /bindan kita hampir selesai.
Setelah selesai, gunakan CTRL+ Duntuk keluar dari chrootlingkungan dan lepaskan jalur yang dipasang:
umount -R /mnt
Mulai ulang sistem.
Memulihkan tautan di dalamnya /bin
Sekarang hampir semua file dalam /bindirektori sudah kembali, kecuali sekitar 5 tautan simbolik yang dikelola oleh update-alternatives.
Di sistem Anda yang sedang berjalan, jalankan:
sudo update-alternatives --all
Ini menanyakan beberapa pertanyaan; Anda cukup menekan ENTERuntuk menerima semuanya.
Dan sekarang kita selesai.
/bindi Ubuntu hanya symlink untuk/usr/binhari ini? Jadi yang perlu Anda lakukan adalah mengembalikan symlink?