作为Linux用户,我们有时需要知道特定进程正在侦听哪个端口号。 所有端口都与OS中的进程ID或服务相关联。 那我们怎么找到那个港口? 本文介绍了三种不同的方法,供您查找进程正在侦听的端口号。
我们在Ubuntu 18.04 LTS/Ubuntu 18.10系统上运行了本文中描述的命令和过程。
方法1:使用netstat命令Netstat或网络统计实用程序用于查看与网络连接相关的信息。 这包括有关接口统计信息,路由表等信息。 此实用程序在大多数Linux系统上都可用,因此我们可以使用它来查看有关某些进程在系统上使用哪些端口的信息。
要使用netstat命令,您需要安装net-tools实用程序(如果它尚未通过以下命令安装在您的系统上):
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ sudo apt install net-tools
然后运行以下命令:
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ sudo netstat -ltnp
激活Internet连接 (仅服务器)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 537/systemd-resolve
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 772/cupsd
tcp6 0 0 :::21 :::* LISTEN 732/vsftpd
tcp6 0 0 ::1:631 :::* LISTEN 772/cupsd
以上命令基于以下功能提供netstat信息:
l:只显示监听套接字
t:显示tcp连接
n:以数字形式显示地址
p:显示进程ID /程序名称
例如,在netstat命令的上述输出中,进程ID为 732的vsftpd程序在端口号21上运行。
您还可以通过将grep函数合并到命令中来过滤特定端口的统计信息。
例:
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ sudo netstat -ltnp | grep -w ':21'
tcp6 0 0 :::21 :::* LISTEN 732/vsftpd
lsof或打开文件列表实用程序有助于列出Linux系统上的所有打开文件。 我们可以使用此实用程序查看特定端口上打开的所有进程。
要使用lsof命令,如果已通过以下命令在系统上未安装lsof实用程序,则需要安装它:
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ sudo apt install lsof
让我们使用lsof来查看在特定端口上侦听的服务。
例:
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ sudo lsof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 732 root 3u IPv6 27550 0t0 TCP *:ftp (LISTEN)
此命令将列出使用TCP端口号21的所有进程。
方法3:使用fuser命令fuser命令显示使用命名文件,套接字或文件系统的进程ID。 我们可以使用此命令查看在特定TCP端口上运行的进程ID。
要使用fuser命令,您需要安装psmisc实用程序(如果它已经未通过以下命令安装在您的系统上):
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ sudo apt install psmisc
您可以在此命令中指定任何端口号以查看其侦听进程。
使用fuser命令
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ sudo fuser 21/tcp
21/tcp: 732
在上面的输出中,您可以看到进程ID 732正在侦听TCP 21。
要查看此进程ID对应的程序,请运行以下命令:
语法:
$ ps -p [processID] -o comm=
我们运行以下命令测试:
linuxidc@linuxidc:~/桌面/www.linuxidc.com$ ps -p 732 -o comm=
vsftpd
输出显示进程ID 732对应于程序名称vsftpd。 因此,程序vsftpd的进程ID 732正在侦听端口号21。