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