Linux, работа с открытыми файлами

Материал из sysadm
Перейти к навигации Перейти к поиску

Ссылки по теме

Для просмотра открытых файлов в 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 номер может сопровождаться дополнительным символом, для указания на файл нужен только номер.