Saya tidak sengaja mengganti nama direktori /usr
menjadi /usr_bak
.
Saya ingin mengubahnya kembali, jadi saya menambahkan path /usr_bak/bin
untuk $PATH
untuk memungkinkan sistem untuk menemukan perintah sudo
.
Tapi sekarang sudo mv /usr_bak /usr
beri saya kesalahan:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
Apakah ada cara untuk mengubah nama /usr_bak
sebagai /usr
selain menginstal ulang sistem?
sudo
bahkan sampai ke tahap perpustakaan, biasanya dalam/usr/bin/
dan seharusnya gagal dengan kesalahan perintah-tidak-ditemukan. Juga, apakah Anda memiliki set kata sandi root?not found
sebelumnya, jadi saya menambahkan jalur baru/usr_bak/bin
ke$PATH
dan sekarang saya mendapatkan kesalahan dalam posting saya di sini .../usr
Ubuntu 16.04 untuk menimpa/usr
Ubuntu 17.10 ...Jawaban:
Karena Anda telah menetapkan kata sandi untuk root, gunakan
su
danbusybox
, instal secara default di Ubuntu. Semuasu
perpustakaan yang diperlukan ada di/lib
. Busybox adalah kumpulan utilitas yang terhubung secara statis, sehingga perpustakaan yang hilang seharusnya tidak menjadi masalah. Melakukan:(Sementara Busybox sendiri juga memiliki
su
applet,/bin/busybox
binernya tidak setuid dan tidak berfungsi kecuali dijalankan sebagai root.)Jika Anda tidak memiliki kata sandi root,
Anda mungkin bisa menggunakan solusi Gilles di sini menggunakan(Gilles mengatakan ini tidak akan bekerja dengan setuid binari seperti sudo) reboot dan edit menu GRUB untuk boot denganLD_LIBRARY_PATH
, atauinit=/bin/busybox
sebagai parameter kernel dan pindah folder kembali.sumber
/lib
.LD_LIBRARY_PATH
tidak akan membantu menjalankan sudo karenasudo
setuid. Jika perpustakaannya tidak di tempat yang tepat, sudo tidak akan berfungsi sampai root memperbaikinya./sbin
untuk skenario seperti itu: "Saya melakukan beberapa kegiatan di mana perpustakaan runtime akan disulap sekitar tetapi perlu masih memanipulasi file. " Pada dasarnya pendekatan yang sama sebelum Busybox ditemukan. (Jumlah perintah yang tersedia dengan cara ini sangat terbatas, karena binari yang terhubung secara statis melahap ruang disk.)/lib
, maka Anda mungkin harus reboot keinit=/bin/busybox
Selain jawaban muru :
Anda bisa menggunakan kunci USB boot penyelamatan untuk memperbaiki sistem Anda; mis. jika sistem Anda adalah Debian atau Ubuntu, boot kunci USB instalasi dalam mode penyelamatan, dan lakukan yang sesuai
mount
danmv
danumount
.untuk dapat memperbaiki lebih mudah kesalahan tersebut, saya biasanya juga memasang shell statis dengan beberapa perintah builtin (terutama dengan beberapa
cp
,rm
,mv
builtin -seperti) sepertisash
(itu dikemas dalam Debian & Ubuntu, dan juga tersedia sebagai sabuk-3.8. tar.gz dalam bentuk sumber) dan boot denganinit=/bin/sash
diteruskan ke Grub.PS:
sash
sedikit buggy, dan tidak sepenuhnya memenuhi persyaratan Posix, tapi masih sangat berguna.sumber
apt-get install sash
. Tetapi Anda juga bisa mengunduh sash-3.8.tar.gz dan mengompilasinya.Saya pikir cara terbaik yang paling aman adalah reboot menggunakan USB, CD atau DVD booted OS (Debian, Ubuntu, Suse, dll). Kemudian pasang drive yang berisi masalah dan lakukan penggantian nama.
Lebih aman daripada mem-boot ke ladang ranjau dengan / usr atau / lib secara efektif hilang.
sumber
Saya mengalami masalah yang sama di mana saya berganti nama
/usr/bin
menjadi/usr/bin_bkp
untuk beberapa tes dan kemudian saya tidak dapat mengubah nama (karena perintah tidak menemukansudo
dalam direktori standar yang ada/usr/bin
) dan kemudian saya pergi ke/usr/bin_bkp
direktori secara manual (menggunakan File manager ) dan sebagian besar fungsi (termasuk mengganti nama) pada klik kanan dinonaktifkan.Kemudian saya mencoba perintah berikut dan itu memperbaiki masalah
Saya memohon sudo dari jalur saat ini dan itu berhasil, sekarang semuanya kembali normal.
OS: Xubuntu 14.04
sumber
Saya tidak dapat mencoba ini sekarang (dan saya tidak yakin saya mau), tetapi sepertinya itu harus bekerja untuk membuat diri Anda sendiri "/ usr" sebagai tautan keras (bukan tautan lunak) ke Anda " / usr_bak, lalu hapus "/ usr_bak"
Tautan keras yang dibuat oleh "ln" ( tanpa argumen "-s") dalam sistem file harus membuat direktori usr dan usr_bak sama-sama tautan yang sah ke direktori yang dimaksud. "rm" hanya menghapus satu tautan yang Anda minta untuk dihapus, bukan keduanya. Karena masih ada tautan yang valid ke konten, mereka harus tetap dapat diakses melalui tautan yang tersisa di "/ usr".
sumber
.
dan..
, jadi penghitungan tautan pada direktori memberi tahu Anda jumlah subdirektori tingkat pertama). Juga,rm
tidak berfungsi pada direktori, Anda harus menggunakannyarmdir
. (ln
danrm
bekerja pada symlink ke direktori, tetapi kita berbicara tentang direktori yang sebenarnya). Juga, ini tidak menyelesaikan masalah, karenaroot
hanya membutuhkan sepertimv
, karena izin menyala/
. Jika Anda bisa menjalankan ini, Anda bisa berlarimv
seperti orang normal.ln(1)
di Debian mengatakan ini untuk opsi-d
/-F
/--directory
: "izinkan superuser untuk mencoba direktori hard link (catatan: mungkin akan gagal karena pembatasan sistem, bahkan untuk superuser)" . Jadi Anda bebas untuk mencoba, tetapi sistem file Anda mungkin tidak akan membiarkan Anda.