
В Ubuntu порты от 1024 до 65535 чаще всего используются приложениями для сетевого взаимодействия. Если при запуске сервиса возникает ошибка «Address already in use», это означает, что выбранный порт уже занят другим процессом. Чаще всего проблема встречается с портами 3000, 8080 и 5000, используемыми веб-приложениями и локальными серверами.
Для определения процесса, который занимает порт, применяются команды netstat, ss и lsof. Например, команда sudo lsof -i :8080 покажет PID и имя процесса, блокирующего порт 8080. Эти данные необходимы для безопасного завершения процесса без остановки других служб.
После выявления процесса его можно завершить стандартной командой kill или принудительно через kill -9. Для служб, управляемых systemd, используется systemctl stop [имя_сервиса]. Проверка порта после завершения процесса позволяет убедиться, что он стал доступен для нового приложения.
Правильная последовательность действий и использование точных команд минимизируют риск прерывания работы других сервисов и помогают быстро освободить нужный порт для тестирования или запуска сервиса на Ubuntu.
Проверка списка активных портов через netstat

Столбцы Local Address и PID/Program name показывают номер порта и процесс, который его занимает. Если требуется фильтрация по конкретному порту, используется команда sudo netstat -tuln | grep :8080, где 8080 – номер проверяемого порта. Это позволяет быстро определить, свободен ли порт или требуется вмешательство.
Дополнительно можно использовать ключ -p для отображения PID процесса, занимающего порт: sudo netstat -tulpn. На основе полученных данных легко выявить процессы, блокирующие порты, и подготовиться к их завершению безопасными методами.
Использование команды lsof для выявления процессов на порту
Если требуется выявить все процессы, работающие на TCP или UDP портах, используется sudo lsof -iTCP -sTCP:LISTEN или sudo lsof -iUDP. Эти команды позволяют сосредоточиться только на активных слушающих портах, исключая установленные, но не использующиеся соединения.
Полученные PID можно использовать для безопасного завершения процесса через kill или для проверки, к какой службе он относится, через ps -p [PID] -o comm=. Это обеспечивает точное освобождение нужного порта без влияния на другие сервисы.
Определение PID процесса, занимающего порт
Для выявления процесса, который использует конкретный порт в Ubuntu, применяется команда lsof. Синтаксис для проверки порта 8080 выглядит так:
sudo lsof -i :8080
Альтернативный способ – команда netstat с ключами -tulnp:
sudo netstat -tulnp | grep :8080
Она покажет протокол (TCP/UDP), локальный адрес с портом и PID/Program name. При работе с современными версиями Ubuntu предпочтительно использовать ss:
sudo ss -ltnp | grep :8080
После определения PID можно завершить процесс с помощью sudo kill PID или принудительно через sudo kill -9 PID. Это освобождает порт для повторного использования.
Завершение процесса с помощью kill

Для завершения процесса по PID применяется команда kill. Синтаксис стандартного завершения:
sudo kill <PID>
Если процесс не реагирует на стандартный сигнал, используется принудительное завершение с сигналом SIGKILL:
sudo kill -9 <PID>
Команда kill -15 <PID> отправляет сигнал SIGTERM, который корректно завершает процесс, освобождая ресурсы. Рекомендуется сначала использовать SIGTERM, а при необходимости переходить к SIGKILL.
После выполнения команды можно проверить освобождение порта через lsof -i :<порт> или ss -ltnp | grep :<порт>. Это подтверждает, что порт больше не занят.
Принудительное завершение процесса через kill -9
Если обычное завершение процесса не освобождает порт, используется команда kill -9 <PID>. Она отправляет сигнал SIGKILL, который немедленно завершает процесс.
Рекомендации при использовании:
- Проверить PID процесса командой
lsof -i :<порт>илиss -ltnp | grep :<порт>. - Выполнить
sudo kill -9 <PID>для принудительного завершения. - Проверить, что порт освобожден, повторно выполнив
lsofилиss. - Использовать
kill -9только при отказе обычногоkill, чтобы избежать некорректного завершения процессов и возможной потери данных.
Пример последовательности действий:
- Найти процесс:
sudo lsof -i :8080 - Принудительно завершить:
sudo kill -9 12345 - Подтвердить освобождение порта:
ss -ltnp | grep :8080
Освобождение порта с помощью systemctl для служб
Если порт занят системной службой, корректнее завершить её через systemctl, а не вручную через kill. Это предотвращает некорректное завершение процессов и потерю данных.
Действия по освобождению порта:
- Определить службу, использующую порт, с помощью команды:
- Посмотреть статус службы:
- Остановить службу для освобождения порта:
- Проверить, что порт освобожден:
- При необходимости отключить автозапуск службы, чтобы порт не блокировался после перезагрузки:
sudo lsof -i :<порт> или ss -ltnp | grep :<порт>
sudo systemctl status <имя_службы>
sudo systemctl stop <имя_службы>
ss -ltnp | grep :<порт>
sudo systemctl disable <имя_службы>
Эта последовательность позволяет безопасно освободить порт и управлять службами без риска нарушить работу системы.
Настройка конфигурации сервиса для изменения порта

