Dove vanno i file quando viene emesso il comando rm?


98

Recentemente ho fatto accidentalmente rmsu una serie di file e mi ha fatto pensare dove finiscono esattamente questi file?

Vale a dire, quando si lavora con una GUI, i file eliminati vanno nel Cestino. Qual è l'equivalente rme c'è un modo per annullare un rmcomando?


3
ecco un possibile duplicato. annulla su linux . Ma non sono davvero sicuro che sia dove i file vanno piuttosto diversi da quelli c'è un modo per annullare.
xenoterracide,

Risposte:


120

Da nessuna parte, sparito, svanito. Bene, più specificamente, il file viene scollegato. I dati sono ancora presenti sul disco, ma il collegamento viene rimosso. In passato era possibile recuperare i dati, ma oggigiorno i metadati vengono cancellati e nulla è recuperabile.

Non c'è cestino per rm, né dovrebbe esserci. Se hai bisogno di un cestino, dovresti usare un'interfaccia di livello superiore. C'è un'utilità da riga di comando trash-clisu Ubuntu, ma la maggior parte delle volte i file manager della GUI come Nautilus o Dolphin sono usati per fornire un cestino standard. Il cestino è standard stesso. I file salvati in Dolphin saranno visibili nel Cestino di Nautilus.

I file di solito vengono spostati in un luogo come ~/.local/share/Trash/files/quando viene eliminato. Il rmcomando su UNIX / Linux è paragonabile a quello delsu DOS / Windows che elimina e non sposta i file nel Cestino. Un'altra cosa da capire è che lo spostamento di un file su filesystem come sul disco USB dall'unità disco fisso è in realtà 1) una copia dei dati del file seguita da 2) che scollega il file originale. Non vorrai che il tuo Cestino fosse riempito con queste copie extra.


4
Grazie mille per la chiara spiegazione. Non mi dispiace usare la CLI, devo solo fare un po 'più attenzione quando si usano i caratteri jolly. :)
boehj

16
Sarei cauto nell'usare qualcosa di simile libtrashper cambiare il comportamento di rm. Molti script usano rmper ripulire i file e non vuoi che vengano visualizzati nel Cestino. Raccomando di usare un comando dedicato come trashdal trash-clipacchetto. @pedro Dovrei aggiungere che una volta ho creato un file * nella mia directory home. Avevo citato accidentalmente * quando non dovevo crearlo, quindi ho deciso di rimuoverlo con rm * in modo nativo. Quando ho capito cosa ho fatto, ho rapidamente ucciso il comando, ma aveva già eliminato un numero di file nella mia home directory.
penguin359

4
È molto raro avere qualcosa come un cestino nella shell, quindi se lo aggiungi sul tuo computer locale e ti abitui o dipendi da esso nel tuo lavoro quotidiano. Puoi avere dei problemi quando usi un po 'dell'altro 99% di unix: s senza uno ...
Johan

3
Penso che il messaggio da portare a casa qui sia che devo smettere di fare CLI nelle prime ore e prestare maggiore attenzione.
Boehj,

2
Sulla stessa linea di quanto affermato da @Johan, RedHat era solito (ancora?) Impostare alias per comandi come cp, e mv, su cp -ie mv -idurante l'esecuzione come root. Ciò modifica il comportamento predefinito in modo che questi comandi chiedano sempre prima di sovrascrivere i file esistenti. Alcuni amministratori di sistema hanno raccomandato di rimuovere in modo specifico quegli alias in modo da non aspettarsi quel comportamento che potrebbe risultare letale su un altro sistema che segue il comportamento predefinito.
penguin359

11

Per ext3 / ext4, puoi provare a recuperare file usando strumenti come extundelete o ext3grep , o persino andare a fare confusione con le strutture di basso livello manualmente (non per i deboli di cuore); per molti filesystem, puoi provare a cercare i blocchi non ancora sovrascritti secondo determinati schemi (ad es. magicrescue può cercare, tra le altre cose, le intestazioni JPEG). Si noti che questi utilizzano l'euristica per recuperare i file dai metadati lasciati indietro, quindi il recupero completo non è garantito - è più una scommessa dell'ultima possibilità (poiché quelli richiedono che alcune tracce dei file rimangano nel journal e che i blocchi non sono stati ancora sovrascritti).

Quindi, a tutti gli effetti, i file rimossi con rmsono spariti: potresti provare la negromanzia offerta da questi strumenti, ma non dipenderne: questi sono gli strumenti da provare quando tutto il resto fallisce. Meglio scavare i tuoi ultimi backup (hai fatto i backup, giusto? Oh bene, vivi e impara ...).


