Linux 查看端口占用
source link: https://www.myfreax.com/check-listening-ports-linux/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Linux 查看端口占用
在对网络连接或特定于应用程序的问题进行故障排除时,首先要检查的事情之一应该是系统上实际使用了哪些端口
在对网络连接或应用程序的问题进行故障排除时,首先要检查的事情之一应该是系统上实际使用了哪些端口,以及哪个应用程序正在监听指定的端口。
本教程介绍了如何使用netstat
,ss
和lsof
命令找出进程正在的监听。教程适用于所有基于Linux和Unix的操作系统,包括macOS。
网络端口是由编号关联IP地址和通信协议TCP或UDP的类型标识。监听端口是应用程序或进程在其上监听的网络端口,充当通信端点。
每个监听端口都可以使用防火墙打开或关闭和过滤。一般而言,开放端口是一个网络端口,它接受来自远程计算机的连接。
您不能让两个服务监听同一IP地址上的同一端口。例如,如果您正在运行一个监听端口80
和443
的Apache Web服务器,并且尝试安装Nginx。
Nginx将无法启动,因为HTTP和HTTPS端口是已经被Apache Web服务器使用。
netstat
是一个命令行工具,可以提供网络连接的信息,包括查看正在监听的端口。如果你系统没有安装netstat命令,请阅读教程Linux netstat命令安装。
例如要列出所有正在监听的TCP或UDP端口,端口的服务和socket套接字状态,请运行命令sudo netstat -tunlp
。
这里解释一下此命令中使用的选项的含义。-t
显示TCP端口。-u
显示UDP端口。-n
显示数字地址而不是解释为主机名。
-l
显示监听端口。-p
显示监听该端口的进程PID和名称。仅当您以root用户或具有sudo权限的用户运行命令时,才会显示此信息。
sudo netstat -nputl
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
在我们的案例中,重要的几列是。Proto
表示socket套接字使用的协议。Local Address
进程监听的IP地址和端口号。PID/Program name
进程PID和名称。
如果要过滤结果,请使用grep命令过滤输出。例如,查看TCP端口22的信息,可以运行命令sudo netstat -tnlp | grep :22
。
你将可以看到输出显示此计算机上的端口22被SSH服务进程sshd监听。如果输出为空,则表示没有进程监听该端口。
您也可以根据条件过滤列表,例如PID,协议,状态等。但netstat
已过时,已被ss
和ip
命令取代,但它仍然是检查网络连接的最常用命令。
sudo netstat -tnlp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 445/sshd
tcp6 0 0 :::22 :::* LISTEN 445/sshd
ss 查看端口占用
ss
是新的netstat
,可用于查看指定端口的信息。它缺少netstat
的某些功能,但是公开了更多的TCP状态,并且速度更快。
命令选项基本相同,因此从netstat
到ss
的转换并不困难。要使用ss
获取所有监听端口的列表,请运行命令sudo ss -tunlp
,输出与netstat
报告的输出几乎相同。
sudo ss -tunlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=445,fd=3))
....
lsof 查看端口占用
lsof是功能强大的命令行工具,可用于检查端口监听,可提供进程打开的文件信息。在Linux中,一切都是文件。
您可以将socket视为写入网络数据的文件。要使用lsof
获取所有TCP端口监听的列表,请运行命令sudo lsof -nP -iTCP -sTCP:LISTEN
。
这里解释一下使用选项的含义。-n
不要将端口号转换为端口名称。-p
不解析主机名,显示数字地址。-iTCP -sTCP:LISTEN
仅显示TCP状态为LISTEN的socket文件。
大多数输出列名称都可以一目了然,COMMAND
,PID
,USER
,FD
是文件描述符,NAME
端口号。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 445 root 3u IPv4 16434 0t0 TCP *:22 (LISTEN)
sshd 445 root 4u IPv6 16445 0t0 TCP *:22 (LISTEN)
apache2 515 root 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
mysqld 534 mysql 33u IPv6 19973 0t0 TCP *:33060 (LISTEN)
apache2 764 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
apache2 765 www-data 4u IPv6 16590 0t0 TCP *:80 (LISTEN)
master 929 root 13u IPv4 19637 0t0 TCP *:25 (LISTEN)
master 929 root 14u IPv6 19638 0t0 TCP *:25 (LISTEN)
要查找正在监听的端口。例如端口3306
的进程,可以运行命令sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
,输出显示MySQL服务器监听端口3306
。
更多信息,请访问lsof手册页,并了解此工具的其他强大功能。
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)
我们向您展示了几个命令,可用于检查系统正在监听端口以及如何查找监听指定端口的进程。如果您有任何疑问或意见,请在下面发表评论。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK