Восстановление удаленных файлов в Linux возможно сразу после удалению из-за принципов работы операционной системы с файлами. Возможно сделать это за счет файловых дескрипторов, хранящих информацию о процессе и сами данные.
Файл в Linux является просто ссылкой на файловый дескриптор (inode). Одновременно файл можно открыть и работать с ним используя несколько утилит, это будут разные процессы, использующие один дескриптор.
Дескриптор при этом будет сохраняться пока все процессы не завершат свою работу и не освободят его. После этого операционная система сможет использовать блоки памяти для других задач.
Область диска перезапишется и восстановление, оставаясь по-прежнему возможным, будет представлять собой уже очень нетривиальную задачу.
echo 'Test' > ~/test.txt
less ~/test.txt
Фактически это означает, что мы продолжаем использовать файл, заходим другой консолью и удаляем его
rm ~/test.txt
ls ~ | grep test.txt
В выводе пусто, значит файла нет
Найдем номер процесса и дескриптора в котором хранится информация
lsof | grep less
…
less 24160 admin 4r REG 8,3 5 16260117 /home/admin/test.txt
Ценность здесь представляют вторая и четвертая колонки. Во второй PID, в четвертой — fd или файловый дескриптор
cat /proc/24160/fd/4 > ~/test2.txt
cat ~/test2.txt
Test
Пример приведен на скриншоте:
Содержимое файла возвращено к состоянию до удаления. Это самый простой пример того как проводится восстановление удаленных файлов в Linux.
Стоит отметить, что если less завершить, то файловый дескриптор он отпустит и настолько просто восстановить содержимое удаленных файлов не получится.
Читайте также про файловые дескрипторы и про управление процессами в Linux.