it-swarm-es.tech

¿Tenemos un deshacer en Linux?

Cambié el nombre de algunos archivos en un script por lotes. ¿Hay alguna forma de deshacer los cambios sin tener que cambiarles el nombre?

¿Linux proporciona alguna forma nativa de undoing?

55
Lazer

Linux (como otros unices) no proporciona de forma nativa una función de deshacer. La filosofía es que si se fue, se fue. Si era importante, debería haber sido respaldado.

Hay un sistema de archivos Fuse que guarda automáticamente copias de versiones anteriores: copyfs , disponible en todas las distribuciones buenas. Por supuesto, eso puede usar muchos recursos.

La mejor manera de protegerse contra tales accidentes es usar un sistema de control de versiones (cvs, Bazaar, darcs, git, Mercurial, Subversion, ...). Toma un poco de tiempo aprender, pero vale la pena a mediano y largo plazo.

Lamentablemente no.

17
postfuturist

No, no hay un deshacer mágico en ningún Unix. Unix asume que sabes lo que estás haciendo. Para el soporte de Deshacer, use un VCS (su editor de texto probablemente también lo tenga incorporado).

La mayoría de los sistemas de archivos no tienen la capacidad de hacerlo de manera transparente.

Time Machine y la restauración del sistema en Mac y Windows respectivamente son solo sistemas de copia de seguridad/control de cambios.

10
xenoterracide

No hay deshacer en la línea de comando. Sin embargo, puede ejecutar comandos como rm -i y mv -i. Esto te indicará con un "¿estás seguro?" pregunta antes de que ejecuten el comando.

También es posible agregar un alias a un script de inicio (por ejemplo, ~/.bashrc o /etc/bash.bashrc):

alias remove='rm -i'
alias move='mv -i'

Editar: según las sugerencias a continuación, eliminé mi consejo para alias los comandos predeterminados. En cambio, ahora introduce nuevos comandos).

8
vdboor

La razón por la que los sistemas Linux/Unix no tienen una recuperación se debe a la forma en que la mayoría de los sistemas de archivos almacenan su información. La metainformación del archivo se almacena en la parte frontal del disco con referencias a inodes en el resto del disco. Por lo general, la mayoría de los sistemas de archivos asignan 10 bloques a un archivo en esta metaárea. Los primeros 7 se refieren a los primeros 7 inodes. El octavo y noveno van a listas de inodos (bloques doblemente vinculados) y el décimo va a una lista de listas de listas (bloques triplicados). Esto varía de un sistema de archivos a otro (ext4, jfs, xfs, etc.), pero estas listas de bloques generalmente pueden abordar tamaños de archivo de 2GB a varios TB.

Pero debido a que toda esta información se almacena en la parte frontal del disco, cuando se borra un archivo, no hay forma de hacer referencia a los inodos en el disco a qué metadatos pertenecen. En contraste, FAT32 y NTFS realmente almacenan cierta información de encabezado con los archivos mismos, lo que facilita identificar a qué archivo pertenece un conjunto de bloques (siempre y cuando ese espacio no haya sido reclamado por los archivos más nuevos todavía). En el trabajo de Linux, cuando elimina algo, casi siempre es lo primero que se sobrescribe de inmediato con nuevos datos para mayor eficiencia.

4
djsumdog

Una cosa que me gusta agregar a mi .bashrc es una función de copiar y quitar. Algo como:

cprm(){
    cp -p $1 ~/deleted/$1
    rm $1
}

Pero debe acostumbrarse a escribir cprm, no rm.

Obviamente, deberá mantenerse al tanto del área eliminada si tiene un espacio en disco limitado.

2
Deano

Si realmente desea una función de deshacer, use el control de fuente. Subversion en realidad funciona muy bien en una sola máquina de usuario. Lo uso para controlar todos mis archivos personales en mi sistema doméstico. Parece una exageración, hasta el desastre, un script falso o un error tipográfico en la línea de comando.

2
Stephen Jazdzewski

GitFS es un sistema de archivos basado en Fuse, que calcula automáticamente diffs entre versiones y permite restaurar/navegar a través de ellas.

Página web: https://www.presslabs.com/gitfs

Documentos: https://www.presslabs.com/gitfs/docs/usage/

1
test30