在 Linux 系统中,可以使用多种方式来查找某个端口正在运行的服务或程序。以下是几种常用的方法:
🔍 1. 使用 lsof
命令(推荐)
sudo lsof -i :端口号
比如想查找8080端口运行的服务
sudo lsof -i :8080
输出示例如下所示:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12345 user 50u IPv6 123456 0t0 TCP *:http-alt (LISTEN)
🔍 2. 使用 netstat
命令(旧但常见)
sudo netstat -tulnp | grep :端口号
比如想查找8080端口运行的服务
sudo netstat -tulnp | grep :8080
输出示例如下所示:
tcp6 0 0 :::8080 :::* LISTEN 12345/java
🔍 3. 使用 ss
命令(现代替代 netstat
)
sudo ss -tulnp | grep :端口号
示例
sudo ss -tulnp | grep :8080
输出示例:
LISTEN 0 100 :::8080 :::* users:(("java",pid=12345,fd=50))
🔍 4. 使用 fuser
命令
sudo fuser 端口号/tcp
示例:
sudo fuser 8080/tcp
然后再查进程详细信息:
ps -fp 12345
🧠 总结
命令 | 是否推荐 | 说明 |
---|---|---|
lsof | ✅ 推荐 | 功能强大、输出清晰 |
ss | ✅ 推荐 | 现代、高效 |
netstat | ⚠️ 旧工具 | 部分系统已不预装 |
fuser | 👍 补充 | 简洁快速 |
封装一个Shell脚本用来查找某个端口号的服务
#!/bin/bash
echo "🔍 请输入要查询的端口号:"
read -p "端口号: " PORT
# 判断输入是否为空
if [ -z "$PORT" ]; then
echo "❌ 未输入端口号,已退出"
exit 1
fi
# 判断端口是否为数字
if ! [[ "$PORT" =~ ^[0-9]+$ ]]; then
echo "❌ 端口号应为纯数字,已退出"
exit 1
fi
echo ""
echo "🔎 正在查找端口 $PORT 的服务..."
echo ""
echo "📌 使用 lsof 查询:"
sudo lsof -i :$PORT
echo ""
echo "📌 使用 ss 查询:"
sudo ss -tulnp | grep ":$PORT"
echo ""
echo "📌 使用 fuser 查询:"
sudo fuser ${PORT}/tcp 2>/dev/null
if [ $? -eq 0 ]; then
for pid in $(sudo fuser ${PORT}/tcp 2>/dev/null); do
echo "进程 PID: $pid"
ps -fp $pid
done
else
echo "没有找到使用该端口的进程"
fi
然后保存成find_port_service.sh,然后赋予执行权限
chmod +x find_port_service.sh
运行下述命令:
./find_port_service.sh
如下所示: