Утилиту lsof в дистрибутивах Linux чаще всего используют для просмотра открытых файлов. Я и сам так делаю, и много материалов на эту тему видел. Да и название у неё говорящее. Оно как раз образовано от фразы list open files.
Тем не менее, её можно использовать не только для этого.
▪ Но сначала про основную функциональность. Лично я чаще всего запускаю lsof для просмотра открытых файлов, которые удалили, но забыли закрыть файловый дескриптор. Например, наживую удалили лог nginx или docker и не перезапустили сервис. В итоге файла нет, а место он занимает. Такие файлы будет видно вот так:# lsof | grep '(deleted)'
или так:# lsof +L1
▪ Смотрим кем и что конкретно открыто из файлов в указанной директории:# lsof +D /var/log
▪ Смотрим открытые файлы конкретного пользователя:# lsof -u user
Часто бывает нужно быстро узнать, сколько файлов у него открыто, чтобы понять, если с ним проблема или нет:# lsof -u user | wc -l
А теперь то же самое, только наоборот исключим открытые файлы пользователя:# lsof -u^user | wc -l
Рассмотрим ситуацию, когда под пользователем плодятся процессы, которые открывают кучу файлов и нам всё это надо быстро прибить. Добавляем ключ -t к lsof, который позволяет выводить только PID процессов. И отправляем вывод в kill:# kill -9 `lsof -t -u user`
▪ Файлы, открытые конкретным процессом, для которого указан его PID. Очень востребованная функциональность.# lsof -p 94169
▪ А теперь немного того, что от lsof не ожидаешь. Список TCP соединений, причём очень наглядный и удобный для восприятия.# lsof -ni
▪ Смотрим подробную информацию о том, кто открыл 80-й порт:# lsof -ni TCP:80
▪ Список TCP соединений к конкретному IP адресу:# lsof -ni [email protected]
▪ Список TCP соединений конкретного пользователя:# lsof -ai -u nginx
▪ Помимо TCP, можно и UDP соединения смотреть:# lsof -iUDP
Публикацию имеет смысл сохранить в закладки.
#linux #terminal #perfomance
>>Click here to continue<<