找出哪些进程正在侦听 Linux 中的特定端口

在 Linux 中,端口是与操作系统中正在运行的服务相关联的逻辑通信端点。 端口完全由操作系统管理,每个端口都与特定的服务相关联。 端口可帮助管理员识别系统上正在运行哪些服务。

通常为每个端口分配一个编号。 端口号从 0 到 65535。低于 1024 的端口被称为 特权端口 并用于特殊协议。 为了 example,网络流量(HTTP)通过端口 80,而 SSH 监听端口 22。大于 1024 的端口被称为 非特权 端口,可用于测试目的。 为了 example,您可以将您的网络服务器配置为在其中一个端口上运行,而不是在其默认端口号上运行。

在本指南中,我们将重点介绍如何找出哪些进程正在侦听 Linux 中的哪些端口。 我们使用 Ubuntu 20.04 进行演示。

使用 netstat Linux 命令

Linux Netstat 命令是网络和统计这两个词的组合。 您可能已经猜到了,它是一个命令行实用程序,用于在 Linux 系统上显示网络和协议统计信息。 此外,它还允许您打印路由表、TCP 和 UDP 端点的状态以及有关您的网络接口的信息。

要查看哪个进程正在侦听特定端口,请使用以下语法:

# netstat -pnltu | grep -w port_number

让我们分解选项列表:

p – 显示进程名称和 ID

n – 显示端口地址

l – 仅列出监听套接字

t – 打印 TCP 连接

u – 打印出 UDP 连接

在里面 example 下面,我们正在探测在端口 80 上侦听的服务。

# netstat -pnltu | grep -w 80

输出表明它是 Apache 正在侦听端口 80 的 webserver 服务。

检查在端口 3306 上侦听的服务。执行:

# netstat -pnltu | grep -w 3306

使用 lsof 命令

List Open Files 的首字母缩写词,lsof 命令是用于显示打开的文件和目录的命令。 随着 -一世 选项,它可以显示侦听特定端口的服务。

在里面 example 下面,我们正在寻找监听 TCP 22 端口的服务,也就是 SSH(Secure Shell)服务。

# lsof -i TCP:22

使用 fuser 命令

最后,我们有 fuser 命令。 fuser 实用程序是一个智能命令行工具,用于使用套接字、文件或目录来定位进程。 它还做了很多事情,例如显示进程的类型、每个进程的 PID、拥有该进程的用户。

要使用 fuser 找出监听某个端口的服务,首先要找出进程的 PID,如图所示。

# fuser 22/tcp

此后继续并调用 ps 命令以显示服务的名称。 注意 34093 是我们从上一个命令中得到的进程的 PID

# ps -p 34093 -o comm=

结论

我们已经说明了 3 种方法,您可以使用它们来揭示正在侦听 Linux 系统上特定端口的进程。 我们希望您现在可以毫无问题地这样做。