Добавить в корзинуПозвонить
Найти в Дзене

lsof - кто держит порт и открыл тот файл

Ситуация: пытаетесь запустить сервер, а он падает с "Address already in use". Порт занят, но кем? Или пытаетесь удалить файл, а система пишет "file is in use". Кто его держит? lsof (List Open Files) отвечает на оба вопроса. В Linux «всё есть файл» - сетевые сокеты, пайпы, устройства, обычные файлы. lsof показывает, какие процессы какие «файлы» открыли. Вариант 1 (Кто занял порт): классический кейс с запуском сервера. # Кто слушает 3000 порт? lsof -i :3000 # Вывод: COMMAND PID USER FD NAME # node 1234 user 23u IPv4 TCP *:3000 (LISTEN) Вариант 2 (Какой процесс держит файл): не даёт удалить папку или файл. # Кто использует файл лога? lsof /var/log/app.log # Кто работает в папке /home/user/project? lsof +D /home/user/project Вариант 3 (Все открытые файлы процесса): подозреваете конкретный процесс - смотрите, что он делает. # Все файлы, открытые процессом с PID 1234 lsof -p 1234 # Сеть, которую использует процесс lsof -p 1234 -i Вариант 4 (Кто использует удалённый файл): монтир

lsof - кто держит порт и открыл тот файл

Ситуация: пытаетесь запустить сервер, а он падает с "Address already in use". Порт занят, но кем? Или пытаетесь удалить файл, а система пишет "file is in use". Кто его держит?

lsof (List Open Files) отвечает на оба вопроса. В Linux «всё есть файл» - сетевые сокеты, пайпы, устройства, обычные файлы. lsof показывает, какие процессы какие «файлы» открыли.

Вариант 1 (Кто занял порт): классический кейс с запуском сервера.

# Кто слушает 3000 порт?

lsof -i :3000

# Вывод: COMMAND PID USER FD NAME

# node 1234 user 23u IPv4 TCP *:3000 (LISTEN)

Вариант 2 (Какой процесс держит файл): не даёт удалить папку или файл.

# Кто использует файл лога?

lsof /var/log/app.log

# Кто работает в папке /home/user/project?

lsof +D /home/user/project

Вариант 3 (Все открытые файлы процесса): подозреваете конкретный процесс - смотрите, что он делает.

# Все файлы, открытые процессом с PID 1234

lsof -p 1234

# Сеть, которую использует процесс

lsof -p 1234 -i

Вариант 4 (Кто использует удалённый файл): монтирование не отдаёт, а кто мешает?

# Процессы, использующие файлы на смонтированном диске

lsof /mnt/usb

# Обычно это оболочка, которая "стоит" в папке на этом диске

lsof нужен, когда обычные инструменты молчат. Команда не показывает ошибку, но что-то мешает. lsof показывает «что именно» и «кто».

Альтернатива:

# Когда точно знаем, что ищем сетевой порт. Быстрее и чаще установлена по умолчанию.

ss -tlnp | grep 3000

lsof выручает, когда:

1. Нужно посмотреть не только TCP, но и UDP

2. Проблема не с портом, а с файлом или папкой

3. Хотите увидеть все соединения процесса целиком

P.S. Самый частый сценарий: lsof -i :8080 - видим PID - kill -9 PID. Всё, порт свободен.

👉🏻 Я в Telegram - https://dzen.ru/id/686102a27e39653c3429f77f

👉🏻 Я в VK - vk.com/helcode

👉🏻 Я на Boosty - boosty.to/helcode