it-swarm.com.de

Versehentlich umbenannt / bin Hilfe!

Ich habe hier einen Notfall-, Linux- und Bash-Anfänger und habe es versaut, ein Skript zu schreiben, um einige Dateien umzubenennen. Die Schleife ist versehentlich den Pfad entlanggegangen (hat das Skript in einem Ordner in Desktop ausgeführt) und in /bin in /D_bin umbenannt (D_ war das von mir hinzugefügte Präfix), sodass das System jetzt keine /bin -Inhalte mehr verwenden kann, also nein bash, nein mv umzubenennen, nein Sudo... Die Dateien in /D_bin sind in Ordnung, werden nicht umbenannt und können kopiert und eingefügt werden, aber der Ordner /bin kann ohne Bash nicht erneut erstellt werden. Das System sieht stabil aus, aber nur sehr wenige Dinge funktionieren und haben keinen Zugriff auf Dateien in Desktop.

Die anderen Ordner von / wie /lib/sbin/etc scheinen ebenfalls in Ordnung zu sein, und der grafische Desktop ist noch vorhanden. Ich habe Angst vor einem Neustart, weil ich nicht weiß, ob es booten kann.

Gibt es eine Shell im Stammverzeichnis oder eine Möglichkeit, /D_bin wieder in /bin umzubenennen? Brauchen Sie Hilfe, bitte, sehr wichtige Arbeit gefährdet

Mein Selbstmord-Drehbuch:

#!/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

:( Vielen Dank!!!!

39

Es gibt verschiedene Möglichkeiten, dieses Problem zu beheben.

Wenn Sie Zugriff auf eine Shell (ein beliebiges offenes Terminal) haben, führen Sie Folgendes aus:

Sudo /D_bin/mv -T /D_bin /bin

Sudo ist in /usr/bin, daher muss es nicht mit absolutem Pfad ausgeführt werden.

Das andere, was Sie tun können, ist, die Umgebungsvariable /D_bin wie folgt zu Ihrer Umgebungsvariablen PATH hinzuzufügen:

export PATH=$PATH:/D_bin

Wenn Sie keinen Zugriff auf eine Shell haben:

  1. starten Sie das System neu
  2. wenn grub erscheint drücke e um die Made zu bearbeiten
  3. fügen Sie am Ende der Zeile, die mit linux beginnt, Folgendes hinzu:

    init=/D_bin/bash
    
  4. drücken Sie CTRL+x

Jetzt werden Sie in eine Bash-Shell versetzt, und Sie sollten das Dateisystem als lesbar und beschreibbar neu einbinden.

/D_bin/mount -o remount,rw /

Verschieben Sie das Verzeichnis D_bin in den Ordner bin:

/D_bin/mv -T /D_bin /bin

Starten Sie dann das System neu.

Es sollte funktionieren, aber wenn nichts für Sie funktioniert hat, können Sie das System trotzdem mit einer Live-Ubuntu-Festplatte/USB booten und das Problem beheben.

89
Ravexina

Um dieses Problem zu beheben, wenn Sie kein laufendes Terminal geöffnet haben, würde ich zuerst versuchen, einen "Shell-Ersatz" zu finden, den Sie anstelle von bash verwenden können. Python ist in /usr/bin, das sollte also noch funktionieren.

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"])

Wenn das nicht funktioniert, boote ich direkt von einer Live-CD/USB und behebe alles in einer bekannten, vernünftigen Umgebung.

Generell würde ich Jonathan Leffler in den Kommentaren empfehlen: Verwenden Sie niemals cd .. in Skripten, da dies leicht zu solchen Problemen führen kann. Besser nur eine CD in das Verzeichnis $j innerhalb einer Subshell, auf diese Weise müssen Sie sich keine Sorgen mehr machen, dass Sie zurückkehren.

#!/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

Natürlich sollten Sie auch keine Sachen als root ausführen, es sei denn, dies ist absolut notwendig.

8
leftaroundabout