linux查看端口占用

时间:2021-04-22 15:19:39

  在工作中有时会碰到端口被占用的情况,这时候需要查看端口占用情况进行问题排查。在linux系统中,可以使用下面两个命令来查看端口占用情况。

1、lsof命令

  lsof(list open files)命令功能:列出当前系统打开文件。在linux系统中,一切皆文件,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。像TCP、UDP 套接字等,系统中都存在对应的文件描述符,该文件描述符为应用程序与操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof命令可以查看这个列表对系统进行监测。

  查看某个端口的占用情况使用命令:lsof  -i:port,比如查看9090端口使用情况:lsof  -i:9090。

# lsof -i:9090
COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
Thriftc 32551 root    6u  IPv6 23200961      0t0  TCP *:websm (LISTEN)

2、netstat命令

  Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。因此可以使用netstat命令查看系统中端口占用情况。

  查看指定端口号的进程情况使用命令:netstat -tunlp | grep port,比如查看9090端口的进程:netstat -tunlp | grep 9090。

# netstat -tunlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:34797               0.0.0.0:*                   LISTEN      1554/rpc.statd      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1497/rpcbind        
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      31165/nginx         
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1988/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2102/master         
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      31165/nginx         
tcp        0      0 :::9090                     :::*                        LISTEN      32551/./Thriftc     
tcp        0      0 :::53705                    :::*                        LISTEN      1554/rpc.statd      
tcp        0      0 :::111                      :::*                        LISTEN      1497/rpcbind        
tcp        0      0 :::22                       :::*                        LISTEN      1988/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      2102/master         
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1497/rpcbind        
udp        0      0 127.0.0.1:882               0.0.0.0:*                               1554/rpc.statd      
udp        0      0 192.168.0.16:123            0.0.0.0:*                               2013/ntpd           
udp        0      0 127.0.0.1:123               0.0.0.0:*                               2013/ntpd           
udp        0      0 0.0.0.0:123                 0.0.0.0:*                               2013/ntpd           
udp        0      0 0.0.0.0:48037               0.0.0.0:*                               1554/rpc.statd      
udp        0      0 0.0.0.0:824                 0.0.0.0:*                               1497/rpcbind        
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1585/dhclient       
udp        0      0 :::33758                    :::*                                    1554/rpc.statd      
udp        0      0 :::111                      :::*                                    1497/rpcbind        
udp        0      0 fe80::f816:3eff:fe49:fae:123 :::*                                    2013/ntpd           
udp        0      0 ::1:123                     :::*                                    2013/ntpd           
udp        0      0 :::123                      :::*                                    2013/ntpd           
udp        0      0 :::824                      :::*                                    1497/rpcbind   

# netstat -tunlp | grep 9090
tcp        0      0 :::9090                     :::*                        LISTEN      32551/./Thriftc

常用参数:
  -a (all)  显示所有选项,默认不显示LISTEN相关
  -t (tcp)  仅显示tcp相关选项
  -u (udp)  仅显示udp相关选项
  -n    拒绝显示别名,能显示数字的全部转化成数字。
  -l     仅列出有在 Listen (监听) 的服務状态
  -p    显示建立相关链接的程序名
  -r     显示路由信息,路由表
  -e    显示扩展信息,例如uid等  
  -s    按各个协议进行统计
  -c    每隔一个固定时间,执行该netstat命令。
  提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到