158 votos

¿Cómo puedo prevenir accidentes de rm-rf /*?

Me corrió rm -rf /* accidentalmente, pero me refería rm -rf ./* (aviso de la estrella después de la barra diagonal).

alias rm='rm -i' y --preserve-root por defecto no me salvará, ¿hay alguna automático de salvaguardias para esto?


Sí, yo no estaba en la root y se cancela el comando de inmediato, pero hubo algunos relajado permisos en algún lugar o algo, porque me di cuenta de que mi Bash se rompió ya. No quiero depender de los permisos y no ser root (yo podría hacer el mismo error con sudo), y no quiero a la caza de errores misteriosos debido a la falta de un solo archivo en algún lugar en el sistema, por lo que, copias de seguridad y sudo son buenas, pero me gustaría algo mejor para este caso específico.


Pensar dos veces y usar el cerebro. La estoy usando en realidad! Pero lo estoy utilizando para resolver algunos compleja tarea de programación en el que participaron 10 cosas diferentes. Estoy inmerso en esta tarea lo suficientemente profundo, no hay ningún poder del cerebro izquierdo para la comprobación de las banderas y de los caminos, no quiero ni pensar en términos de comandos y los argumentos, creo que en términos de acciones como "vacío actual dir', otra parte de mi cerebro se traduce a los comandos y a veces comete errores. Quiero que el equipo correcto, o al menos los peligrosos.


Gracias por las respuestas. Voy a tratar de ellos y aceptar cuando mi caja termine de restaurar a partir de copia de seguridad de mañana!!!

42voto

Stefan Lasiewski Puntos 10566

Su problema:

Me corrió rm-rf /* accidentalmente, pero me refería rm-rf ./* (aviso de la estrella después de la barra diagonal).

La solución: ¡no hagas eso! Como una cuestión de práctica, no use ./ en el comienzo de un camino. Las barras no añaden valor para el comando y sólo causa confusión.

./* significa lo mismo que *, por lo que el comando anterior es la mejor escrita como:

rm -rf *

He aquí un problema relacionado. Veo la siguiente expresión a menudo, cuando alguien asume que FOO es algo como /home/puppies. Esto lo vi hoy, en realidad, en la documentación de un importante proveedor de software.

rm -rf $FOO/

Pero si FOO no está establecido, esto va a evaluar a rm -rf /, que intentará eliminar todos los archivos en su sistema. La barra diagonal es innecesario, así que, como cuestión de práctica no lo uso.

Lo siguiente será hacer la misma cosa, y es menos probable que los corruptos de su sistema:

rm -rf $FOO

He aprendido estos consejos de la manera difícil. Cuando tuve mi primera cuenta de superusuario, hace 14 años, que accidentalmente se corrió rm -rf $FOO/ desde dentro de un script de shell y destruyó un sistema. El 4 otros administradores de sistemas miró y dijo, 'Sí. Todo el mundo hace que una vez. Ahora aquí está el medio de instalación (36 discos). Vaya lo arregle".

Otras personas aquí recomendar soluciones como --preserve-root y safe-rm. Sin embargo, estas soluciones no están presentes para todos de la Onu*xe-varients y puede que no funcione en Solaris, FreeBSD Y MacOSX. Además, safe-rm requiere la instalación de paquetes adicionales en cada sistema Linux que utilice. Si usted confía en safe-rm, lo que sucede cuando usted comienza un nuevo trabajo y no tienen safe-rm instalado? Estas herramientas son una muleta, y es mucho mejor confiar en el conocimiento y los valores predeterminados de mejorar sus hábitos de trabajo.

30voto

Not Now Puntos 2637

Dado que este es "Serverfault", me gustaría decir esto:

Si usted tiene docenas o más servidores, con un largish equipo de administradores/usuarios, alguien va a rm -rf o chown el directorio incorrecto.

Usted debe tener un plan para conseguir el afectado el servicio de copia de seguridad con el mínimo posible de MTTR.

23voto

Gilles Puntos 6479

La mejor de las soluciones implican cambios en sus hábitos de no usar rm directamente.

Un enfoque consiste en ejecutar echo rm -rf /stuff/with/wildcards* primera. Comprobar que la salida de los comodines parece razonable, a continuación, utilizar la cáscara de la historia de ejecutar el comando anterior, sin la echo.

Otro enfoque es el límite de la echo comando para casos donde se cegadoramente obvio lo que va a eliminar. En lugar de eliminar todos los archivos en un directorio, borrar el directorio y crear una nueva. Un buen método es cambiar el nombre del directorio existente a DELETE-foo, a continuación, cree un nuevo directorio foo con los permisos adecuados, y, por último, eliminar DELETE-foo. Un beneficio adicional de este método es que el comando que entró en su historia es rm -rf DELETE-foo.

cd ..
mv somedir DELETE-somedir
mkdir somedir                 # or rsync -dgop DELETE-somedir somedir to preserve permissions
ls DELETE-somedir             # just to make sure we're deleting the right thing
rm -rf DELETE-somedir

Si realmente insistir en la eliminación de un montón de archivos, porque usted necesita el directorio de permanencia (ya que siempre debe existir, o porque usted no tiene el permiso para volver a crear), mover los archivos a un directorio diferente, y eliminar ese directorio.

mkdir ../DELETE_ME
mv * ../DELETE_ME
ls ../DELETE_ME
rm -rf ../DELETE_ME

(Hit que Alt+. clave.)

Borrar un directorio de interior sería atractivo, porque rm -rf . es corto, por lo tanto tiene un bajo riesgo de errores tipográficos. Típico de los sistemas no permiten hacer eso, por desgracia. Puede a rm -rf -- "$PWD" en su lugar, con un mayor riesgo de errores tipográficos, pero la mayoría de ellos llevan a la eliminación de nada. Ten en cuenta que esto deja un peligroso comando en el shell de la historia.

Siempre que pueda, utilice el control de versiones. No rm, cvs rm o lo que sea, y que se puede deshacer.

Zsh cuenta con opciones para que te pregunte antes de ejecutar rm con un argumento que muestra todos los archivos en un directorio: rm_star_silent (por defecto) le pide antes de ejecutar rm whatever/*y rm_star_wait (desactivado por defecto), se añade un retardo de 10 segundos durante el cual no se puede confirmar. Este es de uso limitado si la intención de eliminar todos los archivos en un directorio, porque vas a estar esperando la pronta ya. Puede ayudar a prevenir los errores tipográficos como rm foo * para rm foo*.

Hay muchas más soluciones que flotan alrededor que implicar el cambio de la rm comando. Una limitación de este enfoque es que un día vas a estar en un equipo con el real rm y automáticamente te llame rm, caja fuerte en la espera de una confirmación... y lo siguiente que va a ser la restauración de copias de seguridad.

17voto

Sachin Divekar Puntos 1404

Uno de los trucos que se me siga es poner # en el comienzo, mientras que el uso de la rm comando.

root@localhost:~# #rm -rf /

Esto impide la ejecución accidental de rm sobre el mal de archivo/directorio. Una vez verificado, retire # desde el principio. Este truco funciona, porque en Bash una palabra que comienza con # causas que la palabra y el resto de los personajes en esa línea para ser ignorado. Por lo que el comando es simplemente ignorado.

O

Si desea evitar cualquier directorio, hay un truco más.

Crear un archivo de nombre -i en ese directorio. ¿Cómo puede una extraña archivo sea creado? El uso de touch -- -i o touch ./-i

Ahora intente rm -rf *:

sachin@sachin-ThinkPad-T420:~$ touch {1..4}
sachin@sachin-ThinkPad-T420:~$ touch -- -i
sachin@sachin-ThinkPad-T420:~$ ls
1  2  3  4  -i
sachin@sachin-ThinkPad-T420:~$ rm -rf *
rm: remove regular empty file `1'? n
rm: remove regular empty file `2'? 

Aquí la * ampliará -i a la línea de comandos, por lo que su comando en última instancia se convierte en rm -rf -i. Así comando le pedirá antes de la extracción. Usted puede poner este archivo en su /, /home/, /etc/, etc.

O

Uso --preserve-root como una opción a rm. En la rm incluido en el más reciente coreutils paquetes, esta es la opción predeterminada.

--preserve-root
              do not remove `/' (default)

O

Uso de la caja fuerte-rm

Extracto de la página web:

Seguro-rm es una herramienta de seguridad destinados a evitar la eliminación accidental de los archivos importantes mediante la sustitución de /bin/rm con un contenedor, que comprueba el dado argumentos en contra de una configurables de la lista negra de archivos y los directorios que nunca debe ser eliminado.

Los usuarios que intentan eliminar uno de estos archivos protegidos o los directorios no será capaz de hacerlo y se muestra una advertencia mensaje:

$ rm -rf /usr
Skipping /usr

15voto

Sven Puntos 51980

Sí: no funcionan como root y siempre pensar dos veces antes de actuar.

También, echar un vistazo a algo como https://launchpad.net/safe-rm.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: