📅  最后修改于: 2023-12-03 15:40:23.510000             🧑  作者: Mango
有时候我们会遇到端口被占用的情况,需要找出哪个服务或程序正在使用该端口。本文将介绍在Shell/Bash下如何查找哪个服务正在使用端口。
netstat
netstat -nlp | grep <端口号>
-n
表示不进行域名解析-l
表示列出所有在监听状态下的socket-p
表示显示哪个进程在监听端口例如,我们要查找8080端口正在使用的服务:
netstat -nlp | grep 8080
返回结果类似于:
tcp6 0 0 :::8080 :::* LISTEN 12345/java
其中12345/java
表示该端口正在被java
进程占用。
lsof
lsof -i:<端口号>
例如,我们要查找端口为8080的服务:
lsof -i:8080
返回结果类似于:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12345 user 42u IPv6 12345 0t0 TCP *:http-alt (LISTEN)
其中java
表示该端口正在被java
进程占用。
使用netstat
和lsof
都可以查找哪个服务正在使用端口,两种方式各有优劣。netstat
是系统自带的工具,使用起来比较简单,但有些情况下需要使用grep
筛选结果。lsof
则是第三方工具,需要先安装,但可以直接通过指定端口查找结果。