/ bin / etc / lib64 / root / sbin dihapus atau dipindahkan oleh folder mv / * / * saat su

11

OS adalah Centos 6.5 64-bit

Saya mengunduh file tar dan ingin menguraikannya mv.

Saya tidak peduli, kemudian secara tidak sengaja (sebagai root) berlari mv folder/* /*bukannya mv folder/* .bash mengatakan itu tidak bisa menimpa beberapa file, kemudian meminta izin untuk yang lain. Saya ctrl-c'd keluar.

Saya membiarkan sesi terminal terbuka, tetapi sudah keluar su.

Sekarang saya kehilangan akses ke sebagian besar shellperintah, tidak bisa lsdirektori dan tidak bisa kembali ke su.

Server web dan layanan tampaknya masih berjalan. Saya bisa menjalankan sedikit perintah, cdadalah salah satu dari mereka dan ketika saya mencoba untuk cdke /etcatau /binitu kesalahan dengan no directory found.

EDIT Hanya melihat semua folder yang hilang dari /( bin, etc, lib64, root, sbin) punya pindah ke /vardirektori, saya mencoba /var/bin/su& mendapatkan: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

webaholik
sumber
1
Tidak bisakah kamu berlari /var/bin/sulangsung?
Darkhogg
Tolong jangan edit pertanyaan dengan solusi. Pada jaringan pertukaran tumpukan Anda lebih suka menambahkan jawaban, tinggalkan komentar di jawaban yang ada untuk meningkatkan jawaban.
Bernhard
@Darkhogg /var/bin/su: user root does not existSaya pikir kami bertekad tidak bisa dilakukan karena / etc at / var / etc
webaholik
@Bernhard mencoba untuk memperbaiki
webaholik

Jawaban:

22

Jika sistem Anda telah busyboxdiinstal, Anda dapat menggunakan ini untuk mengembalikan semuanya.

busyboxadalah biner dengan banyak utilitas standar yang dibangun di dalamnya. Hal-hal seperti mv, sh, ls, dll

Dari komentar Anda pada jawaban Pavel, sepertinya semuanya berakhir /var. Anda dapat mencoba melakukannya /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. Itu akan membuat sebagian besar sistem Anda beroperasi kembali. Ada beberapa direktori seperti /tmpyang juga ada /var/tmp, jadi Anda tidak bisa hanya memindahkannya. Semoga mereka yang mvmengeluh dan mereka ditinggal sendirian.

 

Mendapatkan shell root

Anda juga menyebutkan bahwa Anda kehilangan shell root Anda, dan itu sumemberi Anda ld-linuxkesalahan perpustakaan. Anda mungkin dapat menggunakan yang berikut ini:

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

Catatan: Setelah mencoba ini, itu tidak berhasil. Hal ini karena sumemerlukan beberapa file dalam /etc( passwd, pam.d, dan lain-lain). Jika /etcmasih utuh, ini akan memiliki peluang bagus untuk berhasil.

 

Tanpa busybox

Jika Anda tidak memiliki busybox, Anda mungkin dapat menggunakan trik ld-linux yang sama dengan 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} /

 

Dari CD live

Seperti dibahas dalam komentar, jika Anda kehilangan shell root, Anda cukup banyak terjebak. Pada dasarnya untuk memperbaikinya Anda perlu hak root. Satu-satunya cara untuk sampai ke sana adalah memiliki utilitas seperti suatau sudomeningkatkan izin Anda (keduanya tidak berfungsi pada saat ini), atau membajak program lain yang sudah berjalan sebagai root (tergantung pada apa yang berjalan, kemungkinan tidak mungkin).

Ini meninggalkan satu-satunya pilihan menjadi live CD. Setelah boot ke live CD (atau live USB, atau apa pun), cukup pasang volume root, dan pindahkan direktori yang terpengaruh keluar dari /varbelakang ke rumah aslinya di /.


Sinopsis tentang apa yang terjadi

folder/*akan diperluas ke sesuatu seperti folder/foodan folder/bar.
/*akan diperluas ke sesuatu seperti /bin /lib32 /lib64 /etc /home /root /var. Memperhatikan itu /varadalah item terakhir.
Jadi ketika shell memperluas semua gumpalan itu, itu akan menjalankan sesuatu seperti ini:

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

Seperti /varitem terakhir dalam daftar, semuanya dipindahkan ke dalamnya.


Kenapa salah /var/bin/sudengan/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Hampir semua binari di linux terhubung secara dinamis ld-linux. ld-linuxadalah perpustakaan yang bertanggung jawab untuk memuat perpustakaan lain yang dibutuhkan oleh biner. Di sistem Anda ini hidup di /lib64/ld-linux-x86-64.so.2. Sejak direktori ini dipindahkan, semua executable yang terhubung secara dinamis tidak akan berfungsi lagi.

Alasan busybox berfungsi adalah karena busybox terhubung secara statis. Itu tidak digunakan ld-linux.

Patrick
sumber
Ide bagus. CentOS biasanya memiliki busybox yang diinstal karena initramfs , sehingga mungkin bekerja dengan baik.
Pavel Šimerda
busyboxkedengarannya seperti solusi sempurna, sayangnya tidak diinstal, akankah setelah ini diperbaiki ... sementara itu, apakah ada pula untuk memperbaiki jalur untuk perintah untuk mengeksekusi /var/lib64/ld-linux-x86-64.so.2bukan /lib64/ld-linux-x86-64.so.2? Tampaknya inilah yang mematikan perintah di/var/bin
webaholik
@ Patrick: Bisakah Anda menambahkan informasi yang juga perintah OP yang dimaksudkan untuk digunakan salah? Saya kemudian dapat menghapus jawaban saya karena sekarang (hampir) berlebihan. Apakah ini cara yang tepat untuk menggunakan pertukaran stack?
Pavel Šimerda
1
Ini mencari beberapa hal di /etcmana tidak ada ( /etc/passwd, /etc/nsswitch, /etc/pam.d, dan mungkin lebih). Agar sudapat bekerja, /etcharus kembali ke lokasi asalnya. Kecuali Anda punya shell root yang bertebaran, saya pikir Anda terjebak :-(
Patrick
2
@ user1296209 Setelah Anda mendapatkan livecd, cukup pasang volume root dan pindahkan direktori itu kembali. Seharusnya itu yang Anda butuhkan untuk berlari lagi.
Patrick
10

mv folder/* ./*salah juga. Anda harus lebih berhati-hati tentang semantik dari perintah yang Anda jalankan. The mvperintah dengan lebih dari dua argumen hanya mengambil semua argumen kecuali yang terakhir dan bergerak jalan mereka ke titik ke direktori yang ditentukan dalam argumen terakhir.

Untuk memindahkan semua direktori (kecuali yang tersembunyi) dari folder ke direktori saat ini, Anda harus menggunakan:

mv folder/* .

Anda telah merusak sistem Anda yang sedang berjalan. Perintah shell dan builtin Anda terus bekerja. Anda harus mem-boot CD langsung dan memindahkan direktori kembali. Saya tidak mengetahui adanya bash bawaan untuk memindahkan / mengganti nama file yang akan memungkinkan Anda untuk memperbaiki situasi tanpa me-reboot, lihat jawaban Patrick untuk lebih jelasnya.

Pavel Šimerda
sumber
Saya tidak menyadari bahwa: Saya dapat cd ke / var / bin & / var / etc, sepertinya folder dipindahkan ke var, lagi pula saya dapat memindahkannya kembali? ... tanpa livecd?
webaholik
Saya mencoba / var / bin / su & mendapatkan: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: penerjemah ELF buruk: Tidak ada file atau direktori seperti itu
webaholik
Aha ... saya akan memperbaiki jawabannya.
Pavel Šimerda
apa yang seharusnya mvperintah saya untuk memindahkan semua file dan folder dari folder ke direktori saat ini?
webaholik
1
@ user1296209: Jika Anda mem-boot sistem langsung, Anda tentu memiliki akses root pada sistem kehidupan Anda. Sistem Anda yang sebenarnya hanyalah partisi yang dipasang tanpa arti khusus untuk sistem langsung. Satu-satunya komplikasi adalah direktori Anda /dan /varmungkin berada di partisi yang berbeda, dalam hal ini Anda harus me-mount keduanya.
celtschk
2

Saya tidak sengaja pindah / usr ke / usr_old dan semuanya pergi ke neraka. Untungnya saya tetap berada di prompt dan dapat menjalankan perintah berikut untuk mengembalikan folder usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr
Mansehr
sumber
Selamat datang di U&L, apakah itu satu-satunya perintah yang Anda ketik? Harap berikan prosedur yang lebih rinci. (khusus untuk pertanyaan lama sepuluh bulan, tidak perlu terburu-buru)
Archemar
1
Ya setelah saya mengetik perintah itu semuanya dikembalikan. Mungkin saya harus menyebutkan bahwa saya root selama semua ini.
Mansehr
1

PENTING Jika Anda berada di sini, dan telah menjalankan mvsalah, tidak dapat menjalankan shellperintah, dan folder hilang dari direktori root ( /), pertama-tama, jika Anda miliki SU, JANGAN keluar SUsampai diperbaiki, karena Anda tidak akan mendapatkannya kembali. Jika Anda terhubung dari jarak jauh, jika Anda memutuskan, Anda tidak akan bisa ssh, biarkan server sendiri, jangan reboot- sebagian besar layanan yang berjalan harus OK. Anda dapat mencoba salah satu dari banyak solusi yang disarankan oleh Patrick ... namun Anda kemungkinan akan memerlukan akses fisik jika Anda mengacau seperti saya.

Begitu di depan mesin, saya reboot. Seperti yang diharapkan, saya memang menerima panik kernel.

Saya pikir ini akan menjadi perbaikan yang cukup mudah, masukkan livecd, masuk ke mode penyelamatan HINGGA POIN INI MUDAH - maka saya harus mencoba dan memasang direktori root saya. Namun saya membutuhkan lebih dari sekedar perintah mount sederhana.

Ini karena saya, seperti banyak orang, memiliki sistem file lvm, dan ini adalah pertama kalinya saya harus berurusan dengan penyelamatan seperti ini. Saya harus mencari di web untuk melihat apa yang perlu saya lakukan. Saya telah menggabungkan informasi itu ke posting ini. Inilah proses saya untuk memperbaiki masalah saya.

1) Dimasukkan cd Centos_6.4_min

2) antarmuka GUI bertanya apa yang ingin saya lakukan, pilih Rescue

3) Penyelamatan mencoba me-mount sistem saat ini, tetapi menunjukkan saya tidak punya partisi Linux

4) Memilih untuk masuk shellketika opsi diberikan

Pada titik ini saya mencoba banyak hal untuk memasang sistem, tanpa hasil, saya cukup yakin ini semua langkah yang harus saya ambil (karena lvm):

5) Memindai volume saya,

lvmdiskscan

6) Ran lvscan, menunjukkan semua yang terdaftar sebagai "tidak aktif"

lvscan

7) memuat modul perangkat

modprobe dm-mod

8) ubah volume yang ada menjadi aktif

vgchange -ay

9) Berlari lvscanlagi, sekarang semua item terdaftar sebagai "aktif"

10) Membuat mountpoint & me-mount partisi logical

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Folder yang dipindahkan kembali (ANDA mungkin membutuhkan yang lain):

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

12)reboot

13) SUKSES!

webaholik
sumber