¿A dónde van los archivos cuando se emite el comando rm?

98

Recientemente lo hice accidentalmente rmen un conjunto de archivos y me hizo pensar dónde terminan exactamente estos archivos.

Es decir, cuando se trabaja con una GUI, los archivos eliminados van a la Papelera. ¿Cuál es el equivalente rmy hay alguna forma de deshacer un rmcomando?

boehj
fuente
3
Aquí hay un posible duplicado. deshacer en linux . Pero no estoy realmente seguro de que sea a dónde van los archivos es bastante diferente de si hay una manera de deshacer.
xenoterracide

Respuestas:

120

En ninguna parte, ido, desaparecido. Bueno, más específicamente, el archivo se desvincula. Los datos todavía están allí en el disco, pero se elimina el enlace. Solía ​​ser posible recuperar los datos, pero hoy en día los metadatos se borran y nada es recuperable.

No hay papelera para rm, ni debería haberla. Si necesita una papelera, debe usar una interfaz de nivel superior. Hay una utilidad de línea de comandos en trash-cliUbuntu, pero la mayoría de las veces los administradores de archivos GUI como Nautilus o Dolphin se utilizan para proporcionar una papelera estándar. La papelera es estándar en sí misma. Los archivos descargados en Dolphin serán visibles en la Papelera de Nautilus.

Los archivos generalmente se mueven a algún lugar, como ~/.local/share/Trash/files/cuando se arrojan a la basura. El rmcomando en UNIX / Linux es comparable al delde DOS / Windows que también elimina y no mueve archivos a la Papelera de reciclaje. Otra cosa a tener en cuenta es que mover un archivo a través de sistemas de archivos como su disco USB desde su disco duro es realmente 1) una copia de los datos del archivo seguido de 2) desvincular el archivo original. No querrás que tu Papelera se llene con estas copias adicionales.

pingüino359
fuente
44
Muchas gracias por la explicación clara. No me importa usar la CLI, solo necesito ser un poco más cuidadoso al usar comodines. :)
boehj
16
Sería cauteloso con el uso de algo como libtrashcambiar el comportamiento de rm. Se utilizan muchos scripts rmpara limpiar archivos y no desea que aparezcan en la Papelera. Recomiendo usar un comando dedicado como trashel del trash-clipaquete. @pedro Debo agregar que una vez creé un archivo * en mi directorio de inicio. Había citado accidentalmente * cuando no debía crearlo, así que decidí eliminarlo con rm * de forma nativa. Cuando me di cuenta de lo que hice, eliminé rápidamente el comando, pero ya había eliminado varios archivos en mi directorio de inicio.
penguin359
44
Es muy raro tener algo así como un bote de basura en el caparazón, por lo que si lo agrega en su máquina local y se acostumbra o incluso depende de él en su trabajo diario. Puede meterse en problemas al usar algunos de los otros 99% de los Unix: s sin uno ...
Johan
3
Creo que el mensaje para llevar a casa aquí es que necesito dejar de hacer CLI en las primeras horas y prestar más atención.
boehj
2
A lo largo de las mismas líneas que lo que dijo @Johan, RedHat usa para (aún lo hace?) Establece alias para comandos como cp, y mv, a cp -i, y mv -icuando se ejecuta como root. Esto cambia el comportamiento predeterminado, por lo que esos comandos siempre preguntarán antes de sobrescribir los archivos existentes. Algunos administradores de sistemas recomendaron eliminar específicamente esos alias para que no termines esperando ese comportamiento que puede terminar siendo letal cuando estás en otro sistema que sigue el comportamiento predeterminado.
penguin359
11

Para ext3 / ext4, puede intentar recuperar archivos usando herramientas como extundelete o ext3grep , o incluso jugar manualmente con las estructuras de bajo nivel (no para los débiles de corazón); para muchos sistemas de archivos, puede intentar buscar los bloques aún no sobrescritos por ciertos patrones (por ejemplo, magicrescue puede buscar encabezados JPEG, entre otras cosas). Tenga en cuenta que estos están utilizando la heurística para recuperar los archivos de los metadatos que quedan, por lo que no se garantiza la recuperación total: es más una apuesta de última oportunidad (ya que requieren que algunos rastros de los archivos permanezcan en el diario y que los bloques aún no se sobrescribieron).

Por lo tanto, para todos los efectos, los archivos eliminados rmhan desaparecido: puede probar la nigromancia que ofrecen estas herramientas, pero no dependa de ello: estas son las herramientas para probar cuando todo lo demás falla. Mejor desenterrar sus últimas copias de seguridad (ha estado haciendo copias de seguridad, ¿verdad? Oh, bueno, viva y aprenda ...).

