Recuperar archivos eliminados con «rm» es posible, a veces.
Eliminar un archivo con un típico «rm archivo» en los inicios de una persona en entornos Unix es más común que hacer un ls en la terminal de windows. Cuando sea el caso y eliminemos sin querer un archivo con el comando rm es posible recuperarlo siempre y cuando exista un proceso en ejecución que involucre al archivo eliminado.
Un caso hipotético.
Lanzo el navegador Opera mediante un script llamado oopera.sh, el navegador sigue abierto y por accidente he eliminado el archivo:
rm Scripts/oopera.sh
Lo primero que hay que hacer es listar los procesos del sistema y comprobar que el archivo que hemos eliminado se encuentre ahí:
ps -A | grep -i opera
PID TTY TIME CMD 4092 ? 00:00:00 oopera.sh 4093 ? 00:11:35 opera 4219 ? 00:00:00 operapluginclean 12369 ? 00:00:02 operapluginwrap
En el directorio /proc están listados y organizados los procesos del Sistema
El subdirectorio /proc/NumeroDelPID/fd/ contiene (entre otras cosas) un enlace simbólico de cada archivo, proceso, socket, directorio activo en el Sistema.
fd = file descriptor
Teniendo el PID (Identificador del Proceso) del archivo se comprueba el estado del archivo y al mismo tiempo el nombre del enlace simbólico:
ls -l /proc/4092/fd/* | grep oopera.sh lr-x------ 1 ramonoid ramonoid 64 Apr 20 13:57 /proc/4092/fd/255 -> /home/ramonoid/Scripts/oopera.sh (deleted)
Estado: (deleted)
Enlace: 255
Y ya localizado el enlace, lo único que queda es hacer la restauración con un simple cp:
cp /proc/4092/fd/255 $HOME/Scripts/oopera.sh
:wq
Los 10 comandos que uso más
cruznick me mandó la invitación para participar en esto de publicar los «10 comandos que uso más».
Mi historial de comandos lo tengo limitado a «666», no uso bash y tengo el historial en un archivo separado. El comportamiento de «history» es distinto, y al tener limitado a 666 mi historial, pues el resultado va sobre lo que he tecleado los últimos….. ~7 días.
Comando original:
history | awk ‘{print $2}’ | sort | uniq -c | sort -rn | head -10
Comando modificado:
┌─(ramonoid@gentoo:pts/1)──────────────────────────────────────────────────(~)─┐ └─(00:21:%)──> cat .zsh_history | awk '{print $1}' | sort | uniq -c | sort -rn | head -10 51 mv 35 sudo 27 search 26 rm 24 cat 23 ls 20 sv 20 cd 17 unmerge 16 vp
vp = emerge -vp
sv = sudo vim
search = emerge –search
Creo que lo protocolario es que yo invite a alguien más, así que invitaré a Thalskarth, a ushcompu y a Rugebiker
:wq
mmv
Hoy lo conocí gracias a un post del thread the little things that make you go ‘ooh, nice’ en los foros de Archlinux.
Se trata de un comando que es combinación de los comandos rename y mv y otros elementos básicos de bash. Puede copiar/mover/agregar/enlazar, nada que no se pueda hacer con los comandos de siempre. Pero lo que hace a mmv especial es la sencillez en su uso al enfocarse en las expresiones regulares.
Según el man de mmv:
DESCRIPTION
Mmv moves (or copies, appends, or links, as specified) each source file matching a from pattern to the target name specified by the to pattern. This multiple action is performed safely, i.e. without any unexpected deletion of files due to collisions of target names with existing filenames or with other target names. Furthermore, before doing anything, mmv attempts to detect any errors that would result from the entire set of actions specified and gives the user the choice of either proceeding by avoiding the offending parts or aborting. mmv does support large files (LFS) but it does *NOT* support sparse files (i.e. it explodes them).
Para utilizarlo en Archlinux hay que bajarlo de AUR.
Ejemplo de uso:
> mmv 'dsc*.jpeg' 'foto#1.jpg'
Si tenemos 66 archivos jpeg dsc0, dsc1, dsc2, etc… los renombramos a foto0, foto1, foto2, etc… además de cambiarles la extensión a jpg. #1 sustituye el valor de la expresión regular.
Algo más complejo (ni tanto):
> mmv '*foto*.jp*' '#1foto_#2.jp#3'
Aquí agregaremos un guión bajo(_) a todos los archivos con extensión jpg/jpeg que contengan la palabra «foto».
#1, #2, #3, #n sustituyen el valor de las expresiones regulares que se especifiquen en el «from».
Otro:
> mmv ';*.htm' '#1#2.html'
El puntoycoma(;) mmv lo interpreta como subdirectorio. En este comando se está renombrando todos los archivos .htm a .html ubicados en el directorio actual y sus subdirectorios.
#1 viene a sustituir el puntoycoma(;) que es tomado como parte de la expresión regular.
Mas sencillo, ¿no?
Fuentes:
http://elchonline.net/wiki/mmv
http://linux.dsplabs.com.au/mmv-copy-append-link-move-multiple-files-under-linux-shell-bash-by-wildcard-patterns-p5/
:wq
6 comments