Как мы все знаем, порт одновременно используется только одним процессом или службой. Порт идентифицирует определенную службу или процесс, запущенный в системе. Иногда при устранении неполадок нам необходимо знать, какой номер порта прослушивает определенный процесс. Все процессы, запущенные в системе, имеют идентификационный номер процесса (PID) и номер порта. Чтобы узнать, какой номер порта прослушивает определенный процесс, есть несколько способов, о которых мы расскажем в этой статье.
Прежде чем приступить к статье, убедитесь, что у вас есть права root. Это поможет вам получить исчерпывающую информацию о процессах, запущенных в вашей системе.
Метод 1: Использование команды netstat
Netstat - это наиболее распространенная утилита командной строки, которая может использоваться для отображения информации о сетевых подключениях, статистики интерфейсов и таблиц маршрутизации. С ее помощью можно также узнать, какой номер порта используется определенным процессом. Вам не нужно устанавливать ее, так как она уже установлена в репозиториях всех дистрибутивов Linux. Однако, если он еще не установлен в вашей системе, используйте следующую команду для его установки:
1 | sudo apt install net-tools |
Чтобы узнать номера портов, которые прослушиваются процессами, выполните следующую команду в Терминале:
1 | sudo netstat -ltnp |
Следующий результат показывает номера портов, которые используются определенными процессами, а также их идентификаторы процессов (PID).
Если у вас нет привилегий sudo и вы запустили вышеуказанную команду без sudo, она не отобразит имя программы и PID, как показано в следующем выводе.
Теперь давайте посмотрим, что означает ltnp в приведенной выше команде:
- l - показать прослушиваемые сокеты
- t - показать TCP-соединения
- n - показать IP-адреса и номера портов в числовом виде
- p - показать PID/имя программы
Если мы посмотрим на вывод команды sudo netstat -ltnp, то в четвертом столбце будет именно то, что мы ищем: номер порта, на котором прослушивается процесс.
Чтобы получить информацию о порте отдельного процесса, вы можете просто передать вывод netstat с помощью команды grep.
Например, чтобы найти номер порта для "sshd", используйте следующую команду:
1 | sudo netstat -ltnp | grep 'sshd' |
Аналогично, если вы хотите узнать имя процесса, который прослушивает определенный порт, допустим, порт 22, используйте следующую команду:
1 | sudo netstat -ltnp | grep -w ':22' |
Способ 2: Использование команды lsof
С помощью команды lsof вы можете просмотреть список всех файлов, открытых процессами, запущенными в вашей системе. Lsof может выступать в качестве единого источника для получения информации, которая в противном случае требует использования большого набора инструментов администрирования. Как и в случае с командой netstat, для получения подробной информации вам потребуются привилегии sudo.
Если lsof еще не установлен в вашей системе, используйте следующую команду в Терминале для его установки:
1 | sudo apt install lsof |
После установки вы можете использовать утилиту lsof для поиска процессов, запущенных на определенных портах. Если вы запустите утилиту lsof без каких-либо параметров, она выдаст много информации, которую вам будет трудно понять. Однако использование параметров в lsof может помочь вам отфильтровать и сконцентрироваться на нужных результатах.
Теперь, чтобы найти процесс, прослушивающий определенный порт, допустим, порт 22, используйте следующую команду:
1 | sudo lsof -i :22 |
Эта команда вернет все процессы, запущенные на порту 22.
Метод 3: Использование команды fuser
fuser - это команда Linux, которая используется для поиска идентификатора процесса, использующего файл, каталог или файловую систему. Мы можем использовать эту команду для поиска процесса, запущенного на определенном порту.
Для использования команды fuser вам потребуется утилита psmisc. Если она еще не установлена в вашей системе, выполните следующую команду для ее установки:
1 | sudo apt install psmisc |
Для просмотра процессов, запущенных на любом порту, допустим, TCP-порту 22, выполните следующую команду в Терминале:
1 | sudo fuser 22/tcp |
Приведенная выше команда вернула процесс, прослушивающий порт номер 22. Теперь, чтобы просмотреть имя процесса по любому идентификатору процесса, используйте следующий синтаксис команды:
1 | ps -p [processID] -o comm= |
В нашем случае это будет
1 | ps -p 349 -o comm= |
Из приведенного выше результата видно, что имя процесса sshd соответствует идентификатору процесса 349. Это означает, что sshd с идентификатором процесса 349 прослушивает порт 22.
В этой статье мы рассмотрели некоторые утилиты командной строки, которые можно использовать для просмотра портов, прослушиваемых определенным процессом.