Короткий ответ
inode — структура метаданных файла (права, владелец, размер, указатели на блоки данных), не содержащая имени; при удалении файла, открытого процессом, запись в каталоге исчезает, но место освобождается только после того, как процесс закроет файловый дескриптор.
Как это работает подробнее
Имя файла в каталоге — это просто ссылка на номер inode; команда rm уменьшает счётчик ссылок на единицу, а ядро окончательно освобождает блоки данных, когда и счётчик ссылок, и счётчик открытых файловых дескрипторов становятся равны нулю.
Пример кода
commands.sh
lsof +L1 | grep deleted
# альтернативный вариант для конкретного процесса
lsof -p <PID> | grep deletedЧто использовать на практике
- Практика. это объясняет ситуацию, когда df показывает диск почти полным, а du по видимым файлам — почти пустым: нужно искать процессы, держащие удалённые файлы, через lsof с фильтром deleted, и либо перезапускать процесс, либо дожидаться штатной ротации логов.
Подводные камни
- Риск. Частая ошибка — пытаться освободить место, удаляя лог-файл, который пишет активный процесс, и удивляться, что df не показывает прироста свободного места сразу после rm.