Un hombre parece haber eliminado toda su empresa por un trozo equivocado de código.
Ejecuté en todos los servidores un rm -rf {foo}/{bar} sin haber definido esas dos variables previamente
El señor Marco Marsala ha cambiado de usuario y de fotografía al ver que su mensaje en serverfault.com ha sido publicado en varios medios de comunicación ingleses.
rm es un comando de la familia de sistemas operativos Unix usada para eliminar archivos y directorios del sistema de archivos. rm -rf es frecuentemente usado en bromas y anécdotas sobre desastres. Su uso en bromas es similar al de format c: en Windows.
¿Por qué Marsala ejecutó ese comando? En realidad, era parte de su procedimiento de copia de seguridad escrito en bash script, supuestamente destinado a eliminar copias de seguridad antiguas. Sin embargo, debido al error, acaba de eliminar todo lo que podría tener en sus manos, incluyendo los sitios web de los clientes. Debido a Marsala no tenía una copia de seguridad en algún lugar seguro, podría haber perdido gran cantidad de datos.
Al decirle accidentalmente a su servidor una orden de borrado ha eliminado aparentemente todo rastro de su compañía y los sitios web de sus clientes.
Comando rm en GNU/Linux
rm - remove files or directories
-f, --force
ignore nonexistent files and arguments, never prompt
-r, -R, --recursive
remove directories and their contents recursively
-r (recursive - recursivo)
-f (force - forzar)
Bueno en realidad ejecutar rm -rf / no ocurre nada:
# rm -rf /
rm: it is dangerous to operate recursively on ‘/’
rm: use --no-preserve-root to override this failsafe
Ejemplos catastróficos del uso de rm con los parámetros -rf
El primer error sería ejecutarlo como root (#) sin usar sudo -
Cuidado con el uso de "Espacios" en falso
Pero hay errores simples que pueden ocurrir por añadir un espacio:
# rm -rf / temp
En vez de rm -rf /temp
Tranquilo, no serás el primero que ejecuta rm -rf * .log en vez de rm -rf *.log
Cuidado con el uso de wildcars como * y ~
Lo mismo con:
# rm -rf /temp *
En vez de rm -fr /temp*
O algo parecido con:
# rm -rf . /En vez de borrar el directorio actual: rm -rf ./
# rm . *En vez de # rm .*
Y por supuesto el uso de variables no definidas como el caso de Marco Marsala.
rm -rf $dir/Pero si dir no está definido se ejecutará como rm -rf /
¿Cómo puedo prevenir accidentes con rm-rf /*?
Recuerda que Ctrl + c puedes cancelar el comando actual accidental.Usar
alias rm="rm -i"
rm () { /bin/rm -i "$@" ; }
Debería preguntarte uno por uno antes de eliminar un fichero, pero no te salvará siempre si el usuario hace siempre click a "y"
if [ -n "$PS1" ] ; thenY recuerda que no hay alias rm en todos las máquinas que usas.....
rm ()
{
ls -FCsd "$@"
echo 'remove[ny]? ' | tr -d '12' ; read
if [ "_$REPLY" = "_y" ]; then
/bin/rm -rf "$@"
else
echo '(cancelled)'
fi
}
fi
Usar el echo antes de ejecutar:
echo rm -rf /temp*
Aunque uno de los mejores trucos es poner # en el comienzo del comando rm
root@localhost:~# #rm -rf /
Esto previene la ejecución accidental de rm en el archivo/directorio equivocado. Una vez verificado, puedes eliminar # desde el principio. Este truco funciona, porque en un principio de palabra con Bash # causa esa palabra y todos los caracteres restantes en esa línea sea ignorado. Así que el comando es simplemente ignorado.
Otra manera es usar:
xargs rm < lista
O usar el paquete safe-rm
¿Qué pasa realmente cuando ejecutas “rm -rf” en una máquina con Linux?
Hay un pequeño vídeo para mostrar qué pasa exactamente al ejecutar “rm -rf” en una máquina con Linux.
Realmente no pasa nada, a no ser que utilices el parámetro --no-preserve-root. Aún así, por favor, no ejecutes nunca jamás estos comandos en servidores. Algunas distribuciones no permiten que lo ejecutes, pero otras, generalmente más antiguas, felizmente borrarán todo el sistema.
Ejecutar como root:
rm -rf --no-preserve-root /
No es una buena idea.
Aunque muchos directorios "especiales" (o en uso) no pueden ser eliminados, el sistema quedará inservible (cuando reinicies, no con reboot, no con ningún comando que haya en /bin o /usr/bin porque habrán desaparecido, tendrás un bonito "kernel panic"):
rm: cannot remove '/...': Operation not permittedDirectorios que no pueden ser eliminados:
rm: cannot remove '/...': Device or resource busy
/dev. This is where device files are stored./proc—in-memory filesystem created by the kernel./run, a standardized file system location for daemons./sys. This allows you to get information about the system and its components.
root@ehn:/# echo *dev proc run sys# echo /dev/pts/*/dev/pts/0 /dev/pts/3 /dev/pts/ptmx
Realmente no es la primera ni la última vez que ocurre, ya que el tema ha sido rápidamente marcado como duplicado (además de ser bloqueado):
Los consejos de los expertos de Serverfault.
(La primera sería hacer copias de seguridad remotas pero como ya ha dicho que no tiene backup) le proponen:
- Hacer una imagen remota del disco duro con dd (ddrescue o dd_rescue si hay errores)
- No instalar nadas para no sobreescribir los datos que queden
- Usar herramientas de recuperación o borrado de datos accidentales como TestDisk
- Foremost
- Extundelete
- Scalpel
- Magic Rescue
- Photorec
- recoverjpeg
Recuperar particiones borradas en Linux
- GNU Parted
- TestDisk
- Gpart
Lo mismo ocurre con sentencias SQL algo peligrosas, como un delete from sin poner el where (igual con el update)
DELETE FROM table_name WHERE some_column=some_value;
Fuentes:
http://www.independent.co.uk/life-style/gadgets-and-tech/news/man-accidentally-deletes-his-entire-company-with-one-line-of-bad-code-a6984256.html
http://serverfault.com/questions/769357/recovering-from-a-rm-rf/769400
Vía:
https://www.meneame.net/m/tecnolog%C3%ADa/hombre-borra-todos-datos-empresa-hacer-rm-rf-error



No hay comentarios:
Publicar un comentario