Yanlışlıkla yeniden adlandırılmış / bin Yardım!


39

Acil bir durum var, Linux ve Bash acemi burada ve bazı dosyaları yeniden adlandırmak için bir komut dosyası yazmaya çalışırken berbat. Döngü yanlışlıkla yol (Masaüstünde bir klasörde komut ran) yükseldi ve adını /biniçin /D_bin( D_yani şimdi sistem kullanamazsınız ekledim önek oldu) /biniçeriğini, dolayısıyla bash, hayır mv, hayır adlandırmak sudo... dosyaları içinde /D_binyeniden adlandırıldı değil, Tamam ve bunları kopyalayıp yapıştırın fakat klasör oluşturamaz /binbash olmadan tekrar. Sistem kararlı görünüyor, ancak çok az şey çalışıyor ve Desktop'taki dosyalara erişemiyor.

Diğer klasörleri /de iyi /lib /sbin /etcgörünüyor ve grafik masaüstü hala orada. Yeniden başlatmadan korkuyorum çünkü önyükleme yapabilecek mi bilmiyorum.

Kök bir kabuk veya yeniden adlandırmak için bir yol var mı /D_bingeri /bin? Lütfen yardıma ihtiyacınız var

İntihar senaryom: $:

#!/bin/bash
files=~/Desktop/folder_1/*

for j in $files
do
    cd $j
    for i in 10n*  #file names starting by 10n
    do
       find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
    done
    cd ..
done

:( Teşekkürler!!!!


7
Bu tür şeyleri denemek ve öğrenmek için bir VM kullanmayı deneyebilirsiniz, bu yüzden asla fazla risk almazsınız.
M. Becerra

7
Şimdi sorunu çözmek için, işletim sistemini kurmak ve Ubuntu Try düğmesine basmak istiyormuş gibi Ubuntu ile önyüklenebilir bir USB yapabilir , oradan bir terminal açıp klasörü yeniden adlandırabilirsiniz.
M. Becerra


32
/D_bin/mv -T /D_bin /binkomut dosyalarınızı bir dahaki sefere root olarak çalıştırmayın.
Jason C

5
Btw böyle komutları yaparken genellikle önce betiği çalıştırmak yerine potansiyel olarak yıkıcı komutlar eko ettirerek ve eylemlerinin aklı başında olacağını doğrulayarak kuru bir çalışma yaparım. Ayrıca: düzenli yedeklemeler.
Jason C

Yanıtlar:


89

Bu sorunu çözmenin birkaç yolu var.

Bir kabuğa (herhangi bir açık terminal) erişiminiz varsa, çalıştırın:

sudo /D_bin/mv -T /D_bin /bin

sudoolduğu /usr/binmutlak yolu ile çalıştırmak için gerek yoktur bu yüzden.

Yapabileceğiniz başka bir şey ekleyerek, /D_binsizin için PATHbu gibi ortam değişkeni:

export PATH=$PATH:/D_bin

Herhangi bir kabuğa erişiminiz yoksa:

  1. sistemi yeniden başlat
  2. grub göründüğünde grub'u edüzenlemek için basın
  3. linux ile başlayan satırın sonuna şunu ekleyin:

    init=/D_bin/bash
  4. CTRL+ tuşlarına basınx

Şimdi bir bash kabuğuna bırakılacaksınız, dosya sistemini okunabilir ve yazılabilir olarak yeniden kurmalısınız.

/D_bin/mount -o remount,rw /

Ve D_bin dizinini kutuya taşıyın:

/D_bin/mv -T /D_bin /bin

Ardından sistemi yeniden başlatın.

İşe yaramalı, ancak sizin için hiçbir şey işe yaramazsa, sistemi hala canlı bir ubuntu disk / usb ile başlatabilir ve sorunu çözebilirsiniz.


2
İlki çözdü. Çok teşekkürler, gerçekten günümü kurtardım. Meraktan, senaryoyu izleyerek neden yeniden adlandırma / bin ulaştı? Desktop’taki tüm klasörler _ _D’ye sahipti ancak bin dışında başka herhangi bir evde ya da root'ta değil.
Carlos D. Zapata

9
@ CarlosD.Zapata: Bir betiğin içindeki bir döngüdeki dizini değiştirmeniz gerekirse, kodu bir alt öğede çalıştırmak genellikle iyi bir fikirdir. Öncesinde açık bir parantez ekleyin cd "$j"(ad çift tırnak içine alınmalıdır) ve yanlış yapma cd ..işlemini eşleşen yakın parantezle değiştirin. Ayrıca, neden root olarak koşuyordun? Bu kadar zarar vermemelisin.
Jonathan Leffler

3
CarlosD.Zapata @: En sonra cd ..koymak a pwd, senin kaldırmak findkomut komutu, daha sonra normal bir kullanıcı olarak çalıştırın. betiğin girdiğini göreceksiniz /, çünkü $ j bir cd yaparsınız ki bu dizinler değil dosyalardır. Böylece her döngüde bir adım geri gidersiniz ve sonunda varsınızdır /.
Ravexina

1
@ CarlosD.Zapata /binİçeride klasörler üzerinde çalıştığı için "durduğunu" unutmayın /bin. Bunları kontrol ederdim (root olarak olmasa da!)
wizzwizz4

17
Muhtemelen / bin'de durdu çünkü / bin yeniden adlandırılan / içindeki ilk klasördü (alfabetik olarak ilk) ve bundan sonra mvdaha fazla çalışamadı .
user253751

8

Eğer açık çalışan bir terminaliniz yoksa, bu sorunu çözmek için önce bash yerine kullanabileceğiniz bir “kabuk yerine” bulmaya çalışırım. Python içerde /usr/bin, bu yüzden hala çalışması gerekiyor.

Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call(["sudo", "/D_bin/mv", "-T", "/D_bin", "/bin"])

Bu işe yaramazsa, sadece doğrudan canlı CD / USB'den önyükleme yapın ve bilinen aklı başında çalışan bir ortamdaki her şeyi düzeltin.

Genel bir tavsiye olarak, yorumlarda Jonathan Leffler’i ikinci olarak kullanırdım cd ..: senaryolarda asla kullanmayın , bu tür sorunlara kolayca yol açabilir. $jBir deniz kabuğu içindeki dizine sadece cd daha iyi , bu şekilde geri dönüş konusunda endişelenmenize gerek yok.

#!/bin/bash
files=~/Desktop/folder_1/*

for j in $files
do
  (
    cd "$j"
    for i in 10n*  #file names starting by 10n
    do
       find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
    done
  )
done

Ayrıca, elbette, kesinlikle gerekli olmadıkça, şeyleri kök olarak çalıştırmayın.


Başka bir kabuk / terminale erişmeden python gibi etkileşimli bir kabuk çalıştırmak mümkün müdür? Geçici çözüm, kök olarak çalıştırılacak parola ile birlikte komut içeren bir komut dosyası oluşturması gerektiğini düşünüyorum. GUI sanırım kalanını yapacak.
Ravexina

@Ravexina: Her şey bir kabuğa ihtiyaç duymaz . pythonSüreci çalıştırmak için kesinlikle bir terminal uygulamasına ihtiyacınız var ve çalıştırmak os.system("sudo ...")için de sadece bir * nix çekirdeğine ihtiyacınız var. Belki daha sonra bir
VM'de deneyeceğim

Ek olarak, cdkomut dosyalarına cd -girerken, bir dizini aşağıya çevirdiğinizi varsaymak yerine, bulunduğunuz yere geri dönmek genellikle daha iyidir . İlkini değiştirirseniz cd, o cd ..zaman sizi bulunduğunuz yere geri getirmeyeceksiniz, ama cd -olacak.
Frambot

Gibi @JoeFrambach cd ..I olurdu değil kullanmak cd -sadece komut satırında, komut. cd -belki de daha az bir sorun garantisinden daha az cd .., ancak yine de güvenli sayılmazdım - eğer biri ortadaki dizin değişikliklerini eklerse, sizi istenmeyen bir yere götürür. Oysa alt kabuklar , dizinin değiştiği ve hangi noktaya geri döndüğünüz konusunda size açıkça ayrılmış bir kapsam sağlar.
leftaroundabout

@Ravexina Yeni denedim: Python gerçekten başlatılabilir. Onun os.systemyok değil olmadan işe shmevcut, fakat subprocess.callişler.
leftaroundabout
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.