在工作中有时会碰到端口被占用的情况,这时候需要查看端口占用情况进行问题排查。在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才能看到