Ich habe hier einen Notfall-, Linux- und Bash-Anfänger und habe es versaut, ein Skript zu schreiben, um einige Dateien umzubenennen. Die Schleife aus Versehen den Pfad stieg (lief das Skript in einem Ordner in der Desktop) und umbenannt /bin
zu /D_bin
( D_
war das Präfix ich hinzugefügt) so jetzt das System nicht verwenden kann /bin
Inhalte, also keine bash
, keine mv
umbenennen, nein sudo
... Die Dateien in /D_bin
sind ok, nicht umbenannt und können kopiert und eingefügt werden, aber /bin
ohne bash kann kein neuer Ordner 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 /
like /lib
/sbin
/etc
scheinen auch in Ordnung zu sein, und der grafische Desktop ist immer noch da. Ich habe Angst vor einem Neustart, weil ich nicht weiß, ob es booten kann.
Gibt es eine Schale in root oder eine Art und Weise zu benennen , /D_bin
um wieder /bin
? 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!!!!
quelle
/D_bin/mv -T /D_bin /bin
und führen Sie Ihre Skripte das nächste Mal nicht als root aus.Antworten:
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
ist in/usr/bin
so gibt es keine Notwendigkeit, es mit absoluten Pfad auszuführen.Die andere Sache , die Sie tun können , ist, das Hinzufügen der
/D_bin
zu IhrerPATH
Umgebungsvariable wie folgt aus :Wenn Sie keinen Zugriff auf eine Shell haben:
Fügen Sie am Ende der Zeile, die mit linux beginnt, Folgendes hinzu:
drücken Sie CTRL+x
Jetzt werden Sie in eine Bash-Shell versetzt, und Sie sollten das Dateisystem als lesbar und beschreibbar neu einbinden.
Verschieben Sie das Verzeichnis D_bin in den Ordner 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.
quelle
cd "$j"
(der Name sollte in doppelten Anführungszeichen stehen) und ersetzen Sie die Unfugstörungcd ..
durch die passende enge Klammer. Und warum bist du als root gelaufen? Sie sollten nicht in der Lage sein, so viel Schaden anzurichten.cd ..
einespwd
denfind
Befehl aus dem Skript und führen Sie ihn als normalen Benutzer aus. Sie werden sehen, dass das Skript ausgeführt wird/
, weil Sie eine CD mit dem Namen $ j erstellen, bei der es sich vermutlich um Dateien und nicht um Verzeichnisse handelt. in jeder schleife gehst du also einen schritt zurück und bist endlich drin/
./bin
weil es in Ordnern gearbeitet hat/bin
. Ich würde diese überprüfen (wenn auch nicht als root!)mv
mehr ausgeführt werden.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 drin
/usr/bin
, damit sollte das noch funktionieren.Wenn das nicht funktioniert, boote ich einfach direkt von einer Live-CD / USB und behebe alles in einer bekannten, vernünftigen Betriebsumgebung.
Generell würde ich Jonathan Leffler in den Kommentaren empfehlen: Niemals
cd ..
in Skripten verwenden, da dies leicht zu solchen Problemen führen kann. Besser nur in das$j
Verzeichnis innerhalb einer Subshell cd , auf diese Weise müssen Sie sich keine Sorgen um die Rückkehr machen.Natürlich sollten Sie auch keine Sachen als root ausführen, es sei denn, dies ist absolut notwendig.
quelle
python
Prozess ausführen, benötigen Sie nur eine Terminal-Anwendung und zum Ausführenos.system("sudo ...")
benötigen Sie nur einen * nix-Kernel. Vielleicht probiere ich es später in einer VM aus ...cd
Einfügen von Skripten in der Regel besser,cd -
dorthin zurückzukehren, wo Sie sich befanden, als davon auszugehen, dass Sie ein Verzeichnis inaktiviert haben. Wenn Sie die Initiale änderncd
,cd ..
werden Sie nicht dorthin zurückgebracht, wo Sie waren, sondern dorthincd -
.cd ..
würde ich nicht verwenden ,cd -
in Skripten, nur in der Befehlszeile.cd -
ist vielleicht weniger eine Garantie für Probleme alscd ..
, aber ich würde es immer noch nicht für sicher halten - wenn jemand weitere Verzeichnisänderungen in der Mitte hinzufügt, werden Sie unbeabsichtigt an einen anderen Ort gebracht. Während Subshells Ihnen einen klar abgegrenzten Bereich geben, in dem sich das Verzeichnis ändert und zu welchem Punkt Sie zurückkehren.os.system
funktioniert nicht ohnesh
Gegenwart, aber essubprocess.call
funktioniert.