notes/os/unix/monitoring/lsof.txt
Ihar Hancharenka ee79d210fa m
2024-06-08 19:47:43 +03:00

45 строки
3.3 KiB
Plaintext

2021
https://www.tecmint.com/10-lsof-command-examples-in-linux/
https://bookflow.ru/10-primerov-komand-lsof-v-linux/
*************************************************************************************************
Утилиту 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 TCP@172.29.139.228
▪️ Список TCP соединений конкретного пользователя:
# lsof -ai -u nginx
▪️ Помимо TCP, можно и UDP соединения смотреть:
# lsof -iUDP
Публикацию имеет смысл сохранить в закладки.