/ Usr'ı yanlışlıkla yeniden adlandırdıktan sonra, onu nasıl yeniden adlandırabilirim?


62

Yanlışlıkla dizin adını /usriçine /usr_bak.

Geri değiştirmek istiyorum, bu yüzden yolunu eklemek /usr_bak/biniçin $PATHsistem komutu bulmasını sağlamak için sudo.

Ama şimdi sudo mv /usr_bak /usrbana hata veriyor:

sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory

Adlandırmak için bir yol var mı /usr_bakolarak /usrsistemini yeniden dışında mı?


2
Hangi işletim sistemi bu? sudoKütüphane aşamasına nasıl girdiğimi bile merak ediyorum , genellikle içinde /usr/bin/bulunmayan bir komut hatasıyla başarısız olmuş olmalıydı. Ayrıca, bir root şifreniz var mı?
muru

3
@muru Bu Ubuntu. Haklısınız, ben yaklaşık hatayı aldım not foundbu yüzden yeni bir yol eklenmiş önce /usr_bak/binhiç $PATHve şimdi burada ... benim sonrası hata alıyorum
Yves

2
@ user1717828 karmaşık. Ubuntu 16.04'te, Ubuntu 17.10'da geliştirilen bir proje derlemeliyim. Bu yüzden ben sadece kopyalayabilirsiniz eğer düşünüyorum /usrUbuntu 16.04 arasında üzerine yazmak /usr... Ubuntu 17.10 arasında
Yves

6
Bu kadar ciddi değişiklikler yerine projeyi derlemek için bir VM kullanmayı düşündünüz mü?
Kevin

3
Virtualbox'ı başsız modda çalıştırabilirsiniz . Başka bir makinede misafir ayarlamak veya önceden yapılandırılmış olanı almak en kolay olabilir.
Kevin

Yanıtlar:


109

Root için bir şifre belirlediğinizden , varsayılan olarak Ubuntu'da kurulu olan suve kullanın busybox. Tüm su'ler kütüphaneler içindedir gerekli /lib. Busybox, statik olarak bağlanmış bir dizi yardımcı programdır, bu nedenle eksik kütüphaneler sorun olmamalıdır. Yap:

su -c '/bin/busybox mv /usr_bak /usr'

