Быстрый поиск процессов, держащих удалённые файлы

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

linuxlsoftruncate

👁 В Linux часто возникает странная ситуация: ты удалил большой лог или файл, но место на диске не освободилось. Обычно это происходит потому, что процесс всё ещё держит открытый файловый дескриптор. Файл уже удалён из файловой системы, но ядро продолжает хранить его, пока процесс не закроет дескриптор.

📝 Поиск процессов, удерживающих удалённые файлы

Чтобы найти такие процессы, можно использовать lsof. Ключ +L1 показывает файлы, у которых количество ссылок меньше 1, то есть они уже удалены, но всё ещё используются процессом. В выводе будет видно PID процесса, пользователя и размер файла. Очень часто так обнаруживаются висящие логи, которые продолжают занимать десятки гигабайт.

sudo lsof +L1

📝 Освобождение места без остановки сервиса

Если перезапуск сервиса нежелателен, можно очистить файл через файловый дескриптор процесса в /proc. Здесь 12345 — PID процесса, а 4 — номер дескриптора из вывода lsof. Это обнуляет файл, и место на диске сразу освобождается.

sudo truncate -s 0 /proc/12345/fd/4

❗️ Это часто спасает прод-серверы, когда диск внезапно заполняется логами, а перезапуск сервисов делать нельзя. Главное — сначала убедиться, что это действительно удалённый файл, а не активные данные.

tags: #linux #файлы #полезно

🧭 @recura_tech 🌐 VK 🌐 MAX

Скриншот карточки с командами для поиска и очистки удалённых файлов в Linux: пример sudo lsof +L1 и sudo truncate -s 0, с логотипом RECURA.
Пример: команды lsof +L1 и truncate для освобождения места без перезапуска сервиса.

Читайте так же