2
Per dati di testo di alto valore, puoi sempre utilizzare qualsiasi strumento per scopi generici (anche emacs o perl) per esaminare il "dispositivo non elaborato" per il disco che conteneva il file rimosso e cercare stringhe note; Ho recuperato documenti Word per le persone in questo modo; perdono il mark-up, ma possono recuperare la maggior parte del testo. Ovviamente si tratta di un ripristino di emergenza, non di "Annulla".
alexis,


8

Per quanto riguarda l'annullamento degli effetti di rm:

Dato che la maggior parte dei filesystem rimuove solo il riferimento ai dati e indica che i blocchi sono liberi, puoi provare a localizzare i tuoi dati leggendo direttamente dal dispositivo. Con un po 'di fortuna i blocchi contenenti i tuoi file non sono stati rivendicati per qualcos'altro.

Ciò presuppone che tu abbia qualcosa di abbastanza unico da cercare, che hai rootsul sistema e immagino che mettere insieme tutto ciò che si estende su più di un blocco di file system (probabilmente 4k) potrebbe finire per essere piuttosto laborioso se il file system non è riuscito mettere i file in blocchi contigui.

Ho recuperato con successo il contenuto di un paio di file di testo semplice eseguendo stringhe sul dispositivo su cui si trovava il file system e usando la grepricerca di qualcosa da quei file con un ampio contesto ( -C). (E poco dopo quell'incidente, la società ha deciso di spendere alcune risorse per l'implementazione dei backup)


È leggermente più complicato, ad esempio ext3 azzerando i puntatori di blocco nell'inode, ma sì, la ricerca diretta dei file potrebbe funzionare, se sono abbastanza piccoli o allocati in un blocco contiguo. Questo a volte viene chiamato intaglio di file e ci sono strumenti come magicrescuequello che cercano di trovare immagini o suoni con i loro modelli distintivi.
Piskvor,

6

Ogni volta che si elimina un file utilizzando il rmcomando, i dati del file non vengono mai eliminati. In altre parole, i blocchi nel file system che contengono dati sono ancora lì.

Quello che succede è quando si esegue il rmcomando, il sistema contrassegna l'inode appartenente a quel file come inutilizzato e anche i blocchi di dati di quel file come inutilizzati (ma non cancellati). Tuttavia, ext3azzera la maggior parte dei campi nell'inode, quando un file viene eliminato.

Questa normale marcatura di non utilizzata viene eseguita per la velocità ... Altrimenti per l'eliminazione ci vorrà un po 'più di tempo. Ecco perché potresti aver notato che l'eliminazione anche dei file di grandi dimensioni è più veloce (puoi recuperare i dati se quei blocchi di dati non vengono sovrascritti).

Ulteriori informazioni: Inode Structure , Come funziona la cancellazione dei file


... a meno che il file non sia esplicitamente contrassegnato con l' chattr +sattributo ("shred"). Indica al filesystem di sovrascrivere in modo specifico questo file con zero alla cancellazione. Solo alcuni filesystem supporteranno tale attributo.
telcoM,

3

Nei filesystem in stile Unix (incluso su Linux), i file non si trovano realmente "in" un determinato posto. Al contrario, il sistema utilizza collegamenti fissi per indicare parti di ciò che equivale a un grande blocco di dati. Quindi quando crei un file, crei anche il suo primo hardlink: quello che risiede effettivamente nel punto in cui hai "salvato" il file. Se si creano più collegamenti, quindi per quanto ne sa il sistema, il file esiste effettivamente in più punti contemporaneamente.

Quando si "elimina" un file, in genere si elimina solo il collegamento reale esistente nel punto specificato. Questo è il motivo per cui viene chiamata la chiamata di sistema per eliminare i file unlink(). Il sistema non eliminerà effettivamente il file fino a quando non vi saranno più collegamenti fissi. Ma una volta che l'ultimo hardlink viene distrutto, lo sono anche i dati.

Quindi, dove vanno i file che elimini? Se ci sono ancora hardlink, i loro file sono ovunque siano i hardlink che non hai eliminato. Se non ci sono collegamenti fissi, i file sono spariti.


0

Guarda anche in ~ / .snapshot se il file è stato rimosso di recente.


4
Funzionerà solo se hai qualche filesystem magico che fornisce quella funzione (come una NetApp) o se stai usando una versione speciale di rm.
Mattdm
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.