Annulla il comando cestino di Linux


24

È possibile annullare le operazioni eseguite in un terminale, ad esempio l'eliminazione dei file rm?

Soluzioni ottenute:

  1. aliasing
  2. Utilità di ripristino
  3. Utilità di backup
  4. LibTrash
  5. Versioning (FUSE)

1
On rm: Scollega un file da esso inode. La domanda: "Dove vanno i file quando rmviene emesso il comando" -> unix.stackexchange.com/questions/10883/… potrebbe anche essere una buona lettura per te.
Erch

Risposte:


62

Non esiste un "annullamento" generale per ogni operazione nel terminale. Se si desidera ripristinare un file dopo l'uso, rmè necessario esaminare il software di recupero.

Un'opzione per impedirti di errori futuri è quella di creare aliascomandi alternativi per rimuovere i file. Aggiungili al tuo ~/.bashrce prendi l'abitudine di usarli invece di rm.

  1. alias rmi = 'rm -i'

    Se lo usi rmi, ti verrà richiesta la conferma di future eliminazioni. Cerca di evitare di sviluppare l'abitudine di premere yimmediatamente dopo aver emesso un rmicomando, in quanto ciò annullerebbe lo scopo.

  2. Puoi anche spostare i file eliminati dal trshcomando nel terminale nel cestino (su KDE e Gnome):

    alias trsh='mv --target-directory="$HOME/.Trash"'
    

    Se lo usi trsh, avrai una funzionalità "undelete" limitata. Attenzione

    trsh dir1/file1 dir2/file1
    

    può comunque causare una perdita di dati irrecuperabile.


3
+1 per una risposta molto migliore della mia =)
The How-To Geek,

9
il secondo alias è molto, molto intelligente. +1.
LiraNuna,

3
trash () {mv $ @ ~ / .Trash; } # funzione bash, non un alias. Cambiare il comportamento previsto di rm è una cattiva idea, IMHO.
Richard Hoskins,

20
Il rischio con aliasing rma rm -iè che ci si abitua alla rete di sicurezza che ti dà. Quindi vai su un'altra macchina, che non ha questo alias ...
Dentrasi,

3
Per i motivi menzionati da Richard e Dentrasi, preferisco creare una funzione personalizzata o alias rmi-> rm -i. È davvero un errore semplicemente intralciare un programma esistente aliasando su di esso.
Telemaco,

6

Non esiste un cestino per la riga di comando.

Potresti provare alcune delle varie utility non ripristinate, ma non c'è garanzia che funzionino.


Sì, c'è un cestino per la riga di comando. Vedi trash-cli in un'altra risposta.
Sparhawk,

Trash-cli è così buono :) e usa Trashlib, meglio che spostare semplicemente i file.
m3nda,

5

Puoi usare trash-cli se usi KDE quando esegui una GUI. Questa è l'utilità della riga di comando per eliminare / ripristinare usando i servizi di cestino di KDE.


