Восстановить файл, который в системе удален, но еще открыт каким-то процессом, можно при помощи набора утилит Sleuth Kit (www.sleuthkit.org).
1. нужно узнать номер иноды, которую имеет удаленный открытый файл:
~> lsof +aL1 /
Вместо / нужно указать раздел, где был файл (или поочередно запускать на все разделы, если не знаете, в каком находится открытый файл. Пример вывода:
~> lsof +aL1 /home COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME less 29154 root 4r VREG 0,87 8 0 33043586 /home (/dev/ad0p7)
2. используйте утилиту icat, которая откроет файл по номеру иноды:
~> icat -r /dev/ad0p7 33043586 > /path/to/new-filename
Если вы знаете имя каталога, где открыт файл, его имя можно получить непосредственно из каталога (пока файл открыт и не удален окончательно):
cat /home/work | strings
/home/work — это каталог. Но из полученной белиберды еще нужно удалить символы вида “^X” и имена существующих файлов. Более элегантный способ:
~> ls -1ai /home/ 33044046 work/ ~> fls -dF /dev/ad0p7 33044046 r/r * 33043586(realloc): testme
В первой команде я узнал номер иноды каталога /home/work, затем вывел все удаленные файлы. testme – тот самый удаленный файл, открытый в less’е.
/home/ports/sysutils/sleuthkit /home/ports/sysutils/lsof