Saya sedang mengerjakan direktori bernama bin
. Setelah saya selesai, karena kepemilikan bin
dan beberapa file di dalamnya saya tidak sengaja berlari:
sudo rm -r /bin
Dari pada:
sudo rm -r bin
Sepertinya tangan saya digunakan untuk menambahkan /
di depan semua yang saya ketik.
Bagaimana saya bisa mengembalikan /bin
direktori saya ?
Saya ingin file yang sama milik Ubuntu saya, saya tidak suka menyalin dan menempelkannya dari live disk atau sistem lain yang sedang berjalan.
command-line
restore
Ravexina
sumber
sumber
/bin
di Ubuntu hanya symlink untuk/usr/bin
hari ini? Jadi yang perlu Anda lakukan adalah mengembalikan symlink?/bin
bukan tautan simbolis ke/usr/bin
sini, saya pikir itu akan bertentangan denganFHS
. juga jika kita memeriksa paket sepele seperticoreutils
dizesty
(sini) . kita bisa melihat banyak hal yang akan diinstal di/bin
sampingnya/usr/bin
, tapi tetap saja itu bisa berupa tautan, saya tidak menyadarinya./bin
, saya menganggap sesuatu yang dapat terjadi pada orang lain (Berdasarkan pertanyaan lain yang saya jawab), Kemudian saya menulis instruksi untuk membagikan pengetahuan saya dengan yang lain :), walaupun saya menghargai semua komentar, mereka juga membantu orang lain yang datang untuk membaca pertanyaan ini. Terima kasih semua;)Jawaban:
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
/bin
isinya sedekat mungkin dengan tempatnya. Satu-satunya perbedaan adalah beberapa tautan simbolis yang akan kami perbaiki juga.Bagaimana?
Pertama, kita harus
chroot
masuk 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/bin
direktori, 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/bin
menggunakan:Dan kita juga bisa menggunakan:
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
/bin
dengan sesuatu seperti: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:
Pasang
root
sistem file Anda (bagi saya itu/dev/sda1
):Kami akan membutuhkan konektivitas ke Internet, jadi salin
resolv.conf
dari Ubuntu langsung ke partisi root yang Anda pasang:Sekarang salin skrip ke suatu tempat di partisi yang terpasang, misalnya:
atau Anda dapat mengunduhnya menggunakan
wget
, dll. seperti:Pasang jalur lain yang diperlukan:
Dan inilah perbedaan kecilnya : bagaimana kita
chroot
menuju sistem yang rusak ketika tidak ada/bin
direktori di sana? Cangkang mana yang harus kita jalankan?Jadi buat direktori bin sementara. misalnya: dinamai
bintmp
dalam root sistem Anda yang rusak:Kemudian ikat langsung
/bin
ke dalamnya:Chroot masuk ke sistem sambil mengatur
/bintmp/bash
shell login Anda:Ekspor
/bintmp
sebagaiPATH
variabel lingkungan Anda :Berikan script bit yang dapat dieksekusi:
Jalankan skrip:
Tunggu pencarian selesai kemudian jawab pertanyaan yang kami lihat di tangkapan layar. Ini akan mulai mengembalikan
/bin
dan kita hampir selesai.Setelah selesai, gunakan CTRL+ Duntuk keluar dari
chroot
lingkungan dan lepaskan jalur yang dipasang:Mulai ulang sistem.
Memulihkan tautan di dalamnya
/bin
Sekarang hampir semua file dalam
/bin
direktori sudah kembali, kecuali sekitar 5 tautan simbolik yang dikelola olehupdate-alternatives
.Di sistem Anda yang sedang berjalan, jalankan:
Ini menanyakan beberapa pertanyaan; Anda cukup menekan ENTERuntuk menerima semuanya.
Dan sekarang kita selesai.
sumber
Jika sistem Anda saat ini masih memiliki cangkang berjalan dan akses internet, ini dapat dilakukan dengan menggunakan alat yang ada di tempat lain pada sistem. Saya berasumsi Anda hanya dihapus
/bin
./bin
tentu saja memiliki utilitas paling nyaman yang dapat Anda gunakan dalam situasi seperti itu (busybox), tetapi tanpa itu, kita harus sedikit kreatif.Karena Anda sudah memiliki shell yang sedang berjalan, dan karena
sudo
sudah dalam/usr/bin
, mari kita ambil shell root yang sedang berjalan sebelum kita melakukan kerusakan lebih lanjut. Tetapi/bin/bash
kebanyakan kerang lainnya hilang! Untungnya, Linux masih memiliki salinan dalam memori dari shell yang Anda gunakan. Begitu:Sebenarnya kita tidak perlu shell root untuk banyak hal berikut. Tapi bagaimanapun juga.
Sekarang,
dpkg
masih berfungsi, setidaknya untuk menemukan paket mana yang memiliki file di/bin
:Kita dapat menggunakannya
awk
untuk memprosesnya dan mendapatkan nama-nama paket,xargs
danapt-get
untuk mengunduh paket-paket (semuanya masuk/usr/bin
). Jika Anda memiliki direktori sementara yang dapat Anda gunakan, dicd
sana, karena direktori Anda saat ini akan sedikit berantakan:Sekarang, masalah terbesar yang kita miliki adalah yang
/bin/tar
hilang, dan tanpanya,dpkg
tidak dapat mengekstrak arsip. Kita bisa mendapatkan dua pertiga perjalanan ke sana, karena:.deb
file sebenarnyaar
arsip (lagi dalam/usr/bin
):Terdiri dari dua
.tar.*
arsip,data
dancontrol
:Sementara utilitas gzip ada di
/bin
,unxz
ada di/usr/bin
:Sekarang kita punya
data.tar
file tanpatar
mengekstraknyatar
.Python untuk menyelamatkan ! Di sinilah
sudo
sangat dibutuhkan:Sekarang kita dapat menggunakan
dpkg
untuk mengekstrak file deb yang tersisa untuk mendapatkan yang cukup lengkap/bin
:Namun, kita masih harus melakukan instalasi yang tepat dari file deb, sehingga symlinks dll. Yang akan dibuat oleh paket dibuat kembali:
Atau:
Catatan:
Kami tidak dapat menggunakan Python 2 untuk mengekstrak
data.tar.xz
file secara langsung , karena Python 2 hanya mendukung kompresi gzip dan bzip2. Python 3, bagaimanapun, mendukungnya, sehingga Anda dapat menggunakan Python 3 secara langsung tanpaunxz
:/bin/tar
, Anda masih perlu mengekstrak beberapa file deb sebelum dapat digunakanapt-get
: shell, coreutils, dll. Lebih mudah untuk mengekstrak semuanya dan menginstal ulang nanti.sumber
/usr/bin
, saya mengatakan apa pun yang saya lakukan dengan chroot ... Keren./proc/$$/exe
tautannya/bin/bash
? bagaimana cara kerjanya saat/bin
dihapus? (Ini berhasil, tapi bagaimana), saya pikir itu harus menjadi tautan yang rusak ... itu sebabnya saya meninggalkan Ide ini di belakang.Anda dapat menempatkan sementara file dari live CD atau sistem lain ke dalam Anda
/bin
untuk membuat sistem Anda dapat digunakan, kemudian menggantinya dengan file dari instalasi Ubuntu Anda dengan menjalankanapt-get install --reinstall
untuk paket-paket yang berisi barang-barang/bin
.sumber
Beberapa penambahan jawaban ini sangat baik , setelah saya mengalami masalah ini (bersama dengan menghapus
/boot
,/etc
,/lib
dan/lib64
):chroot
membutuhkan/lib
dan/lib64
hadir; jika tidak, Anda akan mendapatkan kesalahan berikut:failed to run command ‘/bin/bash’: No such file or directory
Saya menyalinnya dari LiveCD OS dan tidak mengalami masalah memulihkan. YMMV tergantung pada paket yang telah Anda instal pada sistem
cp /etc/resolv.conf /mnt/etc/resolv.cof
seharusnya
cp /etc/resolv.conf /mnt/etc/resolv.conf
/boot
dapat dengan mudah dipulihkan menggunakan alat grub. Lihat di sini .apt install --reinstall <package>
adalah cara terbaik untuk mengembalikan file yang hilang/bin
,/lib
dan/lib64
.libaio1
,mysql-server
,openvpn
,vsftpd
Catatan untuk diri sendiri:
rm -rf folder /*
tidak sama denganrm -rf folder/*
sumber