Linux:找出進程正在偵聽的端口號

作為 Linux 用戶,我們有時需要知道特定進程正在偵聽哪個端口號。 所有端口都與操作系統中的進程 ID 或服務相關聯。 那麼我們如何找到那個端口呢? 本文介紹了三種不同的方法來查找進程正在偵聽的端口號。

我們已經在 Ubuntu 18.04 LTS 系統上運行了本文中描述的命令和過程。

方法一:使用netstat命令

Netstat 或網絡統計實用程序用於查看與網絡連接相關的信息。 這包括有關接口統計信息、路由表等的信息。 該實用程序在大多數 Linux 系統上都可用,因此讓我們利用它來查看有關某些進程在系統上使用哪些端口的信息。

要使用 netstat 命令,如果系統上尚未安裝 net-tools 實用程序,則需要通過以下命令安裝它:

$ sudo apt install net-tools

然後運行以下命令:

$ sudo netstat -ltnp

上面的命令給出了基於以下特性的 netstat 信息:

  • l: 只顯示監聽套接字
  • t:顯示tcp連接
  • n:以數字形式顯示地址
  • p:顯示進程ID/程序名稱

為了 example, 在 netstat 命令的上述輸出中,進程 ID 為 950 的 Apache2 程序正在端口號 80 上運行。

您還可以通過將 grep 函數合併到您的命令中來過濾特定端口的統計信息。

例子:

$ sudo netstat -ltnp | grep -w ':80'

此命令將具體告訴您哪個進程在端口號 80 上運行。

方法二:使用lsof命令

lsof 或打開文件列表實用程序有助於列出 Linux 系統上的所有打開文件。 我們可以使用此實用程序查看在特定端口上打開的所有進程。

要使用 lsof 命令,如果您的系統上尚未安裝 lsof 實用程序,則需要通過以下命令安裝它:

$ sudo apt install lsof

讓我們使用 lsof 查看在特定端口上偵聽的服務。

例子:

$ sudo lsof -i :80

此命令將列出所有使用 TCP 端口號 80 的進程。

方法三:使用fuser命令

fuser 命令顯示哪些進程 ID 正在使用命名文件、套接字或文件系統。 我們可以使用此命令來查看在特定 TCP 端口上運行的進程 ID。

要使用 fuser 命令,如果系統上尚未安裝 psmisc 實用程序,則需要通過以下命令安裝它:

$ sudo apt install psmisc

讓我們通過以下命令查看在 TCP 端口 3306 上運行的所有進程 ID:

$ sudo fuser 3306/tcp

您可以在該命令中指定任何端口號來查看其偵聽進程。

在上面的輸出中,您可以看到進程 ID 975 正在偵聽 TCP 3306。

為了查看這個進程ID對應的程序,運行以下命令:

句法:

$ ps -p [processID] -o comm=

在我們的例子中:

$ ps -p [975] -o comm=

輸出顯示進程 ID 975 對應於程序名稱 MySDLd。 因此,程序 MySQLd 的進程 ID 975 正在偵聽端口號 3306。

通過本文中學到的三種方法,您可以輕鬆查看Linux 上特定進程正在偵聽的TCP 端口。