lsof (List Open Files) — это утилита для Unix/Linux, которая показывает все открытые файлы и сетевые соединения. В Linux «файл» — это не только обычные файлы, но и каталоги, устройства, сокеты, каналы.
Основное назначение: понять, какой процесс держит файл, порт или ресурс занятым.
Синтаксис:lsof [опции] [файл | путь | порт | PID]
*Без аргументов lsof показывает список всех открытых файлов в системе.
Основные опции:
| Опции | Описание |
|---|---|
| -p <PID> | Файлы, открытые процессом с указанным PID |
| -u <user> | Файлы, открытые процессами пользователя |
| -c <name> | Процессы с указанным именем |
| -i | Сетевые соединения (TCP/UDP) |
| -i :<port> | Кто использует указанный порт |
| +D <dir> | Все файлы, открытые в каталоге (рекурсивно) |
| +d <dir> | Все файлы, открытые в каталоге (не рекурсивно) |
| -t | Выводит только PID (удобно в скриптах) |
| -nP | Не делать DNS-резолвинг и не заменять номера портов на имена сервисов (ускоряет работу) |
Примеры:
#Кто слушает порт 80
lsof -i :80
#Все сетевые соединения
lsof -i
#Все открытые файлы процесса с PID 1234
lsof -p 1234
#Все процессы пользователя nginx
lsof -u nginx
#Кто "держит" конкретный файл
lsof /var/log/syslog
#Найти процессы, которые "держат" удалённые (но не освобождённые) файлы
lsof | grep deleted
#Получить только PID процесса, занявшего порт 5432
lsof -t -i :5432