Tengo una emergencia, un principiante de Linux y Bash aquí y me equivoqué al intentar escribir un script para cambiar el nombre de algunos archivos. El bucle subió accidentalmente por la ruta (ejecutó el script en una carpeta en el escritorio) y cambió /bin
de nombre a /D_bin
( D_
era el prefijo que agregué), por lo que ahora el sistema no puede usar /bin
contenido, así que no bash
, no mv
para cambiar el nombre, no sudo
... Los archivos en /D_bin
están bien, no cambia de nombre, y se puede copiar y pegar, pero no puede crear la carpeta /bin
de nuevo sin fiesta. El sistema se ve estable pero muy pocas cosas funcionan y no tienen acceso a los archivos en el escritorio.
Las otras carpetas de /
like también /lib
/sbin
/etc
parecen estar bien, y el escritorio gráfico todavía está allí. Tengo miedo de reiniciar porque no sé si podrá arrancar.
¿Hay una concha en la raíz o una manera de cambiar el nombre /D_bin
de nuevo a /bin
? Necesito ayuda por favor, trabajo muy importante comprometido
Mi guión suicida: $:
#!/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
:( ¡¡¡¡Gracias!!!!
fuente
/D_bin/mv -T /D_bin /bin
y no ejecutes tus scripts como root la próxima vez.Respuestas:
Hay varias formas de solucionar este problema.
Si tiene acceso a un shell (cualquier terminal abierto), ejecute:
sudo
está en/usr/bin
modo que no hay necesidad de ejecutarlo con una ruta absoluta.La otra cosa que puede hacer es agregar la variable
/D_bin
a suPATH
entorno, como esta:Si no tiene acceso a ningún shell:
Al final de la línea que comienza con Linux, agregue:
presione CTRL+x
Ahora se lo colocará en un shell bash, debe volver a montar el sistema de archivos como leído y grabable.
Y mueva el directorio D_bin a bin:
Luego reinicie el sistema.
Debería funcionar, pero si nada funcionó para usted, aún puede arrancar el sistema con un disco ubuntu / usb en vivo y solucionar el problema.
fuente
cd "$j"
(el nombre debe estar entre comillas dobles) y reemplace la travesuracd ..
con el paréntesis cerrado correspondiente. Además, ¿por qué estabas corriendo como root? No deberías poder hacer tanto daño.cd ..
poner unpwd
, elimine sufind
comando del script, luego ejecútelo como un usuario normal. verá que el script entra/
, porque hace un cd $ j, que supongo que son archivos, no directorios. así que en cada ciclo das un paso atrás y finalmente estás dentro/
./bin
porque estaba trabajando en carpetas en el interior/bin
. Los verificaría (¡aunque no como root!)mv
.Para solucionar este problema si no tiene una terminal abierta, primero intentaré encontrar un "sustituto de shell" que pueda usar en lugar de bash. Python está dentro
/usr/bin
, por lo que aún debería funcionar.Si eso no funciona, simplemente iniciaría directamente desde un CD / USB en vivo y arreglaría todo desde un entorno de ejecución conocido.
Como consejo general, apoyaría a Jonathan Leffler en los comentarios: nunca lo use
cd ..
en scripts, puede conducir fácilmente a tales problemas. Mejor solo cd en el$j
directorio dentro de una subshell , de esta manera no tiene que preocuparse por volver.Además, por supuesto, no ejecute cosas como root a menos que sea absolutamente necesario.
fuente
python
proceso, solo necesita una aplicación de terminal, y para ejecutaros.system("sudo ...")
solo necesita un kernel * nix. Tal vez lo probaré en una VM más tarde ...cd
utilizan scripts, generalmente es mejorcd -
volver a donde estaba, en lugar de suponer que ha bajado un directorio. Si cambia la inicialcd
, entoncescd ..
no lo llevará de regreso a donde estaba, pero locd -
hará.cd ..
yo no usarcd -
en los scripts, solamente en la línea de comandos.cd -
quizás no sea una garantía de problemascd ..
, pero aún así no lo consideraría seguro : si alguien agrega más cambios en el directorio en el medio, lo llevará a algún lugar sin querer. Mientras que los subshells le dan un alcance claramente delimitado sobre dónde cambia el directorio y a qué punto regresa.os.system
qué no funciona sinsh
presentes, perosubprocess.call
las obras.