Deshacer el comando de la papelera de Linux

24

¿Podemos deshacer las operaciones realizadas en una terminal, por ejemplo, la eliminación de archivos rm?

Soluciones obtenidas:

  1. Aliasing
  2. Recuperar utilidades
  3. Utilidades de respaldo
  4. LibTrash
  5. Versionado (FUSE)
cdb
fuente
1
Activado rm: desvincula un archivo de él inode. La pregunta: "A dónde van los archivos cuando rmse emite el comando" -> unix.stackexchange.com/questions/10883/… también podría ser una buena lectura para usted.
erch

Respuestas:

62

No hay un "deshacer" general para cada operación en la terminal. Si desea recuperar un archivo después de usarlo rm, deberá buscar un software de recuperación.

Una opción para evitar futuros errores es crear aliascomandos alternativos para eliminar archivos. Añádelos a tu ~/.bashrcy adquiere el hábito de usarlos en lugar de rm.

  1. alias rmi = 'rm -i'

    Si lo usa rmi, se le solicitará la confirmación de futuras eliminaciones. Intente evitar desarrollar el hábito de presionar yinmediatamente después de emitir un rmicomando, ya que eso anulará el propósito.

  2. También puede mover archivos borrados por el trshcomando en la terminal a su papelera de reciclaje (en KDE y Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    Si lo usa trsh, tendrá una capacidad limitada de "recuperación". Cuidado con eso

    trsh dir1/file1 dir2/file1
    

    aún puede causar pérdida de datos irrecuperable.

John T
fuente
3
+1 para una respuesta mucho mejor que la mía =)
The How-To Geek
99
El segundo alias es muy, muy inteligente. +1.
LiraNuna
3
basura () {mv $ @ ~ / .Trash; } # función bash, no un alias. Cambiar la conducta esperada de rm es una mala idea, en mi humilde opinión.
Richard Hoskins el
20
El riesgo con aliasing rma rm -ies que uno se acostumbra a la red de seguridad que te da. Luego vas a otra máquina, que no tiene ese alias ...
Dentrasi
3
Por las razones que mencionan Richard y Dentrasi, prefiero crear una función personalizada o alias rmi-> rm -i. Es realmente un error simplemente interponerse en un programa existente aliasándolo.
Telémaco el
6

No hay papelera de reciclaje para la línea de comando.

Puede probar algunas de las diversas utilidades de recuperación, pero no hay garantía de que funcionen.

El friki de cómo hacerlo
fuente
Sí, hay una papelera para la línea de comando. Ver trash-cli en otra respuesta.
Sparhawk
Trash-cli es muy bueno :) y usa Trashlib, mejor que simplemente mover archivos.
m3nda
5

Puede usar trash-cli si usa KDE cuando ejecuta una interfaz gráfica de usuario. Esta es la utilidad de línea de comandos para eliminar / restaurar usando las instalaciones de basura de KDE.

joe
fuente
1
trash-cli proporciona también funciona con la basura de GNOME y está diseñado para proporcionar compatibilidad de opciones rm (para el aliasing).
Andrea Francia
No te olvides de alias rm=trashque tus problemas de línea de comandos típicos vienen con botones de deshacer.
Ryan C. Thompson
Creo que alias rm=trashes potencialmente peligroso, si hay alguna posibilidad de que uses el sistema de otra persona algún día y lo olvides (o ssh). Es mucho más seguro acostumbrarse a escribir en trashlugar de hacerlo rm.
Sparhawk
4

Puede crear rmun alias para el trashcomando (deberá instalarlo trashprimero). Agregue esto a su ~/.bashrc:

alias rm='trash'

Esto es preferible alias rm='mv --target-directory=$HOME/.Trash'ya que ~ / .Trash NO es la carpeta de basura para gnome. En mi humilde opinión, es mejor trashaveriguar dónde está la carpeta de basura real.

Por cierto, habría publicado esto en un comentario, pero no tengo suficiente representante.

Alvin Row
fuente
55
+1 para "ya que ~ / .Trash NO es la carpeta de basura para gnome". Sin embargo, rm tampoco debe tener un alias de basura. Deberías usar basura en lugar de rm si eso es lo que quieres.
nagul
Es cierto, pero para algunas personas los viejos hábitos mueren con dificultad.
Alvin Row
'rmtrash' es otra opción.
Itachi
3

Aún no se han nombrado dos soluciones técnicas más:

  1. libtrash : una biblioteca dinámica que se puede precargar en su shell que intercepta la eliminación / eliminación de syscalls y mueve los archivos a una carpeta de basura en su lugar (al igual que un alias pero funciona para cualquier aplicación cuando está precargada).
  2. Un sistema de archivos de versiones. Si elimina (o edita, copia o ...) un archivo, puede volver a un estado anterior. Esto podría hacerse con un sistema de archivos FUSE y uno de sus sistemas de archivos de versiones .
joschi
fuente
3

Hay una pregunta más grande aquí que vale la pena abordar. Los comandos de Shell no son habladores (no verifican dos veces lo que quieres) y esperan que sepas lo que estás haciendo. Esto es fundamental para la forma en que están diseñados . Es una característica, no un error.

Algunas personas se sienten machos cuando usan tales comandos, lo que creo que es bastante tonto, pero es importante comprender los peligros. Puedes hacer mucho daño en una terminal, incluso si no eres root. Creo que probablemente realmente te importó rm, pero como dijiste "¿Podemos deshacer las operaciones realizadas en la terminal", pensé que valía la pena decirlo. La respuesta general es no, no puedes.

