文章目录
Overview
在 Linux 环境中,可以使用以下方法来查看当前被占用的端口:
1. 使用 netstat(旧方法,但仍可用)
netstat -tulnp
参数解析:
-
-t
显示 TCP 端口 -
-u
显示 UDP 端口 -
-l
显示监听的端口 -
-n
以数字形式显示地址和端口 -
-p
显示进程 ID 和名称
示例输出:
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 1023/sshd
tcp6 0 0 :::80 :::* LISTEN 2005/nginx
2. 使用 ss(更快,推荐)
ss -tulnp
ss
是 netstat
的替代工具,功能类似,但性能更好。
示例输出:
Netid State Local Address:Port Peer Address:Port Process
tcp LISTEN 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3))
tcp LISTEN :::80 :::* users:(("nginx",pid=2005,fd=5))
3. 只列出被占用的端口
netstat -tulnp | awk '{print $4}' | awk -F ":" '{print $NF}' | sort -n | uniq
或者:
ss -tulnp | awk '{print $5}' | awk -F ":" '{print $NF}' | sort -n | uniq
4. 使用 lsof 查找特定端口
lsof -i :80
示例输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2005 root 5u IPv4 34567 0t0 TCP *:http (LISTEN)
5. 使用 fuser 查看某个端口被哪个进程占用
fuser -n tcp 80
输出示例:
80/tcp: 2005
(进程 ID 2005 占用了 TCP 端口 80)
6. 显示所有被占用的端口
sudo lsof -i -P -n
-
-i
:显示网络相关的文件(端口) -
-P
:不解析端口名称(只显示端口号) -
-n
:不解析域名(只显示 IP)
总结
方法 | 命令 | 说明 |
---|---|---|
netstat | netstat -tulnp | 旧版工具,仍然可用 |
ss | ss -tulnp | 更快,推荐 |
lsof | lsof -i :PORT | 查找某个端口的进程 |
fuser | fuser -n tcp PORT | 显示占用该端口的进程 ID |