¿Qué pasaría si ejecutara ‘sudo rm -rf *’ en la carpeta raíz de mi computadora?

Lea este interesante artículo de Noticias independientes

El hombre accidentalmente ‘elimina a toda su compañía’ con una línea de código incorrecto

Un hombre parece haber eliminado a toda su compañía con un código erróneo.

Al decirle accidentalmente a su computadora que elimine todo en sus servidores, el proveedor de alojamiento Marco Marsala aparentemente ha eliminado todo rastro de su empresa y los sitios web que cuida de sus clientes.

Marsala escribió en un foro para expertos en servidores llamado Server Fault que ahora estaba atrapado después de haber ejecutado accidentalmente código destructivo en sus propias computadoras, en una publicación que desde entonces afirmó que era una broma pero reflejaba una experiencia real con un cliente. Pero lejos de aconsejarles cómo solucionarlo, la mayoría de los expertos le informaron que acababa de eliminar accidentalmente los datos de su empresa y sus clientes, y al hacerlo probablemente había destruido toda su empresa con solo una línea de código.

El comando del problema era “rm -rf”: un código básico que eliminará todo lo que se le indique. El “rm” le dice a la computadora que elimine; la r elimina todo dentro de un directorio dado; y la f significa “forzar”, diciéndole a la computadora que ignore las advertencias habituales que vienen al eliminar archivos.

Juntos, el código borró todo en la computadora, incluidos los sitios web de los clientes de Masarla, escribió. Masarla dirige una empresa de alojamiento web que se ocupa de los servidores y las conexiones a Internet en los que se almacenan los archivos de los sitios web.

Ese código es tan famoso que es destructivo que se ha convertido en una broma dentro de algunos círculos informáticos.

Normalmente, ese código eliminaría todas las partes específicas de la computadora a las que se apuntó. Pero debido a un error en la forma en que fue escrito, el código en realidad no especificó en ninguna parte, por lo que eliminó todo en la computadora.

“Dirijo un pequeño proveedor de alojamiento con más o menos 1535 clientes y uso Ansible para automatizar algunas operaciones para que se ejecuten en todos los servidores”, escribió Marco Marsala. “Anoche ejecuté accidentalmente, en todos los servidores, un script Bash con un rm -rf {foo} / {bar} con esas variables indefinidas debido a un error en el código sobre esta línea”.

Marsala confirmó que el código incluso había eliminado todas las copias de seguridad que había tomado en caso de catástrofe. Debido a que las unidades que respaldaban las computadoras estaban montadas en ella, la computadora también logró eliminarlas. “Todos los servidores se eliminaron y las copias de seguridad externas también porque el almacenamiento remoto fue montado justo antes por el mismo script (que es un script de mantenimiento de respaldo)”.

La mayoría de los usuarios estuvieron de acuerdo en que era poco probable que Marsala pudiera recuperar ninguno de los datos. Y como resultado, su compañía seguramente tampoco se recuperaría.

“Lamento decir que su empresa ahora está esencialmente muerta”, escribió un usuario llamado Sven. “Es posible que tenga una posibilidad extremadamente pequeña de recuperarse de esto si apaga todo en este momento y entrega sus discos a una compañía de recuperación de datos de buena reputación.

“Esto será extremadamente costoso y todavía es extremadamente improbable que realmente lo rescate, y tomará mucho tiempo”. Otros acordaron que tal vez el Sr. Marsala estaba en el foro equivocado.

Se va a la quiebra “, escribió Michael Hampton. “No necesita asesoramiento técnico, necesita llamar a su abogado”.

Muchas de las respuestas al problema del Sr. Marsala no fueron especialmente útiles, señalando que podría haber tomado medidas para evitar que ocurriera antes de que ocurriera.

“Bueno, deberías haber estado pensando en cómo proteger los datos de tus clientes antes de destruirlos”, escribió una persona que se hacía llamar Massimo. “Ni siquiera comenzaré a enumerar cuántos errores se requieren simultáneamente para poder borrar completamente todos sus servidores y todas sus copias de seguridad de una sola vez.

“Esto no es mala suerte: es un diseño sorprendentemente malo reforzado por un descuido completo”.

