Di solito quando gli editor salvano i file, vengono eliminati o troncati su 0, liberando così spazio allocato e quindi scrivendo, che alloca nuovo spazio. Ciò comporta che il filesystem inserisca i dati in una posizione fisica completamente diversa. Quindi la tua idea potrebbe non funzionare.
È possibile ottenere la posizione fisica di un file utilizzando filefrag
o hdparm --fibmap
, quindi utilizzare dd
per leggere direttamente quella posizione fisica. Ho descritto questo processo in un contesto diverso qui: /unix//a/85880/30851
Nel tuo caso è più probabile che tu abbia bisogno dell'approccio generale per trovare dati testuali ... qualcosa come:
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings
cercherà dati ASCII consecutivi (supporta anche alcune altre codifiche, non sono sicuro di UTF-8. Se è codice o inglese non ne avrai bisogno) e stamperà anche l'offset in cui è stato trovato.
text snippet
dovrebbe essere un esempio di testo esatto e unico che ricordi di essere nella parte del file che stai cercando [in una sola riga]. (Se non lo sai esattamente, puoi invece grep con espressioni regolari.)
-n 12
è la lunghezza minima che strings
cercherà. 12
dovrebbe essere la lunghezza del tuo text snippet
. Questo parametro è facoltativo, se fornito può aiutare strings | grep
ad andare un po 'più veloce.
Ci vorrà molto tempo per leggere l'intera partizione, ma in caso di successo, avrai un offset a cui puoi alimentare dd
per afferrare l'area generale e quindi rimuovere elementi che non appartengono.
Da allora non ho fatto nulla in quella directory
Se la tua directory non è un mountpoint ... la maggior parte dei filesystem non riserva davvero spazio "per directory", quindi ... tutte le scritture nell'intero filesystem potrebbero sovrascrivere il bit che stai cercando. In una situazione di recupero dei dati, di solito si passa alla modalità di sola lettura.
strings
individuerà solo alcune parti del file a meno che tu non sia estremamente fortunato.