Linux 下查找端口对应项目位置的方法
1. 先确定端口占用情况
# 查看指定端口占用
sudo lsof -i :端口号
# 或使用 netstat
sudo netstat -tlnp | grep :端口号
# ss 命令(较新系统推荐)
sudo ss -lntp | grep :端口号
2. 获取进程信息
命令输出会显示 PID(进程ID)和程序名,例如:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 12345 app 123u IPv6 456789 0t0 TCP *:8080 (LISTEN)
3. 定位进程工作目录
# 查看进程启动信息
sudo cat /proc/PID/environ | tr '\0' '\n' | grep -E "PWD|HOME"
# 直接查看进程当前目录(符号链接)
sudo ls -l /proc/PID/cwd
# 查看进程详细信息
sudo ps -fp PID
4. 查找项目文件
# 进入进程工作目录
cd $(sudo readlink /proc/PID/cwd)
# 查看启动命令(从 /proc 中获取)
sudo cat /proc/PID/cmdline | tr '\0' ' '
# 查找配置文件(常见模式)
find . -name "*.yml" -o -name "*.yaml" -o -name "*.properties" -o -name "*.conf"
5. 服务管理工具查询
# systemd 服务
systemctl status PID
sudo systemctl status | grep 端口号
# 查看服务文件位置
systemctl show --property=FragmentPath 服务名
6. 容器化应用
# Docker 容器
docker ps | grep :端口号
docker inspect 容器ID | grep -A 10 Mounts
# Podman
podman ps --format "table {{.ID}}\t{{.Ports}}"
7. 常用组合命令
# 一键查询(端口→PID→位置)
sudo ss -lntp | grep :8080 | awk '{print $NF}' | cut -d= -f2 | xargs sudo ls -l /proc/*/cwd 2>/dev/null
# 生成端口占用报告
sudo lsof -i -P -n | grep LISTEN | awk '{printf "端口:%s PID:%s 程序:%s\n", $9, $2, $1}' | sort
注意事项
- 需要 root 权限查看其他用户进程
- 容器端口可能经过 NAT 映射
- 某些应用动态绑定端口,需查看配置文件
- 可结合
pgrep、pstree辅助排查
简化脚本
创建 /usr/local/bin/find-port:
#!/bin/bash
[ -z "$1" ] && echo "用法: find-port 端口号" && exit 1
echo "检查端口 $1 ..."
pid=$(sudo lsof -ti:$1)
[ -z "$pid" ] && echo "端口未使用" && exit 0
echo "PID: $pid"
echo "工作目录:"
sudo ls -l /proc/$pid/cwd 2>/dev/null || echo "无法访问"
评论区