Debian:找出进程正在侦听的端口号

众所周知,一个端口一次只能被一个进程或服务使用。 端口标识在系统上运行的特定服务或进程。 有时,在进行故障排除时,我们需要知道某个进程正在侦听哪个端口号。 系统上运行的所有进程都与进程标识号 (PID) 和端口号相关联。 为了找到特定进程正在侦听的端口号,我们将在本文中讨论几种方法。

在继续阅读本文之前,请确保您拥有 root 权限。 它将帮助您获取有关系统上运行的进程的全面信息。

请注意,我们使用 Debian 10 来运行本文中提到的命令和过程。

方法一:使用netstat命令

Netstat 是最常用的命令行实用程序,可用于显示有关网络连接、接口统计信息和路由表的信息。 它还可用于查找某个进程使用的端口号。 您不必安装它,因为它已经安装在所有 Linux 发行版的存储库中。 但是,如果您的系统上尚未安装它,请使用以下命令进行安装:

$ sudo apt install net-tools

为了找到进程正在侦听的端口号,请在终端中运行以下命令:

$ sudo netstat -ltnp

以下输出显示了某些进程使用的端口号及其进程 ID (PID)。

如果你没有 sudo 特权并在没有的情况下运行上述命令 sudo,它不会显示程序名称和 PID,如以下输出所示。

没有限制的 netstat 视图 sudo

现在让我们看看 脂蛋白 在上面的命令中意味着:

l – 显示监听套接字

t – 显示 TCP 连接

n – 以数字形式显示 IP 地址和端口号

p – 显示 PID/程序名称

如果我们查看 $ 的输出 sudo netstat -ltnp,第四列正是我们要找的:进程监听的端口号。

为了获取单个进程的端口信息,您可以简单地使用 grep 命令管道传输 netstat 的输出。

例如,要根据“sshd”查找端口号,请使用以下命令:

$ sudo netstat –ltnp | grep ‘sshd’

检查 sshd 端口

同样,如果您想找出正在侦听特定端口(例如端口 21)的进程名称,将使用以下命令:

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

通过端口号检查进程

方法二:使用lsof命令

使用 lsof 命令,您可以查看系统上运行的进程打开的所有文件的列表。 Lsof 可以作为获取信息的单一来源,否则会涉及大量管理工具。 类似于 netstat 命令,您将需要 sudo 权限以获取详细信息。

如果您的系统上尚未安装 lsof,请在终端中使用以下命令进行安装:

$ sudo apt install lsof

安装lsof

安装后,您可以使用 lsof 实用程序查找在特定端口上运行的进程。 如果您在不带任何参数的情况下运行 lsof 实用程序,它将返回大量您难以理解的信息。 但是,将参数与 lsof 一起使用可以帮助您过滤掉并专注于所需的输出。

现在为了找到侦听特定端口的进程,假设是端口 22,请使用以下命令:

$ sudo lsof -i :22

此命令将返回在端口 22 上运行的所有进程。

使用 lsof 命令检查端口

方法三:使用fuser命令

fuser 是一个 Linux 命令,用于查找哪个进程 ID 正在使用文件、目录或文件系统。 我们可以使用此命令来查找在特定端口上运行的进程。

您将需要 psmisc 实用程序来使用 fuser 命令。 如果您的系统上尚未安装它,请运行以下命令进行安装:

$ sudo apt install psmisc

安装 psmisc 包

为了查看在任何端口上运行的进程,假设 TCP 端口 22,在终端中运行以下命令:

$ sudo fuser 22/tcp

定影器命令

上面的命令返回了侦听端口号 22 的进程。现在为了根据任何进程 ID 查看进程名称,请使用以下命令语法:

$ ps -p [processID] -o comm=

在我们的例子中,它将是

$ ps -p [5859] -o comm=

使用ps检查端口

从上面的输出中,我们可以找到进程 ID 5859 的进程名称 sshd。这意味着进程 ID 为 5859 的 sshd 正在侦听端口 22。

在本文中,我们学习了一些命令行实用程序,您可以使用它们来查看特定进程正在侦听的端口。