El problema del Sr. Marsala está lejos de ser la primera vez que alguien destruye accidentalmente su propio sistema al perderse un error. De hecho, las respuestas a su publicación se referían principalmente a un hilo similar publicado hace dos años, con el título “Error de lunes por la mañana”.

Ese error vio a alguien perder accidentalmente el acceso a todo su servidor, después de que no notaron un espacio perdido en el código.

Actualización: desde que se publicó esta historia, el Sr. Marsala ha afirmado que su publicación original fue un engaño y fue escrita como un truco de marketing, pero que le había sucedido a un cliente suyo en 2006. Contactado por The Independent, el Sr. Marsala dijo que la publicación fue marketing de guerrilla para otra compañía, sin nombre

En Unix, en general, puede eliminar archivos y directorios incluso si están en uso. De hecho, ni siquiera tiene que ser root para hacer esto: si tiene permiso para eliminar un archivo o directorio, entonces tiene permiso para hacerlo independientemente de si el archivo está en uso, el directorio está en uso , o un archivo dentro del directorio está en uso. Si elimina un archivo que está en uso, el sistema simplemente no lo desasigna del sistema de archivos hasta que su recuento de referencia llegue a cero, es decir, todos los descriptores de archivo a ese archivo estén cerrados. Esto contrasta con Windows, en el que simplemente no tiene permiso para eliminar un archivo que está en uso, incluso si tiene privilegios administrativos.

Sin embargo, POSIX hace una excepción: es posible que no se le permita eliminar un directorio si es el directorio raíz o el directorio de trabajo actual del proceso de llamada o algún otro proceso. (El sistema puede permitirte hacerlo, pero también te permite no hacerlo).

Entonces, por ejemplo, sería seguro asumir que los directorios / lib y / bin se eliminarían por completo, ya que es poco probable que algún proceso tenga estos como su directorio raíz o directorio de trabajo actual. Después de eso, es poco probable que pueda ejecutar más ejecutables, aunque el shell seguirá funcionando.

En Linux, tampoco está permitido eliminar un directorio si es un punto de montaje. Generalmente, los siguientes son puntos de montaje: / dev / pts , / proc , / run , / sys . Probablemente pueda eliminar todo lo que hay dentro de / dev, excepto / dev / pts, por lo que el directorio / dev en sí mismo sobreviviría. (Tenga en cuenta que siempre puede eliminar los archivos del dispositivo, incluso si están montados: lo que está montado no está protegido, pero el lugar donde está montado sí lo está). / Proc y / sys no se tocarán, ya que son archivos de solo lectura sistemas de todos modos. Probablemente podría eliminar la mayoría o la totalidad del contenido de / run, pero no / run en sí. / media también sobreviviría si tienes algo montado debajo de él. / boot y / etc probablemente se eliminarían en su totalidad. Los directorios de nivel superior restantes pueden o no ser puntos de montaje. Tengo / home , / usr y / var, todos en la misma partición que todo lo demás, pero muchos sistemas los tienen en particiones separadas. En ese caso, esos directorios serían puntos de montaje, y no podría eliminarlos, aunque probablemente podría eliminar todo o casi todo su contenido.

Siempre escuché que ese comando se abordaba como el comando “reanudar”. Es decir, si lo hace, asegúrese de estar listo para postularse a otra posición. Es destrucción a gran escala.

Todos antes de mí han cubierto el proceso básico, pero quería agregar algo interesante sobre Windows. Me gusta trabajar con editores de disco duro de bajo nivel en varios sistemas. Estuve despierto hasta tarde (toda la noche) trabajando en el laboratorio de computación de la universidad, cuando fui a purgar todos los datos en una llave USB. El programa requería el método de identificación de dispositivos extraños de Windows. También usé bitlocker.

Esto está en Windows Seven Pro. Obtuve el número incorrecto y no leí el mensaje de error correctamente. Limpié el encabezado de cifrado, así como el primer kilobyte de datos de mi disco.

Windows logró ejecutarse durante 3 minutos, tiempo suficiente para que copie desesperadamente mis documentos, antes de que comenzara a ser un poco divertido. Los iconos desaparecerían, mi barra de inicio se desvaneció cuando explorer.exe falló, etc. El resultado final fue una pantalla azul y un sistema completamente descorchado.