(Busybox'ın kendisinin de bir suuygulaması olsa da, /bin/busyboxikili ayarlanmış değildir ve root olarak çalıştırılmadıkça çalışmaz.)

Kök şifreniz yoksa, Gilles’un çözümünü burada kullanarakLD_LIBRARY_PATH muhtemelen kullanabilirsiniz , veya (Gilles bunun sudo gibi setuid binaries ile çalışmayacağını söylüyor) yeniden başlatıp GRUB menüsünü init=/bin/busyboxbir çekirdek parametresi olarak önyüklemek ve taşımak için düzenleyebilir Klasörü geri al.


73
Şimdi, yanlışlıkla yeniden adlandırmayın /lib.
sleblanc

5
LD_LIBRARY_PATHsudosetuid olduğu için sudo çalıştırmak için yardımcı olmaz . Eğer kütüphaneleri doğru yerde değilse, sudo root onu tamir edene kadar çalışmaz.
Gilles 'SO- kötülük'

3
Unix eski tatlar (Linux daha çok eski olanlar) içinde statik olarak bağlanan ikili küçük bir koleksiyon dahil: tarihsel not @Yves /sbinsenaryonun tam da bu tür: "Ben yapıyorum çalışma zamanı kütüphaneleri etrafında juggled edilecek bazı etkinlikler ancak dosyaları hala değiştirmemiz gerekiyor. " Busybox öncesi temel olarak aynı yaklaşım icat edildi. (Bu şekilde kullanılabilen komutların sayısı çok sınırlıydı, çünkü statik olarak bağlanmış bu ikili dosyalar disk
alanını tıkamaktadır

8
@Yves, yeniden adlandırdıysanız /lib, muhtemelen yeniden başlatmak zorunda init=/bin/busybox
kalacaksınız

3
@ Yves: Bir USB bellek çubuğundan önyükleme yapın, dosya sistemlerinizi bağlayabilen canlı bir dağıtım ile hepiniz bir şeyi düzeltmeye hazırsınız. Bir şey sildiyseniz bile yedek dosyaları paket aynalardan indirmek.
Peter Cordes

33

Muru'nun cevabına ek olarak :

  • Sisteminizi onarmak için bazı kurtarma önyükleme USB anahtarını kullanabilirsiniz; sistem bazı Debian veya Ubuntu ise örneğin, kurtarma modunda kurulum USB anahtarını önyükleme ve uygun yapmak mountve mvve umount.

  • daha kolay bir şekilde hataları onarmak mümkün olabilmesi için, genellikle aynı zamanda çeşitli yerleşik komutları ile statik kabuk yüklemek (özellikle bazı cp, rm, mv-benzeri yerleşiklere) gibi sash(bu bir paketlenmiş Debian ve Ubuntu'da ve aynı zamanda mevcut kanat-3.8. tar.gz kaynak biçiminde) ve önyükleme ile init=/bin/sashGrub'a iletildi.

PS: sashhafif bir adamcağız ve tamamen Posix uyumlu değil, ama yine de çok faydalı.


Statik bir kabuğun birkaç yerleşik komutla nasıl yükleneceğini açıklayabilir misiniz? Manuel var mı?
Yves,

1
Debian veya Ubuntu üzerinde: apt-get install sash. Ancak sash-3.8.tar.gz dosyasını indirip derleyebilirsiniz.
Basile Starynkevitch

Böyle problemler için özel grup girişi olan hdd'de bir liveiso tutuyorum. Karmaşık
olmanıza

3

Bence en güvenli yol, bir USB, CD veya DVD önyükleme işletim sistemi (Debian, Ubuntu, Suse, vb.) Kullanarak yeniden başlatmaktır. Sonra sorunları içeren sürücüyü takın ve yeniden adlandırın.

/ Usr veya / lib ile etkin bir şekilde kayıp olan bir mayın tarlasına girmek daha güvenli.


1
Bir ISO'yu USB / DVD vb. Gerekmeden Grub / HDD'den doğrudan başlatabilirsiniz. Oldukça şık numara grubunun geri döngü özelliği vardır.
ÜcretsizYazılımServisler

0

Bazı testler için yeniden adlandırdığım /usr/binve benzer bir sorunla karşılaştım /usr/bin_bkpve daha sonra yeniden adlandıramadım (komut sudostandart dizinde bulamadı /usr/bin) ve sonra /usr/bin_bkpel ile dizine gittim (Dosya yöneticisini kullanarak) ) ve sağ tıklamadaki işlevlerin çoğu (yeniden adlandırma dahil) devre dışı bırakılmıştır.

Sonra aşağıdaki komutu denedim ve sorunu düzeltti

$/usr/bin_bkp/sudo mv /usr/bin_bkp/ /usr/bin/

Şu anki yoldan sudo'yu çağırdım ve işe yaradı, şimdi her şey normale döndü.

İşletim Sistemi: Xubuntu 14.04


-3

Şu anda bunu deneyin (ve istiyorum emin değilim), ama buna benziyor olabilir gerektiğini Kendine yeni oluşturmaya çalışmak için bir şekilde "/ usr" sabit bağlantı için (değil yumuşak bağlantı) sizin " / usr_bak, sonra "/ usr_bak" silin

ln /usr_bak /usr
rm /usr_bak

Dosya sisteminde "ln" ( "-s" argümanı olmadan) tarafından oluşturulan hard link , hem usr hem de usr_bak dizinlerini söz konusu dizinlere eşit derecede geçerli bağlantılar yapmalıdır. "rm", her ikisini de değil, kaldırmasını istediğiniz bağlantıyı kaldırır. İçeriklerle ilgili hala geçerli bir bağlantı olduğundan, "/ usr" adresindeki kalan bağlantıdan erişilebilir kalmaları gerekir.


5
Linux'un (veya en azından Ubuntu) dizinlerle bağlantı kurmasına izin vermediği izlenimi altındaydım. Örn, askubuntu.com/questions/210741/…
Chris Bouchard

4
@Chris: Sağ, Linux, dizinin sabit bağlantılarına izin vermiyor ( .ve dışında .., bu nedenle bir dizindeki bağlantı sayısı size birinci düzey alt dizinlerin sayısını gösterir). Ayrıca, rmdizinlerde çalışmaz, kullanmak zorunda kalırsınız rmdir. ( lnve rmdizinlere sembolik bağlantılar üzerinde çalışın, fakat gerçek bir dizinden bahsediyoruz). Ayrıca, bu sorunu çözmez , çünkü izinler nedeniyle rootaynen böyle olmasını gerektirirmv/ . Bunu çalıştırabilirsen, mvnormal bir insan gibi koşabilirsin .
Peter Cordes

2
Dizinlere sabit bağlantılar çoğu (tümü?) Unices'da desteklenmez, çünkü sonsuz döngüleri saptamak için tekrarlamalı bir dosya sistemi taraması yapan yazılım için çok zordur. Yazılım ziyaret edilen tüm inode'ları izlerse ve bir inode uyumlu dosya sistemini (örn. FAT32 / NTFS değil) tararsa mümkündür, ancak sembolik linkleri kontrol etmek ve onları geçmek çok daha kolaydır. Gerekli olan tek şey dosya türünü kontrol etmek için lstat (2) 'e hızlı bir çağrı yapmaktır.
penguin359,

2
@Pryftan, ln(1)Debian'daki açıklamam şöyle diyor : -d/ -F/ --directoryseçeneği: "süper kullanıcı için hard link dizinleri denemesine izin ver (not: büyük olasılıkla kullanıcı için bile sistem kısıtlamaları nedeniyle başarısız olur)" . Bu yüzden denemek için özgürsünüz, ancak dosya sisteminiz muhtemelen size izin vermiyor.
Toby Speight

1
@TobySpeight Başka bir düşünce: Ayrıca bkz: yazan bağlantı sembolüne (7): Sabit bağlantılar dizinlere atıfta bulunmayabilir (dosya sistemi ağacında döngüler olasılığını önlemek için birçok programı karıştırır) ve farklı dosya sistemlerindeki dosyalara başvurmayabilir (çünkü inode numaraları dosya sistemlerinde benzersiz değildir). Bu bana, hard link girişiminin aslında fonksiyon denilen başka bir şey ifade etmenin bir yolu olabileceğini düşündürüyor, fakat bir dizin olduğu için başarısız oluyor. (Dosya sistemi referansı başka bir yorumda düşündüğüm
şeydi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.