Рассмотрим такую ситуацию. У вас имеется файл, который был удален, его требуется восстановить. Есть вариант, восстановить файл когда он удерживается каким-либо процессом.

Для примера создаем скрипт, который будет работать в фоне и удалим этот скрипт, чтобы попробовать его восстановить.

#!/bin/bash
sleep 30000
exit

Дадим права на исполнение и запустим его

chmod a+x script.sh && ./script.sh

Теперь удаляем rm -f ./script.sh

Теперь попробуем найти данный файл в процессах. Его можно найти через htop или вот такой командой lsof -c script.sh

В выводе нас интересует PID - идентификатор процесса и FD - дескриптор, ассоциированный со скриптом:

script.sh 17871 root 255r REG 8,1 30 8400545 /tmp/script.sh (deleted)

Читаем содержимое файла скрипта. cat /proc/17871/fd/255

И получаем содержимое нашего скрипта. Можем записать вывод обратно в файл

cat /proc/17871/fd/255 > new_script.sh

Перейдем к нашему фоновому процессу с помощью команды fg

И отключим CTRL+C

Стоит помнить, что в Linux сначала удаляется имя файла. Сам же файл удаляется, только после того, как счётчик ссылок станет равен нулю и будут закрыты все файловые дескрипторы, ассоциированные с файлом.

То есть получается, после вызова команды удаления файла и еще рабочих ссылках на него файл все еще будет занимать физическое пространство на диске. Место освободится уже после того, как счетчик будет равен нулю.

Таким методом можно восстановить почти любые файлы. Подобной ситуации в боевых условиях мне не приходилось сталкиваться, надеюсь, что и вам не придется. Еще одним решением может послужить создание корзины для сервера.

Анонсы и еще больше информации в Telegram-канале