Sé que eso está un poco fuera de tema, pero el punto es que los sistemas operativos son tontos. Si realmente tiene voluntad de cometer algún error, encontrará una manera de hacerlo, a menudo con resultados devastadores. También he visto algunas versiones recientes de rm warn cuando estás en el directorio raíz.

Esta pregunta es muy común entre las personas que comienzan con computadoras.

Mi consejo es intentarlo. No realmente. Obtenga una máquina virtual e instale un sistema operativo nuevo en ella. En aras de la simplicidad, sugeriría poner Ubuntu en una instancia de VirtualBox. Esto te llevará unos 30 minutos, y significa que puedes probar todas esas ideas locas de forma aislada. Pruébalo, mira lo que pasa. Luego reconstruya la instancia e intente alguna otra variación. Mire qué archivos logró eliminar (si corresponde) y trabaje hacia atrás desde allí.

La parte divertida es algo a lo que Brian Bi aludió en su respuesta. Cualquier archivo abierto que se elimine todavía puede ser utilizado por lo que sea que lo tenga abierto … esto puede conducir a algunas situaciones interesantes …

Una vez escribí algo similar en el directorio raíz como root en un cuadro de Sun OS 4 …
rm / ruta / a / archivos / *
Sí, ese era un espacio extra … así que eliminé (no recursivamente) todos los archivos en / que incluían el kernel … todo siguió funcionando. Copié todos los archivos desde otra máquina, los modifiqué y luego llamé a un amigo que me ayudó a hackear el gestor de arranque para señalar el nuevo kernel. Un reinicio rápido y todo seguía funcionando, pero ahora probablemente.

Si tiene privilegios de sudo, gran parte de su sistema de archivos, aunque no todos, se eliminará. Su computadora quedaría en un estado casi inutilizable, por lo que muchos comandos simplemente fallarían si hubiera dejado que “cd /; rm -rf *” se ejecute durante el tiempo suficiente. Pero el shell desde el que emitió el comando seguiría siendo algo, aunque no muy funcional: todos los componentes seguirían funcionando.

Lo intenté una vez, por pura diversión, en una computadora vieja. El sistema necesitaba una reconstrucción completa.

Retire el disco duro, monte el disco en otro sistema, actualice los archivos relevantes y tráigalo de nuevo. No es tan fácil como eso, pero es probable que su sector de arranque esté intacto, por lo que funcionará. En la mayoría de las instalaciones “modernas”, puede reinstalar desde un dispositivo externo (accesible a través del BIOS después del reinicio) y reinstalar mientras mantiene la “instalación” existente; en este caso, sus archivos de interés pueden ser los directorios de inicio de los usuarios.

Si bien depende del tipo de Unix que esté utilizando, el resultado sería desagradable de una forma u otra. En teoría, aparte de r / o o directorios protegidos del sistema, todo sería destruido. Debido a los enlaces duros, enlaces blandos, etc., algunas ubicaciones extrañas pueden protegerse accidentalmente.

Asumiendo que esto fue accidental, presionar ^ C podría salvar algo. Naturalmente más rápido, mejor. Si tiene mucha suerte, rm comenzaría a recorrer primero la carpeta / home (normalmente esperaría que / bin y / lib fueran primero, lo siento). Si esto sucede, sería un simple retorno de las copias de seguridad. Si perdió / bin / lib y otras carpetas importantes, probablemente esté buscando una reinstalación completa.

Elimina recursivamente la mayoría de las carpetas en la raíz, incluido / home. Sin embargo, el / sys no se eliminará y recibimos un mensaje de error “Operación no permitida”.

Pero no pude verificar exactamente lo que quedaba con ‘ls’ que no funcionaba ya que / bin ya no estaba allí y con el lanzador y el botón de inicio desaparecidos.

Por lo que puedo ver:
Eliminado: / home, / bin, / usr

Restante: / sys, / dev, / run, / proc, / media

Las versiones modernas de rm tienen una función de “preservar raíz” para evitar tales catástrofes. Sin embargo, si anula la protección, tendrá un día muy malo.

Hay una legendaria historia de recuperación posterior a “rm -rf” de 1986 que es una lectura deliciosamente nerd. Puede ser posible en circunstancias limitadas desenroscar el perro, pero un directorio raíz devastado está bastante cerca de un bloqueo de disco completo, que requiere una restauración desde medios externos.