Если порт, который требуется использовать, занят другим сервисом, его можно изменить в конфигурации службы. Для этого:
- Найти файл конфигурации сервиса. Обычно он находится в каталогах
/etc/или/etc/systemd/system/. Например, для Nginx это/etc/nginx/sites-available/default, для Apache –/etc/apache2/ports.conf. - Открыть файл для редактирования с правами администратора:
- Изменить параметр, отвечающий за порт. В Nginx это
listen 80;, можно заменить на другой свободный порт, напримерlisten 8081;. - Сохранить изменения и закрыть редактор.
- Перезапустить службу для применения нового порта:
- Проверить, что сервис слушает новый порт:
sudo nano /etc/nginx/sites-available/default
sudo systemctl restart nginx
ss -ltnp | grep <новый_порт>
Изменение порта в конфигурации позволяет избежать конфликтов с другими процессами и гарантирует корректную работу сервиса без принудительного завершения других процессов.
Проверка освобождения порта после завершения процесса

После завершения процесса или перезапуска службы важно убедиться, что порт действительно освобождён. Для проверки используется несколько команд.
Основные способы проверки:
| Команда | Описание | Пример |
|---|---|---|
lsof -i :8080 |
sudo lsof -i :8080 |
|
ss -ltnp | grep :8080 |
Отображает активные TCP-соединения и PID процессов на порту. Отсутствие строки означает, что порт освобождён. | ss -ltnp | grep :8080 |
netstat -tulnp | grep :8080 |
Проверяет порты и соответствующие PID. Используется для совместимости со старыми версиями Ubuntu. | sudo netstat -tulnp | grep :8080 |
После подтверждения освобождения порта можно запускать новые процессы или изменять конфигурацию сервисов без конфликтов.
Вопрос-ответ:
Как определить, какой процесс занимает порт в Ubuntu?
Чтобы узнать, какой процесс использует конкретный порт, применяется команда lsof -i :<номер_порта>. В выводе отображается PID процесса, название программы и пользователь. Альтернативно можно использовать ss -ltnp | grep :<номер_порта> для отображения активных TCP-соединений с указанием PID.
Что делать, если обычная команда kill не освобождает порт?
Если kill не завершает процесс, используется принудительное завершение через kill -9 . Это отправляет сигнал SIGKILL и немедленно завершает процесс. После этого рекомендуется проверить порт командами lsof или ss для подтверждения его освобождения.
Можно ли освободить порт, занятый системной службой?
Да, для этого лучше использовать systemctl. Сначала определите службу через lsof или ss, затем выполните sudo systemctl stop <имя_службы>. После проверки, что порт свободен, при необходимости можно отключить автозапуск службы через sudo systemctl disable <имя_службы>.
Как изменить порт сервиса, если он конфликтует с другим приложением?
Для изменения порта откройте конфигурационный файл сервиса в /etc. Например, для Nginx это /etc/nginx/sites-available/default. В файле замените значение параметра listen на другой свободный порт, сохраните изменения и перезапустите сервис командой sudo systemctl restart nginx. После этого проверьте порт через ss или lsof.
Как убедиться, что порт полностью освобождён после завершения процесса?
Проверка выполняется с помощью команд lsof -i :<порт>, ss -ltnp | grep :<порт> или netstat -tulnp | grep :<порт>. Если вывод пустой, значит порт свободен и готов к использованию другими приложениями или службами.