1
trash-cli fornisce anche funzioni con il cestino GNOME ed è progettato per fornire compatibilità con le opzioni rm (per l'aliasing).
Andrea Francia,

Non dimenticare di fare in alias rm=trashmodo che le tue tipiche incasature della riga di comando siano dotate di pulsanti Annulla.
Ryan C. Thompson,

Penso che alias rm=trashsia potenzialmente pericoloso, se c'è qualche possibilità che un giorno userai il sistema di qualcun altro e dimenticherai (o ssh). Molto più sicuro abituarsi a scrivere trashinvece di rm.
Sparhawk,

4

Potresti creare rmun alias per il trashcomando (dovrai trashprima installarlo .) Aggiungi questo al tuo ~/.bashrc:

alias rm='trash'

Questo è preferibile alias rm='mv --target-directory=$HOME/.Trash'poiché ~ / .Trash NON è la cartella cestino per gnome. È meglio IMHO per trashcapire dove si trova la cartella cestino.

tra l'altro avrei pubblicato questo in un commento ma non ho abbastanza rappresentante.


5
+1 per "poiché ~ / .Trash NON è la cartella cestino per gnome." Tuttavia, rm non dovrebbe neanche essere aliasato nel cestino. Dovresti semplicemente usare spazzatura invece di rm se è quello che vuoi.
nagul,

È vero, ma per alcune persone le vecchie abitudini sono dure a morire.
Alvin Row,

'rmtrash' è un'altra opzione.
Itachi,

3

Altre due soluzioni tecniche non sono ancora state nominate:

  1. libtrash : una libreria dinamica che può essere precaricata nella shell che intercetta l'eliminazione / rimozione di syscalls e sposta invece i file in una cartella cestino (molto simile a un alias ma funziona per qualsiasi applicazione quando precaricato).
  2. Un file system di versioning. Se elimini (o modifichi, o copi, o ...) un file, puoi semplicemente tornare a un vecchio stato. Questo potrebbe essere fatto con un filesystem FUSE e uno dei suoi filesystem con versione .

3

C'è una domanda più grande qui che vale la pena affrontare. I comandi della shell non sono chiacchieroni (non ricontrollano quello che vuoi) e si aspettano che tu sappia cosa stai facendo. Questo è fondamentale per come sono progettati . È una funzionalità, non un bug.

Alcune persone si sentono macho quando usano tali comandi, che penso sia abbastanza sciocco, ma è importante capire i pericoli. Puoi fare molti danni in un terminale, anche se non sei root. Penso che probabilmente ti sia davvero importato rm, ma dal momento che hai detto "Possiamo annullare le operazioni fatte nel terminal", ho pensato che valesse la pena dirlo. La risposta generale è no, non puoi.


2

Opzione 1: vedere Ripristina file Linux da un file system ext2 . Questa pagina indica un programma, scritto da Sebastian Hetze della società LunetIX, che (come suggerisce il titolo) elimina di recente i file eliminati da un filesystem ext2. Esempio di utilizzo:

# undelete -d /dev/hdc3 -a 10

Avvertenze:

  • Il sito web originale è sparito. Il link sopra riportato è Internet Archive.
  • I siti sono in una miscela di inglese e tedesco.
  • Come detto sopra, lo strumento è progettato specificamente per il filesystem ext2. È improbabile che funzioni su qualsiasi altro tipo di filesystem; specialmente non quelli diversi dal ext N .

Opzione 2: ho rsnapshot (rsync) in esecuzione sul mio computer che rende le istantanee delle cartelle selezionate ogni ora. Lo fa in modo incrementale ogni ora, 2 ore o qualunque cosa tu dica a CRON di fare. Dopo un'intera giornata ricicla queste istantanee in un'istantanea giornaliera e dopo 7 giorni in un settimanale e così via. Questo mi rende in grado di tornare indietro nel tempo per circa un mese circa ogni ora! È abbastanza buono con lo spazio su disco in quanto crea collegamenti simbolici a file che non sono mai cambiati ...


Solo per chiarire, # 1 è specifico per i filesystem ext2. Non funzionerebbe su un filesystem ext3.
nagul,


1

Esistono utility non ripristinate per ext2, ma la maggior parte degli altri filesystem Linux sono bloccati nell'età della pietra e non hanno funzionalità di usabilità avanzate. Lo stato di cose triste considerando unità gigantesche con spazio sufficiente per non cancellare mai più un file è all'ordine del giorno.

Quindi sei bloccato con tre opzioni:

  1. Esegui il backup regolarmente, ad esempio con un comando come:

    rsync -axvRP --backup --backupdir=/backup/incr/$(date -I) /home/ /backup/root/

  2. Usa uno strumento di controllo della versione come gitper tutto il tuo lavoro. Mentre questo non proteggerà contro un matto rm -rche uccide il repository, proteggerà contro i problemi regolari in quanto si utilizzerà git rmnon crudo rm.

  3. Essere molto attenti e non si fidano troppo in rm -i, trash-clie gli amici, come la maggior parte dei dati si perde sul guscio si vuole non perdere accidentali rm, ma da tubi disguidati, i file di output digitate in modo errato, errate mve roba, vale a dire, le cose che si sovrascrivere i tuoi dati, non solo cancellarli.

Fai tutti e tre per la massima sicurezza.


È abbastanza divertente chiamare ext2 moderno. I filesystem più recenti usano formati su disco più complicati di ext2 / 3 e hanno dovuto rinunciare a posizioni facili da trovare dove si potevano trovare file da cancellare. Sono progettati per le persone che eseguono backup delle cose a cui tengono. A proposito, io uso sempre mv e cp -i, dal momento che normalmente non voglio ostruire nulla. Normalmente digito \ rm, perché ho anche rm alias di rm -i, ma non voglio rispondere alla sua domanda.
Peter Cordes,

0

controlla questo ... potrebbe essere utile http://artmees.github.io/rm/

supponi di averlo fatto

rm very_important_file

dal terminal. il recupero di questo file è un processo noioso e non sempre efficace

invece se hai usato lo script menzionato. non devi preoccuparti di questo perché

rm very_important_file
mv very_important_file ~/.Trash/

sono equivalenti. lo script gestisce più casi e non altera affatto il sistema rme questo perché è inserito nella cartella bin dell'utente locale in modo da ombreggiare il sistema rm e tuttavia non influire su di esso o disabilitarlo

questo è un approccio aliasing raffinato ma senza perdere alcuna funzionalità


1
Sarebbe bello se potessi aggiungere qualche spiegazione su ciò che fa e su come si applica alla domanda, magari aggiungere un esempio, ecc.
slhck


0

Per me (opensuse balzo 42.2, NTFS pendrive) PhotoRec - anche dai testdiskcreatori - ha funzionato :) Tuttavia non ha recuperato i nomi dei file.

PhotoRec è un software di recupero dei dati di file progettato per recuperare file persi, inclusi video, documenti e archivi da dischi rigidi, CD-ROM e immagini perse (da cui il nome di Photo Recovery) dalla memoria della fotocamera digitale. PhotoRec ignora il file system e segue i dati sottostanti, quindi continuerà a funzionare anche se il file system dei file multimediali è stato gravemente danneggiato o riformattato.

L'ho installato usando repository standard in openSUSE

istruzione


1
Benvenuto in Super User! Leggi Come raccomandare il software per informazioni minime richieste e suggerimenti su come raccomandare il software su Super User. Per mantenere la risposta utile anche se i collegamenti forniti interrompono questi dettagli, è necessario modificarli nella risposta.
Dico Reinstate Monica
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.