Как известно, файл можно удалить, пока кто-то его открыл и из него читает. В этом случае уже открытый файловый дескриптор все еще доступен после удаления файла, и из него можно спокойно читать.
Можно попытаться и восстановить доступ к удаленному файлу: найти его в
/proc/<pid>/fd/<fd> и скопировать. Но можно ли обойтись без копирования, а просто восстановить хардлинк на него в файловой системе?Известно, что ссылка на открытый файл в
/proc отображается как символьная ссылка, но на самом деле символьной ссылкой не является. Так, для открытого удаленного файла stat будет выглядеть примерно так:$ stat /proc/42002/fd/3Теперь попробуем создать хардлинк. Сначала попробуем воспользоваться простой командой
Файл: /proc/42002/fd/3 -> /home/gepardo/tmp/q.txt (deleted)
Размер: 64 Блоков: 0 Блок В/В: 1024 символьная ссылка
Устройство: 00h/00d Инода: 000000 Ссылки: 1
Доступ: (0500/lr-x------) Uid: ( 1000/ gepardo) Gid: ( 1000/ gepardo)
Доступ: 2022-11-03 20:46:09.224688879 +0300
Модифицирован: 2022-11-03 20:46:02.440682242 +0300
Изменён: 2022-11-03 20:46:02.440682242 +0300
Создан: -
ln:$ ln -T /proc/42002/fd/3 w.txtНе получилось. Но мы непременно попробуем еще в следующем посте :)
ln: не удалось создать жёсткую ссылку 'w.txt' => '/proc/42002/fd/3': Неверная ссылка между устройствами