Linux, работа с открытыми файлами
Ссылки по теме
Для просмотра открытых файлов в Linux используется команда lsof
.
Если диск переполнен, но сумма всех видимых файлов значительно меньше его объема, то причина может быть в удаленных, но все еще открытых файлах.
Если удалить открытый файл, его не будет видно в файловой системе, но от этого он не перестанет быть открытым и не освободит дисковое пространство. Команда lsof показывает такие файлы с меткой (deleted)
.
Найти эти файлы можно так:
lsof | grep "(deleted)"
Чтобы файл окончательно удалился и освободил дисковое пространство, необходимо его закрыть. Обычно для этого необходимо остановить или снять процесс, который его держит.
Если процесс обслуживает тысячи клиентов, то можно сделать архив файла и обнулить содержимое не останавливая процесс. Место занимаемое этим файлом на диске будет освобождено.
# архивация без удаления исходного файла gzip -c /path/to/file > /path/to/file.gz # обнулить содержимое truncate -s 0 /path/to/file # альтернативный способ обнулить содержимое cat /dev/null > /path/to/file
Если открытый файл удален и его не видно в файловой системе, то указать на него можно так /proc/<pid>/fd/<fd>
. Информацию о <pid> и <fd> можно получить из соответствующих полей вывода команды lsof
. В поле FD номер может сопровождаться дополнительным символом, для указания на файл нужен только номер.