- Почему rm не удаляет данные сразу?
- Шаг 1: Находим процесс, который держит удалённый файл
- Шаг 2: Восстанавливаем файл через /proc
- Удобный bash-скрипт для быстрого восстановления (рекомендуется)
- Что делать, если несколько процессов держат файл?
- Профилактика случайного удаления логов
- Когда метод /proc уже не поможет?
- FAQ
- Заключение
Как восстановить удалённый файл в Linux, если процесс продолжает в него писать (2026)
Вы случайно удалили файл журнала (*.log), а процесс (nginx, rsyslog, PostgreSQL, Java-приложение и т.д.) продолжает в него писать. В ls файла уже нет, но данные никуда не исчезли. Их можно быстро восстановить, пока процесс не завершился.
Этот метод работает на всех популярных дистрибутивах: Ubuntu,Debian,Astra Linux, CentOS, Rocky Linux, AlmaLinux, Red Hat, Alt Linux и других.

Почему rm не удаляет данные сразу?
Команда rm лишь убирает запись из каталога и уменьшает счётчик жёстких ссылок (nlink). Пока хотя бы один процесс держит файл открытым, ядро Linux сохраняет inode и все данные на диске.
Это «окно восстановления» особенно велико для логов веб-серверов, баз данных и систем мониторинга.
Шаг 1: Находим процесс, который держит удалённый файл
Установите утилиту lsof, если её нет:
# Debian / Ubuntu / Astra Linux
sudo apt update && sudo apt install lsof -y
Или
# Rocky / Alma / CentOS / RHEL / Fedora / Alt
sudo dnf install lsof -y
Поиск удалённых файлов:
sudo lsof +L1 | grep deleted
или более точно по имени:
sudo lsof +L1 | grep -E 'access.log|error.log|syslog'
Пример вывода:
nginx 1423 www-data 4w REG 253,1 204800 0 131074 /var/log/nginx/access.log (deleted)
Важные столбцы:
- 2-й — PID процесса
- 4-й — файловый дескриптор (например 4w)
- Последний — путь к файлу
Шаг 2: Восстанавливаем файл через /proc
# Пример для nginx
sudo cp /proc/1423/fd/4 /var/log/nginx/access.log.recovered
Проверьте результат:
ls -lh /var/log/nginx/access.log.recovered
Если процесс продолжает писать логи, после восстановления рекомендуется перезапустить сервис, чтобы он создал новый правильный файл:
sudo systemctl restart nginx
Удобный bash-скрипт для быстрого восстановления (рекомендуется)
Добавьте функцию в ~/.bashrc или /etc/profile.d/recover.sh:
recover_deleted() { local filename="$1" local output="${2:-/tmp/recovered_$(basename "$filename")}" local result result=$(sudo lsof +L1 2>/dev/null | grep -i "$filename" | head -n1) if [[ -z "$result" ]]; then echo "❌ Процесс, открывший файл $filename, не найден." return 1 fi local pid fd pid=$(echo "$result" | awk '{print $2}') fd=$(echo "$result" | awk '{print $4}' | tr -d 'rwu') echo "✅ Найден процесс: PID=$pid, FD=$fd" sudo cp "/proc/${pid}/fd/${fd}" "$output" && \ echo "✅ Файл успешно восстановлен: $output" }
Использование:
recover_deleted "/var/log/nginx/access.log" "/var/log/nginx/access.log.recovered"
Что делать, если несколько процессов держат файл?
sudo ls -lh /proc/*/fd/* 2>/dev/null | grep -E 'log.*deleted'
Выбирайте дескриптор с самым большим размером.
Профилактика случайного удаления логов
- Жёсткая ссылка (самый простой способ):
ln /var/log/nginx/access.log /var/log/nginx/access.log.backup
- Используйте chattr +i для важных файлов (требует прав root).
- Настройте ротацию логов через logrotate с правильными параметрами.
Когда метод /proc уже не поможет?
Если процесс завершился, то данные могут быть перезаписаны. Тогда остаются инструменты:
- testdisk / photorec
- extundelete (только для ext4)
- foremost, scalpel
Важно: никогда не восстанавливайте на смонтированной в режиме rw файловой системе.
FAQ
Можно ли восстановить файл после rm в Linux?
Как найти удалённый файл в Linux?
Что делать, если при копировании из /proc появляется Permission denied?
Работает ли способ на Astra Linux, Red OS, Ubuntu, CentOS и Rocky Linux?
Что будет, если процесс уже завершился?
Можно ли восстановить несколько удалённых файлов сразу?
Безопасно ли копировать файл из /proc//fd/?
Как защитить логи от случайного удаления?
Нужно ли перезапускать сервис после восстановления файла?
Восстановится весь файл или только часть?
Актуален ли этот метод восстановления в 2026 году?
Заключение
Знание механизма /proc/<PID>/fd/ это один из самых полезных «чит-кодов» Linux-администратора. Метод работает мгновенно и спасает в продакшене десятки раз.
Популярные поисковые запросы по теме:
- восстановить удалённый файл linux
- rm удалил лог файл процесс пишет
- lsof deleted
- восстановление через /proc/fd
Сохраните статью или добавьте функцию recover_deleted и в следующий раз, когда в 3 часа ночи упадёт лог, вы решите проблему за минуту.
Хотите версию статьи под конкретный дистрибутив (Astra, Rosa, Red OS, Ubuntu Server и т.д.), то напишите в комментариях.
Понравилась статья?
Помогите Setiwik.ru создавать больше глубоких обзоров и новостей. Один клик и ваш вклад помогает держать серверы включёнными и авторов мотивированными!
Поддержать проектСпасибо, что вы с нами!