Piskvor
fuente
2
Para datos de texto de alto valor, siempre puede usar cualquier herramienta robusta de uso general (incluso emacs o perl) para mirar el "dispositivo sin formato" del disco que contenía el archivo eliminado y buscar cadenas conocidas; He recuperado documentos de Word para personas de esta manera; pierden el marcado, pero pueden recuperar la mayor parte del texto. Obviamente, esta es la recuperación ante desastres, no "Deshacer".
alexis
Un enlace "manual" adecuado: web.archive.org/web/20131221183925/http://…
sjas
8

En cuanto a deshacer los efectos de rm:

Dado que la mayoría de los sistemas de archivos solo eliminan la referencia a los datos e indican que los bloques están libres, puede intentar localizar su lectura de datos directamente desde el dispositivo. Con un poco de suerte, los bloques que contienen sus archivos no han sido reclamados por otra cosa.

Esto supone que tiene algo bastante único para buscar, que tiene rooten el sistema y supongo que juntar todo lo que abarca más de un bloque del sistema de archivos (probablemente 4k) podría resultar bastante laborioso si el sistema de archivos no se maneja poner los archivos en bloques contiguos.

He recuperado con éxito el contenido de un par de archivos de texto sin formato ejecutando cadenas en el dispositivo en el que estaba el sistema de archivos, y usando grepbuscando algo de esos archivos con un contexto grande ( -C). (Y poco después de ese incidente, la compañía decidió gastar algunos recursos en la implementación de copias de seguridad)

Kjetil Jorgensen
fuente
Es un poco más complicado, por ejemplo, ext3 pone a cero los punteros de bloque en el inodo, pero sí, buscar los archivos directamente podría funcionar, si son lo suficientemente pequeños o están asignados en un bloque contiguo. Esto a veces se llama tallado de archivos y existen herramientas magicrescueque tratan de encontrar imágenes o sonidos por sus patrones distintivos.
Piskvor
6

Cada vez que elimina un archivo usando el rmcomando, los datos del archivo nunca se eliminan. En otras palabras, los bloques en el sistema de archivos que contienen datos todavía están allí.

Lo que sucede es que cuando ejecuta el rmcomando, el sistema marca el inodo que pertenece a ese archivo como no utilizado y los bloques de datos de ese archivo también como no utilizados (pero no eliminados). Sin embargo, ext3pone a cero la mayoría de los campos en el inodo, cuando se elimina un archivo.

Este marcado normal de no utilizado se realiza para la velocidad ... De lo contrario, para eliminarlo llevará más tiempo. Es por eso que puede haber notado que eliminar incluso archivos grandes es más rápido (puede recuperar los datos si esos bloques de datos no se sobrescriben).

Más información: Estructura de inodo , cómo funciona la eliminación de archivos

sarath
fuente
... a menos que el archivo esté marcado explícitamente con el chattr +satributo ("triturar"). Le dice al sistema de archivos que sobrescriba específicamente este archivo con ceros en la eliminación. Solo algunos sistemas de archivos admitirán ese atributo.
telcoM
3

En los sistemas de archivos de estilo Unix (incluso en Linux), los archivos no están realmente "en" ningún lugar en particular. En cambio, el sistema usa enlaces duros para señalar en partes lo que equivale a una gran cantidad de datos. Por lo tanto, cuando crea un archivo, también crea su primer enlace rígido: el que realmente reside en el lugar donde "guardó" el archivo. Si crea más enlaces duros, hasta donde el sistema sabe, el archivo existe en varios lugares a la vez.

Cuando "borra" un archivo, normalmente solo está borrando el enlace duro que existía en el lugar que especificó. Por eso se llama a la llamada del sistema para eliminar archivos unlink(). El sistema no eliminará el archivo hasta que no queden enlaces duros. Pero una vez que se destruye el último enlace rígido, también lo hacen los datos.

Entonces, ¿a dónde van los archivos que eliminas? Si todavía hay enlaces duros, estos archivos están donde estén los enlaces duros que no eliminó. Si no quedan enlaces duros, los archivos desaparecen.

El más cuchara
fuente
0

Busque también en ~ / .snapshot si el archivo se eliminó recientemente.

Andy
fuente
44
Esto solo funcionará si tiene algún sistema de archivos mágico que proporcione esa característica (como una NetApp) o si está utilizando una versión especial de rm.
mattdm