Abbiamo un annullamento in Linux?


Risposte:


53

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 con fusibili 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, sovversione, ...). Ci vuole un po 'di tempo per imparare, ma ripaga meravigliosamente a medio e lungo termine.


1
una buona alternativa potrebbe essere gitfs, che è in fase di sviluppo
test30

1
Bene, se elimini o sovrascrivi accidentalmente un file che non hai ancora messo in scena o commesso, anche un CVS non aiuta
xdevs23

14

Sfortunatamente no.


19
Non so che considero questo sfortunato ... Ci vorrebbero alcune risorse per implementare un annullamento. Non mi piace nemmeno l' -iopzione rmabilitata per impostazione predefinita. I miei sistemi Unix non dovrebbero tenermi per mano.
xenoterracide,

5
-i è abilitato di default ?! non la mia distribuzione, no signore!
Stefan,

9

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.


7

Non c'è annullamento nella riga di comando. È tuttavia possibile eseguire comandi come rm -ie 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 ~/.bashrco /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).


1
+1. solo per aggiungere qui. Dopo aver impostato gli alias sopra se in alcuni casi si desidera rimuovere direttamente senza il prompt "sei sicuro" è possibile utilizzare \ rm e \ mv per bypassare l'alias. puoi anche usare l'opzione -f.
Hemant,

2
mv -iviene richiesto solo quando sovrascriverà un file (il che lo rende utile e non odioso). Nella stessa ottica, alias cp='cp -i'.
Gilles 'SO- smetti di essere malvagio' il

8
Aliasing rm e mv è una pessima idea. (rm è peggio di tutto.) Non prendere l'abitudine di usare rm per dire rm -i - alla fine lo useresti da qualche parte dove l'alias non è definito e cancellerai qualcosa per sempre. Se ti piace essere invitato, prendi l'abitudine di usare rm -i sempre.
msakr,

Se ti piace essere richiesto, usa un alias con un nome diverso. Uso move = 'mv -i', copy = 'cp -i', symlink = 'ln -si' e installo un comando cestino da usare invece di rm. Uso ancora mv, cp e rm direttamente durante lo scripting, ma per uso interattivo questi alias sono utili.

@mahmoudsakr Hai perfettamente ragione, ho perso quel punto. Non ho nemmeno questi comandi aliasati. Aliasli come un comando diverso sembra l'opzione più sana!
vdboor,

4

Il motivo per cui i sistemi Linux / Unix non hanno un recupero è dovuto al 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 agli elenchi di inode (blocchi doppiamente collegati) e il decimo va 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 di Linux, quando si elimina qualcosa, è quasi sempre la prima cosa che viene immediatamente sovrascritta da nuovi dati per efficienza.


2

Se vuoi davvero una funzione di annullamento, usa il controllo del codice sorgente. Subversion funziona davvero 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.


1
rm -r .Tuttavia non ti proteggerà . ;)
Umang,

1
@Umang In realtà l'ho fatto una volta con Git, dove tengo un archivio locale e per caso rm -r project.git. Fortunatamente se si mantiene un'altra versione su un server remoto che è improbabile che accada
phunehehe

1
@phunehehe e chiunque abbia fatto +1 sul mio commento: siamo troppo abituati al DVCS per renderci conto che mi sbagliavo completamente. SVN si impegna nel repository (che non è il ramo). Così si sarà effettivamente protetti rm -r .. Davvero stupido da parte mia.
Umang,

2

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.


4
potresti accorciarlo a $ 1 ~ / cancellato / $ 1
Stefan

Sì, e sarà sovrascrivere un file 'nuovo Documento 1' con un altro 'nuovo Documento 1', se si ottiene la citazione giusta: "$1".
utente sconosciuto il

@userunknown: vuoi dire $ 1 nel codice di Deano e Stefan dovrebbe essere citato come "$ 1"?
Tim

@ Tim: Sì, lo faccio.
utente sconosciuto

Perché non spostare invece di cp e rm?
user1559897

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.