Telémaco
fuente
2

Opción 1: consulte Recuperar archivos de Linux de un sistema de archivos ext2 . Esta página apunta a un programa, escrito por Sebastian Hetze de la compañía LunetIX, que (como sugiere el título) recupera archivos recientemente eliminados de un sistema de archivos ext2. Ejemplo de uso:

# undelete -d /dev/hdc3 -a 10

Advertencias:

  • El sitio web original se ha ido. El enlace, arriba, es al Archivo de Internet.
  • Los sitios están en una mezcla de inglés y alemán.
  • Como se indicó anteriormente, la herramienta está diseñada específicamente para el sistema de archivos ext2. Es poco probable que funcione en cualquier otro tipo de sistema de archivos; especialmente no los distintos ext N .

Opción 2: Tengo rsnapshot (rsync) ejecutándose en mi máquina que hace instantáneas cada hora de mis carpetas seleccionadas. Incrementa esto cada hora, 2 horas o lo que sea que le digas a CRON que haga. Después de un día completo, recicla estas instantáneas en una instantánea diaria y después de 7 días de forma semanal, etc. ¡Esto me permite retroceder en el tiempo durante aproximadamente un mes por cada hora! Es bastante bueno con espacio en disco ya que crea enlaces simbólicos a archivos que nunca cambiaron ...

Pozo
fuente
Solo para aclarar, el # 1 es específico para los sistemas de archivos ext2. No funcionaría en un sistema de archivos ext3.
nagul
1

Existen utilidades de recuperación para ext2, pero la mayoría de los otros sistemas de archivos de Linux están atrapados en la Edad de Piedra y no tienen características de usabilidad avanzadas. El triste estado de las cosas considerando unidades gigantescas con suficiente espacio para nunca volver a eliminar un archivo son comunes.

Entonces estás atrapado con tres opciones:

  1. Realice copias de seguridad regularmente, por ejemplo con un comando como:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Use una herramienta de control de versiones como gitpara todo su trabajo. Si bien esto no protegerá contra un loco rm -rque mata el repositorio, protegerá contra problemas regulares, ya que usará git rmno en bruto rm.

  3. Tenga mucho cuidado y no confíe demasiado rm -i, trash-cliy amigos, ya que la mayoría de los datos que perderá en el shell no los perderá accidentalmente rm, sino por tuberías mal dirigidas, archivos de salida mal escritos, mal dirigidos mvy otras cosas, es decir, cosas que sobrescribirán sus datos, no solo eliminarlos.

Haga los tres para obtener la máxima seguridad.

Grumbel
fuente
Es bastante divertido llamar a ext2 moderno. Los sistemas de archivos más nuevos usan formatos en disco más complicados que ext2 / 3, y tuvieron que renunciar a ubicaciones fáciles de encontrar donde podría encontrar archivos para eliminar. Están diseñados para personas que hacen copias de seguridad de cosas que les importan. Por cierto, siempre uso mv y cp -i, ya que normalmente no quiero golpear nada. Normalmente escribo \ rm, porque también tengo alias rm a rm -i, pero no quiero responder a su pregunta.
Peter Cordes
0

mira esto ... podría ser útil http://artmees.github.io/rm/

supongamos que lo hiciste

rm very_important_file

desde la terminal recuperar este archivo es un proceso tedioso y no siempre exitoso

en cambio, si usaste el script mencionado anteriormente. no tienes que preocuparte por esto porque

rm very_important_file
mv very_important_file ~/.Trash/

son equivalentes el script maneja más casos y no altera su sistema rmen absoluto, y eso se debe a que se coloca en la carpeta bin del usuario local, por lo que sombrea el rm del sistema y, sin embargo, no lo afecta ni inhabilita su uso

Este es un enfoque de alias refinado pero sin perder ninguna característica

a14m
fuente
1
Sería bueno si pudiera agregar alguna explicación sobre lo que esto hace y cómo se aplica a la pregunta, tal vez agregar un ejemplo, etc.
slhck
0

TestDisk puede recuperar archivos de los sistemas de archivos FAT, exFAT, NTFS y ext2 .

Cristian Ciupitu
fuente
0

Para mí (opensuse leap 42.2, NTFS pendrive) PhotoRec , también por los testdiskcreadores, funcionó :) Sin embargo, no ha recuperado los nombres de archivo.

PhotoRec es un software de recuperación de datos de archivos diseñado para recuperar archivos perdidos, incluidos videos, documentos y archivos de discos duros, CD-ROM e imágenes perdidas (de ahí el nombre de Photo Recovery) de la memoria de la cámara digital. PhotoRec ignora el sistema de archivos y busca los datos subyacentes, por lo que seguirá funcionando incluso si el sistema de archivos de sus medios ha sido gravemente dañado o reformateado.

Lo instalé usando repositorios estándar en openSUSE

instrucción

boczniak767
fuente
1
¡Bienvenido a Super User! Lea Cómo recomendar software para obtener la información mínima requerida y sugerencias sobre cómo recomendar software en Super User. Para que su respuesta sea útil incluso si los enlaces proporcionados rompen estos detalles, debe editarlos en su respuesta.
Digo reinstalar a Mónica