Обычно, когда редакторы сохраняют файлы, они удаляют или обрезают до 0, освобождая таким образом выделенное пространство, а затем записывают, что выделяет новое пространство. Это приводит к тому, что файловая система помещает данные в совершенно другое физическое место. Так что ваша идея может не сработать.
Вы можете получить физическое местоположение файла с помощью filefrag
или hdparm --fibmap
, а затем использовать dd
для непосредственного чтения этого физического местоположения. Я описал этот процесс в другом контексте здесь: /unix//a/85880/30851
В вашем случае, скорее всего, вам нужен общий подход для поиска текстовых данных ... что-то вроде:
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings
будет искать последовательные данные ASCII (также поддерживает некоторые другие кодировки, не уверен насчет UTF-8. Если это код или английский, вам это не понадобится), а также выведет смещение в том месте, где оно было найдено.
text snippet
должен быть точным, уникальным образцом текста, который вы помните, находясь в той части файла, которую вы ищете [в одну строку]. (Если вы точно не знаете, вместо этого вы можете использовать регулярные выражения.)
-n 12
это минимальная длина, которую strings
нужно искать. 12
должна быть длина вашей text snippet
. Этот параметр является необязательным, если он предусмотрен, что может помочь strings | grep
немного быстрее.
Чтение всего раздела займет много времени, но в случае успеха у вас будет смещение, к dd
которому вы можете обратиться, чтобы захватить общую область, а затем удалить вещи, которые не принадлежат.
Я ничего не делал в этом каталоге с тех пор
Если ваш каталог не является точкой монтирования ... большинство файловых систем на самом деле не резервируют место "на каталог", поэтому ... любая запись во всей файловой системе может перезаписать бит, который вы ищете. В ситуации восстановления данных вы обычно переключаете все это в режим только для чтения.
strings
будет только найти некоторые части файла, если вам не повезло.