Linux, работа с открытыми файлами: различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
| Строка 14: | Строка 14: | ||
# путь к открытому удаленному файлу | # путь к открытому удаленному файлу | ||
/proc/<pid>/fd/<номер_FD> | /proc/<pid>/fd/<номер_FD> | ||
| + | |||
| + | # размер открытого удаленного файла | ||
| + | du -Lsh /proc/<pid>/fd/<номер_FD> | ||
</pre> | </pre> | ||
Текущая версия на 21:51, 23 октября 2025
Ссылки по теме
Для просмотра открытых файлов в Linux используется команда lsof.
Если диск переполнен, но сумма всех видимых файлов значительно меньше его объема, то причина может быть в удаленных, но все еще открытых файлах.
Если удалить открытый файл, его не будет видно в файловой системе, но от этого он не перестанет быть открытым и не освободит дисковое пространство. Команда lsof показывает такие файлы с меткой (deleted).
Найти эти файлы можно так:
lsof | grep "(deleted)" # путь к открытому удаленному файлу /proc/<pid>/fd/<номер_FD> # размер открытого удаленного файла du -Lsh /proc/<pid>/fd/<номер_FD>
Чтобы файл окончательно удалился и освободил дисковое пространство, необходимо его закрыть. Обычно для этого необходимо остановить или снять процесс, который его держит.
Если процесс обслуживает тысячи клиентов, то можно сделать архив файла и обнулить содержимое не останавливая процесс. Место занимаемое этим файлом на диске будет освобождено.
# архивация без удаления исходного файла 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 номер может сопровождаться дополнительным символом, для указания на файл нужен только номер.