В основном такое бывает из-за невнимательности разработчиков сайтов (под разработчиками я в данном случае подразумеваю не только программиста, который мог не знать о нужном способе, но и, например, менеджера, который почитал, что тратить на это время слишком нецелесообразно): современные веб-технологии (например, Web Storage) позволяют сохранять и восстанавливать данные (в том числе данные форм) при почти любых обстоятельствах — вплоть до случайного закрытия браузера.
И, тем не менее, вы писали длинный текст именно там, где ничего для сохранения данных формы не сделано.
Можно ли теперь как-то восстановить данные, если вы не можете скопировать текст из формы и не можете отправить POST-запрос повторно?
Решение есть
Если дело происходит в Linux, то вы можете воспользоваться потрясающе удобным способом сделать дамп области памяти, которую использует браузер. Впервые я прочитал о применении этого метода для восстановления данных, потерянных в браузере, на superuser.com — одном из сайтов StackExchange. Это был ответ пользователя с именем Joey Adams на вопрос «How do I recover a form in Firefox *without* installing a plugin?».
Шаг 1
Убедитесь, что у вас установлен gdb (GNU Debugger). Вам понадобится утилита gcore, которая может делать дамп оперативной памяти, которую использует запущенный процесс с определённым PID.
Шаг 2
Вы ведь не закрывали браузер? В таком случае выясните номер процесса:
ps -e | grep firefox
Теперь запустите gcore, чтобы создать дамп памяти для этого процесса:
gcore номер_процесса
Если ptrace при попытке использовать gcore выдаёт ошибку (Operation not permitted
) — это означает, что в вашей системе процессы не могут обращаться к памяти других процессов, не являясь их дочерними процессами (даже при совпадении UID). Например, такую ошибку вы увидите в последних версиях Ubuntu, если вы не меняли соответствующее значение в файле /proc/sys/kernel/yama/ptrace_scope
. Вообще говоря, в данном случае совершенно необязательно что-то перенастраивать — вы можете просто запустить gcore от имени суперпользователя.
Шаг 3
В текущем каталоге при запуске gcore появляется файл core.номер_процесса (например, core.20727). Кстати, учитывайте, что размер файла может быть очень большим. Например, у меня он сейчас получился 934 MiB.
Теперь попробуйте с помощью grep проверить, есть ли в дампе нужные данные. Например, если в тексте вы упоминали браузер Safari, то вы можете искать по слову «Safari»:
grep 'Safari' core.20727
Если вы видите сообщение о том, что в файле есть совпадение (Binary file core.20727 matches
) — это очень хорошая новость, переходите к четвёртому шагу. Если совпадения не нашлось — вспомните, что ещё было в тексте, и попробуйте указать что-нибудь другое.
Шаг 4
Теперь остаётся извлечь из двоичного файла нужные вам куски с текстом.
Сделать это можно вот так:
grep -B 20 -A 20 -a 'Safari' core.20727 > /tmp/out
В данном случае вы сообщаете grep, что с данным двоичным файлом требуется работать как с текстом, а также что для каждого совпадения требуется вывести 20 предшествующих и 20 последующих строк.
Шаг 5
Теперь откройте получившийся файл и найдите в нём свой текст. Например, с помощью less /tmp/out
:
Всем приятного вечера. И не забывайте про Ctrl + S. 🙂
ссылка на оригинал статьи http://habrahabr.ru/post/169193/
Добавить комментарий