it-swarm.it

Dove vanno i file quando viene emesso il comando rm?

Recentemente ho accidentalmente fatto rm su 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 di rm ed esiste un modo per annullare un comando rm?

108
boehj

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 esiste un cestino per rm, né dovrebbe esserlo. Se hai bisogno di un cestino, dovresti usare un'interfaccia di livello superiore. C'è un'utilità della riga di comando in trash-cli su Ubuntu, ma la maggior parte delle volte i file manager della GUI come Nautilus o Dolphin vengono utilizzati per fornire un cestino standard. Il cestino è standard stesso. I file salvati in Dolphin saranno visibili nel Cestino di Nautilus.

I file vengono generalmente spostati in un luogo come ~/.local/share/Trash/files/ quando viene eliminato. Il comando rm su UNIX/Linux è paragonabile a del su DOS/Windows che cancella e inoltre 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.

126
penguin359

Per ext3/ext4, puoi provare a recuperare file usando strumenti come extundelete o ext3grep , o persino andare messing con le strutture di basso livello - manualmente (non adatto ai 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 intestazioni JPEG, tra l'altro). 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 rm sono spariti - potresti provare la negromanzia che offrono questi strumenti, ma don non dipende da questo: 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 ...).

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.

Questo presuppone che tu abbia qualcosa di abbastanza unico da cercare, che hai root sul sistema e immagino che mettere insieme tutto ciò che si estende su più di un blocco di file system (probabilmente 4k) potrebbe finire piuttosto laborioso se il il file system non è riuscito a 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 grep cercando qualcosa da quei file con un contesto ampio (-C). (E poco dopo quell'incidente, la società ha deciso di spendere alcune risorse per l'implementazione dei backup)

8

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

Ciò che accade è quando si esegue il comando rm, 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). Però ext3 azzera 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 '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

6
sarath

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 la chiamata di sistema per eliminare i file si chiama 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.

3
The Spooniest

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

0
Andy