Зазвичай, коли редактори зберігають файли, вони видаляють або скорочують до 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ви знайдете лише деякі частини файлу, якщо вам не пощастить.