Saya tidak sengaja memindahkan semua folder dari root ke subfolder. ( /bin
, /etc
, /home
, /lib
, /usr
... semua pindah) Satu-satunya yang tidak dipindahkan, karena mereka digunakan, adalah /bak
, /boot
, /dev
, /proc
, /sys
.
Sekarang, perintah apa pun yang saya coba jalankan tidak akan terjadi. Saya selalu mendapatkan "Tidak ada file atau direktori".
Saya terhubung melalui ssh dan melalui ftp, tetapi saya tidak dapat memindahkan file melalui ftp, karena login SU langsung dinonaktifkan. Saya juga memiliki akses ke server yang sebenarnya jika saya perlu melakukan sesuatu langsung dari sana.
Saya berasumsi saya perlu mengedit file konfigurasi untuk mengetahui di mana menemukan /bin
folder itu dan itu akan membantu saya mendapatkan akses lagi, tapi saya tidak tahu file mana yang akan atau bagaimana melakukannya (karena saya bahkan tidak dapat berlari chmod
untuk mengubah izin).
Apakah ada jalan keluar selain menginstal ulang?
Saya sedang mengerjakan versi CentOS lama.
Saya sangat baru di dunia Linux, karenanya tindakan ini dan pertanyaannya ...
Jawaban:
Jika Anda masih memiliki shell root, Anda mungkin memiliki kesempatan untuk memperbaiki sistem Anda. Mari kita mengatakan bahwa Anda pindah semua direktori umum (
/bin
,/etc
,/lib
,/sbin
,/usr
- ini adalah orang-orang yang bisa membuat pemulihan sulit) di bawah/oops
.Anda tidak akan dapat mengeluarkan
mv
perintah secara langsung, bahkan jika Anda menentukan path lengkap/oops/bin/mv
. Itu karenamv
adalah terkait secara dinamis ; karena Anda telah memindahkan/lib
direktori,mv
tidak dapat berjalan karena tidak dapat menemukan perpustakaan yang merupakan bagian dari kodenya. Bahkan, ini lebih buruk dari itu:mv
tidak dapat menemukan loader dinamis/lib/ld-linux.so.2
(nama dapat bervariasi tergantung pada arsitektur Anda dan varian unix, dan direktori bisa nama yang berbeda seperti/lib32
atau/lib64
). Oleh karena itu, sampai Anda telah memindahkan/lib
direktori kembali, Anda perlu memanggil linker secara eksplisit, dan Anda perlu menentukan path ke perpustakaan yang dipindahkan. Inilah perintah yang diuji pada Debian squeeze i386.Anda mungkin perlu menyesuaikan ini sedikit untuk distribusi atau arsitektur lain. Misalnya, untuk CentOS pada x86_64:
Ketika Anda telah mengacaukan sesuatu
/lib
, ada baiknya memiliki kotak alat yang terhubung secara statis di sekitar Anda. Beberapa distribusi (saya tidak tahu tentang CentOS) menyediakan salinan Busybox yang terhubung secara statis . Ada juga selempang , shell mandiri dengan banyak perintah bawaan. Jika Anda memiliki salah satunya, Anda dapat melakukan pemulihan dari sana. Jika Anda belum menginstalnya sebelum fakta, sudah terlambat.Jika Anda tidak memiliki shell root lagi, tetapi Anda masih memiliki daemon SSH yang mendengarkan dan Anda dapat masuk secara langsung sebagai root over ssh, dan Anda memiliki salah satu dari kotak alat yang terhubung secara statis ini, Anda mungkin dapat melakukan ssh. Ini dapat bekerja jika Anda telah pindah
/lib
dan/bin
, tetapi tidak/etc
.Beberapa administrator membuat akun alternatif dengan shell yang terhubung secara statis, atau membuat akun root menggunakan shell yang terhubung secara statis, hanya untuk masalah seperti ini.
Jika Anda tidak memiliki shell root dan belum melakukan tindakan pencegahan, Anda harus mem-boot dari Linux live CD / USB (semua itu akan dilakukan selama masih cukup baru untuk dapat mengakses disk dan sistem file Anda) dan pindahkan file kembali.
sumber
Anda mungkin dapat memulihkan tanpa me-reboot, jadi jangan reboot sampai Anda sudah mencoba beberapa hal lain karena itu tidak akan boot. Jika sesi SSH Anda masih terbuka cobalah ini:
Dari mana program dijalankan diatur menggunakan variabel $ PATH. Anda dapat menambahkan lokasi nampan baru Anda ke jalur dengan menjalankan
export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"
. Anda mungkin perlu menambahkan direktori sbin yang sesuai juga. Anda juga dapat menjalankan program secara manual melalui jalur lengkapnya,/path/to/mv [from] [to]
misalnya harus berfungsi bahkan jika mv berada di lokasi yang berbeda. Bagian yang sulit adalah bahwa sebagian besar perintah akan ingin mengakses perpustakaan umum dan Anda mengatakan telah/lib
dipindahkan sehingga Anda perlu mengatur variabel untuk tempat itu juga.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib
Setelah Anda dapat menjalankan beberapa perintah dasar, pindahkan barang-barang itu kembali!
mv /path/to/subfolder/* /
akan beres! Setelah semuanya kembali pada tempatnya, sistem seharusnya berperilaku normal.Jika gagal, mem-boot APAPUN LiveCD dan memasang drive harus memungkinkan Anda untuk memindahkan folder kembali ke tempatnya. Anda tidak perlu menginstal ulang atau bahkan menggunakan distec livecd Anda, Anda hanya perlu memasang drive dan memindahkan folder kembali ke lokasi yang tepat pada disk. Banyak disk penyelamat berbasis linux yang khusus memberi Anda hanya beberapa alat konsol dasar untuk melakukan perbaikan semacam ini.
sumber
LD_LIBRARY_PATH
, Anda juga perlu mengaktifkan loader dinamis secara eksplisit, misalnyaLD_LIBRARY_PATH=/newpath/to/lib /newpath/to/lib/ld-linux.so.2 /newpath/to/bin/mv
.Anda harus dapat me-reboot komputer dengan CD instalasi dalam mode pengguna tunggal, me-mount sistem file root dan memindahkan file kembali ke Linux. Saya tidak tahu banyak centos, tapi itu seperti RHEL, jadi ini harus bekerja.
sumber
Terima kasih banyak untuk Gilles, 5 tahun kemudian dan posting Anda masih menyelamatkan hari saya, jika tidak seminggu.
Saya bermaksud untuk memindahkan konten dari subfolder ke folder saat ini tetapi alih-alih
mv sub/* .
, saya melakukannyamv sub /* .
, jadi saya memindahkan semuanya ke folder saat ini. Untungnya saya menemukan jawaban ini, dan dapat memperbaiki mesin saya dengan relatif mudah. Namun, saya harus menyesuaikan sedikit perintah karena saya bekerja pada mesin x86_64 yang menjalankan Ubuntu 16.04. Saya ingin meninggalkan instruksi di sini, kalau-kalau ada yang berjuang:sumber
Saya ingin menambahkan beberapa perintah untuk dilakukan setelah Anda menerapkan jawaban Ktipr untuk sistem modern (mesin x86_64 menjalankan Unix), saya tidak bisa mendapatkan direktori "dll" yang dipindahkan dengan mv karena ia menunjukkan kesalahan
jadi saya harus menggunakan
untuk memastikan bahwa saya bisa mendapatkan kembali semuanya. Jika Anda belum menginstalnya, Anda harus menginstalnya terlebih dahulu.
sumber