在Linux系统中,时常需要查看哪个进程占用了特定的端口,以方便进行相关的配置或者问题排查。
本文介绍了几种常用的方法:使用netstat命令、lsof命令、ss命令。并给出了详细的实例,快速准确地查找占用端口的进程。
监听端口是指在计算机网络通信中,通过指定一个特定的端口号,使得计算机可以监听该端口上的网络通信请求。当计算机监听某个端口时,它会不断地检查该端口上是否有传入的网络连接请求,如果有则会接受连接并进行相应的处理。
监听端口通常用于服务器程序,服务器程序需要监听特定的端口号,以便能够接受客户端的连接请求并提供相应的服务。例如,Web服务器通常会监听80端口,SMTP服务器监听25端口,FTP服务器监听21端口等。
每个监听端口都可以使用防火墙打开或关闭(过滤)。
不能同时让两个服务监听同一IP地址上的同一端口。
lsof是一个用于查看系统打开的文件和进程的工具。通过结合-i参数,我们可以只查看特定端口的相关信息。
sudo lsof -i:<端口号>
这里的<端口号>是要查找的具体端口号。例如,要查看占用端口号为80的进程,可以运行:
sudo lsof -i:80
或者
sudo lsof -nP -iTCP:80 -sTCP:LISTEN
-n
➾ 不要将端口号转换为端口名称。
-p
➾ 不解析主机名,显示数字地址。
-iTCP -sTCP:LISTEN
➾ 仅显示TCP状态为LISTEN的网络文件。
执行命令后,终端会显示占用指定端口的进程的相关信息,包括进程ID(PID)和进程名称。
查看所有侦听TCP端口的列表:
sudo lsof -i
或者
sudo lsof -nP -iTCP -sTCP:LISTEN
netstat是一个命令行工具,可以提供有关网络连接的信息。
列出所有正在侦听的TCP或UDP端口,包括使用端口的服务和套接字状态,可以运行:
sudo netstat -tunlp
-t
➾ 显示TCP端口。
-u
➾ 显示UDP端口。
-n
➾ 显示数字地址而不是解析主机。
-l
➾ 仅显示监听端口。
-p
➾ 显示侦听器进程的PID和名称。仅当你以root用户或 sudo 用户身份运行命令时,才会显示此信息。
1、
Proto
➾ 套接字使用的协议。
2、Local Address
➾ 进程侦听的IP地址和端口号。
3、PID/Program name
➾ PID和进程名称。
使用 grep命令过滤结果。例如,要查找在TCP端口22上侦听的进程,可以运行:
sudo netstat -tnlp | grep :22
###过滤tcp协议
sudo netstat -tnlp | grep tcp
###过滤httpd服务
sudo netstat -tnlp | grep httpd
###过滤856进程
sudo netstat -tnlp | grep 856
###过滤LISTEN状态
sudo netstat -tnlp | grep LISTEN
ss是新的netstat。它缺少netstat的某些功能,但是公开了更多的TCP状态,并且速度稍快。
ss命令用于显示socket状态. 可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计。
它比其他工具展示等多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具。
列出所有正在侦听的TCP或UDP端口,可以运行:
sudo ss -tunlp
常用的ss命令:
1、
ss -s
➾ 显示socket的统计信息
2、ss -a
➾ 显示socket的详细信息 (ta:tcp,ua:udp)
3、ss -l
➾ 显示本机监听的端口
4、ss -pl
➾ 显示本机监听的端口和程序
5、ss -t -a
➾ 显示所有tcp socket
6、ss -u -a
➾ 显示所有的UDP Socekt
7、ss -o state established '( dport = :smtp or sport = :smtp )'
➾ 显示所有已建立的SMTP连接
8、ss -o state established '( dport = :http or sport = :http )'
➾ 显示所有已建立的HTTP连接
9、ss -x src /tmp/.X11-unix/*
➾ 找出所有连接X服务器的进程
该章详细介绍了在Linux系统中,几种常用的端口占用检查方法:使用netstat命令、lsof命令、ss命令。并给出了详细的实例,快速准确地查找占用端口的进程。