A todos nos ha pasado, estamos trabajando, por error le damos en el teclado a la flecha de arriba y pasa lo peor:
rm -f /home/m1n1m3/descargas/descargdor.sh
Cualquier entra en pánico al darnos cuenta que no teníamos respaldo de este script, pero en estos momentos es cuando mas calma se debe de tener. Analicemos la situación, aun hay procesos usando este archivo, en mi caso aun sigo descargando y compartiendo archivos vía torrents gracias a este script que acabo de eliminar. Lo primero es encontrar el PID para lo cual podemos ejecutar ps y hacer un grep por el nombre del archivo, el resultado tendrá en la primera columna el PID como lo podemos ver aquí:
ps -p | grep -i descargador.sh
30560 pts/3 Ss+ 0:00 /bin/bash /home/m1n1m3/descargas/descargdor.sh
El sistema de ficheros /proc mantiene vínculos a los archivos abiertos por procesos dentro de el sub-directorio fd/ (File Descriptor) que a su vez esa anidado dentro de una carpeta con el nombre del PID del proceso y como acabamos de comprobar nuestro script aun se esta ejecutando.
Teniendo en cuenta el PID que obtuvimos anteriormente y ya que sabemos que la estructura de directorios es /proc/<pid>/fd/ podemos determinar que el archivo que acabamos de eliminar esta dentro de /proc/30560/fd/. Para determinar cual de todos es podemos hacer un ls -la y hacerle un grep por el nombre del archivo a la salida del ls -la. Todo esto se debería de ver así:
ls -la /proc/30562/fd/* | grep descargador.sh
/proc/30560/fd/51 -> /home/m1n1m3/descargas/descargador.sh (deleted)
Para recuperar el archivo eliminado solo debemos copiar el archivo dentro de fd/ a donde queramos, en mi caso, lo quiero restaurar, así que ejecutare:
cp /proc/30560/fd/51 /home/m1n1m3/descargas/descargador.sh
Listo, archivo restaurado.
Nota: Esto funciona también en Android