Debian:找出进程正在侦听的端口号
众所周知,一个端口一次只能由一个进程或服务使用。端口标识系统上运行的特定服务或进程。有时,在排除故障时,我们需要知道某个进程正在侦听哪个端口号。系统上运行的所有进程都与进程标识号 (PID) 和端口号相关联。为了找到特定进程正在侦听的端口号,我们将在本文中讨论几种方法。
在继续阅读本文之前,请确保您拥有 root 权限。它将帮助您获取有关系统上运行的进程的全面信息。
请注意,我们使用 Debian 10 来运行本文中提到的命令和过程。
方法一:使用netstat命令
Netstat 是最常用的命令行实用程序,可用于显示有关网络连接、接口统计信息和路由表的信息。它还可用于查找某个进程使用哪个端口号。您不必安装它,因为它已经安装在所有 Linux 发行版的存储库中。但是,如果您的系统上尚未安装它,请使用以下命令进行安装:
sudo apt install net-tools
为了查找进程正在侦听的端口号,请在终端中运行以下命令:
sudo netstat -ltnp
以下输出显示某些进程使用的端口号及其进程 ID (PID)。
如果您没有 sudo 权限并且在没有 sudo 的情况下运行上述命令,它将不会显示程序名称和 PID,如以下输出所示。
现在让我们看看上面命令中的 ltnp 意味着什么:
l – 显示监听套接字
t – 显示 TCP 连接
n – 以数字形式显示 IP 地址和端口号
p – 显示 PID/程序名称
如果我们查看 $sudo netstat -ltnp 的输出,第四列正是我们要查找的内容:进程正在侦听的端口号。
为了获取单个进程的端口信息,您可以简单地使用 grep 命令通过管道传输 netstat 的输出。
例如,要查找“sshd”的端口号,请使用以下命令:
sudo netstat –ltnp | grep ‘sshd’
同样,如果您想找出正在侦听特定端口(例如端口 21)的进程名称,则将使用以下命令:
sudo netstat -ltnp | grep -w ':21'
方法二:使用lsof命令
使用 lsof 命令,您可以查看系统上运行的进程打开的所有文件的列表。 Lsof 可以作为获取信息的单一来源,否则需要大量的管理工具。与 netstat 命令类似,您需要 sudo 权限才能获取详细信息。
如果您的系统上尚未安装 lsof,请在终端中使用以下命令进行安装:
sudo apt install lsof
安装后,您可以使用 lsof 实用程序查找在特定端口上运行的进程。如果您运行不带任何参数的 lsof 实用程序,它将返回大量您难以理解的信息。然而,将参数与 lsof 一起使用可以帮助您过滤并专注于所需的输出。
现在,为了找到正在侦听特定端口(例如端口 22)的进程,请使用以下命令:
sudo lsof -i :22
此命令将返回在端口 22 上运行的所有进程。
方法3:使用fuser命令
fusionr 是一个 Linux 命令,用于查找哪个进程 ID 正在使用文件、目录或文件系统。我们可以使用这个命令来查找特定端口上运行的进程。
您将需要 psmisc 实用程序才能使用 fusion 命令。如果您的系统上尚未安装它,请运行以下命令进行安装:
sudo apt install psmisc
要查看在任何端口(例如 TCP 端口 22)上运行的进程,请在终端中运行以下命令:
sudo fuser 22/tcp
上述命令已返回侦听端口号 22 的进程。现在,为了根据任何进程 ID 查看进程名称,请使用以下命令语法:
ps -p [processID] -o comm=
在我们的例子中,它将是
ps -p [5859] -o comm=
从上面的输出中,我们可以找到进程ID为5859的进程名称sshd。这意味着进程ID为5859的sshd正在监听端口22。
在本文中,我们学习了一些命令行实用程序,您可以使用它们来查看特定进程正在侦听的端口。