sudo rm -rf / significa eliminar el contenido de la carpeta raíz de manera recursiva. rm = eliminar, -r = recursivo.

Esto básicamente borra el contenido de la carpeta raíz (los directorios, subdirectorios y todos los archivos en ellos). Sin embargo, el comando ‘sudo’ generalmente requerirá que se autentique con una contraseña antes de ejecutar el comando como superusuario.

Y ejecutar eso básicamente eliminará archivos importantes del sistema que eventualmente llevarán a la computadora a un mal funcionamiento (por ejemplo: problemas de arranque). Reinstalar / restaurar el sistema operativo ayudará a rectificar eso.

Lo hice en un sistema Solaris alguna vez. (Sin embargo, no hay necesidad de sudo).

Al final de una clase de administrador de sistemas, los sistemas se borrarían en preparación para otra clase, por lo que no se hizo daño. Esto es lo que sucedió:

$ su

Contraseña: uuey2298

$ cd /

$ rm -rf *. *

<< pasa algún tiempo mientras se limpia la mayor parte del sistema de archivos raíz >>

¡FALLA!

// No recuerdo el mensaje de error, pero el sistema estaba perdido en ese momento.

// ADVERTENCIA: ¡No hagas esto en la oficina! Un cliente de Cray Research (idiota), el administrador del sistema, hizo esto en una Supercomputadora Cray (UNICOS) en funcionamiento a finales de los años 80. … De alguna manera, logró mantener su trabajo.

Mi amigo y yo hemos discutido esto varias veces y hemos tenido la intención de probarlo. Sin embargo, veamos qué debería suceder. Eliminará casi todo en su computadora como la carpeta raíz o / contiene todo en el sistema operativo. El archivo que define el comando rm también está bajo /. Finalmente, su sistema ya no sabría cómo eliminar archivos y terminaría con algunos archivos que no hacen mucho y tendría que borrar el disco y comenzar de nuevo.

Depende de la distribución, pero por lo general, “cosas malas” sucederán a su sistema.

Un enfoque alternativo al caos es “cat / dev / urandom> / dev / sda

Si desea asegurarse de que está eliminando el sistema de archivos correcto para la partición /:
cat / dev / urandom> `monte | awk ‘$ 3 == “/” {print $ 1; } ”

Puede usar dd para hacer lo mismo:
dd if = / dev / urandom of = `mount | awk ‘$ 3 == “/” {print $ 1; } ” bs = 100000

Si vas a pedir ayuda en los foros después de hacer esto, serás famoso, una estrella de la web.

Inventé una historia de terror sobre eso en un foro y ahora estoy en todos los periódicos: el hombre ‘elimina a toda su compañía’ después de escribir un código incorrecto

Todos escribirán mi nombre en un motor de búsqueda, verán artículos sobre mí y fue divertido.

Los resultados de mi primer día como administrador de sistemas … tomaron 3 semanas para resolverlo … por cierto lo hice en el servidor principal de mi empleador …

Clasifique la respuesta a lo que sucedería en la mayoría de los sabores de Unix que equivaldría a eliminar todos los archivos en su disco (incluidos los necesarios para arrancarlo)

Ya he respondido esto en otra parte: la respuesta de Victor Eijkhout a ¿Qué sucederá si voy al directorio raíz en Linux / Mac y escribo el comando rm -rf para eliminar por la fuerza todos los directorios y subdirectorios?

Ejecuté sudo rm -rf –no-preserve-root / * en una máquina virtual Ubuntu, y ciertamente hizo su daño. Fue muy divertido hacerlo en una máquina virtual, pero dado que también utilizo Ubuntu en mi sistema host para mi hobby de programación, definitivamente NO querría ejecutarlo allí.

Una advertencia antes de comenzar si tiene la intención de intentar esto: desmonte todos los sistemas de archivos remotos primero. El rm recursivo eliminará felizmente los archivos de cualquier cosa y todo lo que esté montado bajo /.

El comando “rm – rf /” es básicamente una forma de borrar su PC. Lo expandiré: eliminar -recursivamente -con-fuerza los contenidos del directorio raíz.