it-swarm.it

Abbiamo un annullamento in Linux?

Ho rinominato alcuni file in uno script batch. C'è un modo per annullare le modifiche senza doverle rinominare?

Linux fornisce un modo nativo di undoing?

55
Lazer

Linux (come altri unices) non fornisce nativamente una funzione di annullamento. La filosofia è che se è andata, è andata. Se fosse importante, avrebbe dovuto essere eseguito il backup.

Esiste un filesystem Fuse che mantiene automaticamente copie delle vecchie versioni: copyfs , disponibile in tutte le buone distribuzioni. Certo, questo può usare molte risorse.

Il modo migliore per proteggersi da tali incidenti è utilizzare un sistema di controllo della versione (cvs, Bazaar, darcs, git, Mercurial, Subversion, ...). Ci vuole un po 'di tempo per imparare, ma ripaga meravigliosamente a medio e lungo termine.

Sfortunatamente no.

17
postfuturist

No, non c'è annullamento magico in nessun Unix. Unix presume che tu sappia cosa stai facendo. Per il supporto di Annulla, usa un VCS (probabilmente anche l'editor di testo lo ha incorporato).

La maggior parte dei filesystem non ha la capacità di farlo in modo trasparente.

Il ripristino della macchina del tempo e del sistema su Mac e Windows rispettivamente sono solo sistemi di controllo di backup/modifica.

10
xenoterracide

Non c'è annullamento nella riga di comando. Tuttavia, puoi eseguire i comandi come rm -i e mv -i. Questo ti chiederà "sei sicuro?" domanda prima di eseguire il comando.

È anche possibile aggiungere un alias per esso a uno script di avvio (ad esempio ~/.bashrc o /etc/bash.bashrc):

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

Modifica: dai suggerimenti seguenti, ho rimosso i miei consigli per alias i comandi predefiniti. Invece, introduce ora nuovi comandi).

8
vdboor

La ragione per cui i sistemi Linux/Unix non hanno un undelete deriva dal modo in cui la maggior parte dei filesystem memorizza le loro informazioni. Le meta-informazioni sui file sono tutte memorizzate nella parte anteriore del disco con riferimenti agli inode sul resto del disco. In genere, la maggior parte dei filesystem alloca 10 blocchi a un file in questa meta-area. I primi 7 si riferiscono ai primi 7 inode. L'ottavo e il nono vanno a elenchi di inode (blocchi doppiamente collegati) e il decimo a un elenco di elenchi di elenchi (blocchi collegati tripply). Questo varia da file system a file system (ext4, jfs, xfs, ecc.), Ma questi elenchi di blocchi in genere possono indirizzare file di dimensioni comprese tra 2 GB e diversi TB.

Ma poiché tutte queste informazioni sono memorizzate nella parte anteriore del disco, quando un file viene cancellato, non c'è modo di fare riferimento agli inode sul disco a quali metadati utilizzino. Al contrario, FAT32 e NTFS memorizzano effettivamente alcune informazioni di intestazione con i file stessi, rendendo più semplice l'identificazione del file a cui appartiene una serie di blocchi (purché lo spazio non sia stato ancora recuperato dai file più recenti). Nel lavoro Linux, quando si elimina qualcosa, è quasi sempre la prima cosa da sovrascrivere immediatamente con nuovi dati per efficienza.

4
djsumdog

Una cosa che mi piace aggiungere al mio .bashrc è una funzione di copia e rimozione. Qualcosa di simile a:

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

Ma devi prendere l'abitudine di digitare cprm non rm.

Ovviamente dovrai mantenere l'area eliminata se hai spazio su disco limitato.

2
Deano

Se vuoi davvero una funzione di annullamento, usa il controllo del codice sorgente. Subversion in realtà funziona molto bene su una macchina a singolo utente. Lo uso per controllare tutti i miei file personali sul mio sistema di casa. Sembra eccessivo, fino al disastro, uno script canaglia o un errore di battitura a riga di comando.

2

GitFS è un file system basato su Fuse, che ha calcolato automaticamente diffs tra le versioni e consente di ripristinarle/esplorarle.

Pagina Web: https://www.presslabs.com/gitfs

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

1
test30