news 2026/6/20 16:30:21

linux 根据端口查看进程和对应的应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
linux 根据端口查看进程和对应的应用

在 Linux 中,根据端口查看进程及对应应用的详细信息(如应用路径、启动命令、配置文件等),核心流程是:先通过端口找到 PID → 再通过 PID 追溯应用详情。以下是分步实操方案,包含命令、示例和场景化技巧,适配运维 / DevOps 日常排查需求:

一、核心步骤:端口 → PID → 应用详情

第一步:通过端口查询对应的 PID(3 种常用方法)

优先使用ss(高效)或lsof(信息全),以下以查询8080 端口为例:

命令(需 root 权限)作用示例输出(关键信息标注)
`sudo ss -tulnpgrep 8080`快速查询监听端口的 PID 和进程名LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=1234,fd=42))→ PID=1234,进程名 = java
sudo lsof -i:8080查看端口关联的进程详情COMMAND PID USER FD TYPE DEVICE NAME java 1234 root 42u IPv4 12345 TCP *:8080 (LISTEN)→ PID=1234,用户 = root
`sudo netstat -tulnpgrep 8080`兼容旧系统(需安装 net-tools)tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1234/java→ PID=1234,进程名 = java

注意:如果端口未监听(如处于TIME_WAIT状态),lsof需加-Pn参数:sudo lsof -i:8080 -Pn

第二步:通过 PID 查询应用详细信息(4 种关键方法)

拿到 PID 后(如上述1234),通过以下命令获取应用的路径、启动参数、配置文件等核心信息,避免误判同名进程(如多个java/python进程)。

1. 查看应用启动命令及完整参数(最常用)
# 方法 1:ps -ef(显示用户、PID、父进程、启动命令) sudo ps -ef | grep 1234 # 方法 2:ps auxww(显示完整命令行,无截断) sudo ps auxww | grep 1234

示例输出(Java 应用)

root 1234 0.0 5.0 1000000 200000 ? Sl 10:00 0:05 /usr/bin/java -jar /opt/tomcat/webapps/myapp.jar --spring.profiles.active=prod --server.port=8080

关键信息提取

  • 应用类型:Java 应用(通过java -jar判断)
  • 应用路径:/opt/tomcat/webapps/myapp.jar
  • 启动参数:--spring.profiles.active=prod(生产环境配置)
  • 端口配置:--server.port=8080(确认端口与查询一致)
2. 查看应用的安装 / 运行路径
# 方法 1:pwdx(直接显示进程的工作目录) sudo pwdx 1234 # 输出:1234: /opt/tomcat(应用的工作目录) # 方法 2:通过 /proc 文件系统(底层方式,最准确) sudo ls -l /proc/1234/exe # exe 是应用程序的符号链接 # 输出:lrwxrwxrwx 1 root root 0 10月 1 10:00 /proc/1234/exe -> /usr/bin/java(应用执行文件路径) sudo cat /proc/1234/cwd # cwd 是当前工作目录的路径 # 输出:/opt/tomcat(与 pwdx 结果一致)
3. 查看应用打开的文件 / 配置(排查配置文件位置)
# 列出进程打开的所有文件(包括配置文件、日志文件) sudo lsof -p 1234 | grep -E "\.conf|\.properties|\.log"

示例输出

java 1234 root 100r REG 8,1 1024 12345 /opt/tomcat/conf/application-prod.properties(配置文件) java 1234 root 101w REG 8,1 4096 67890 /opt/tomcat/logs/myapp.log(日志文件)
4. 查看应用的网络连接(确认端口监听详情)
# 查看进程 1234 的所有网络连接(包括客户端连接、其他端口) sudo ss -tulnp | grep 1234 # 或 sudo netstat -anp | grep 1234

二、场景化示例:实战排查端口占用问题

假设场景:启动 Nginx 时提示80 端口被占用,需找到占用端口的应用并处理。

步骤 1:查询 80 端口对应的 PID
sudo lsof -i:80

输出:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 5678 root 6u IPv4 12345 0t0 TCP *:http (LISTEN) httpd 5679 apache 6u IPv4 12345 0t0 TCP *:http (LISTEN)

→ 发现 PID=5678/5679 的httpd进程占用 80 端口。

步骤 2:查询 httpd 应用的详情
# 查看启动命令 sudo ps auxww | grep 5678

输出:

root 5678 0.0 2.0 80000 40000 ? Ss 09:00 0:03 /usr/sbin/httpd -f /etc/httpd/conf/httpd.conf

→ 应用是 Apache HTTP Server,配置文件路径etc/httpd/conf/httpd.conf,工作目录/var/www/html

步骤 3:处理端口冲突(可选)
# 停止 httpd 服务(如果不需要) sudo systemctl stop httpd # 或修改 Nginx 端口为 8080(避免冲突) sudo sed -i 's/listen 80;/listen 8080;/g' /etc/nginx/nginx.conf sudo systemctl restart nginx

三、常见问题排查

1. 端口被占用但查不到 PID?

原因:端口处于TIME_WAIT状态(连接断开后临时占用),而非LISTEN状态。

# 查看端口状态(含 TIME_WAIT) sudo ss -tuln | grep 8080 # 输出示例(TIME_WAIT 状态,无 PID) TIME-WAIT 0 0 192.168.1.100:8080 192.168.1.200:54321

解决:无需处理(系统会自动释放,默认超时 60 秒),或调整内核参数缩短超时时间:

sudo sysctl -w net.ipv4.tcp_fin_timeout=30 # 临时生效 echo "net.ipv4.tcp_fin_timeout=30" >> /etc/sysctl.conf # 永久生效 sudo sysctl -p
2. 多个同名进程(如多个 java),如何区分?

通过启动参数和应用路径区分:

# 查看所有 java 进程的完整启动命令 sudo ps auxww | grep java

输出示例:

root 1234 0.0 5.0 1000000 200000 ? Sl 10:00 0:05 /usr/bin/java -jar /opt/tomcat/myapp.jar # 应用 A root 5678 0.0 4.0 900000 180000 ? Sl 11:00 0:03 /usr/bin/java -jar /opt/jetty/otherapp.jar # 应用 B
3. 非 root 用户查不到进程信息?

原因:-p参数需要 root 权限才能获取 PID 和应用信息,切换 root 或加sudo即可。

四、一键脚本:快速查询端口→PID→应用详情

将以下脚本保存为port2app.sh,直接执行./port2app.sh 端口号即可输出完整信息:

#!/bin/bash if [ $# -ne 1 ]; then echo "用法:$0 端口号" exit 1 fi PORT=$1 echo "=== 端口 $PORT 对应的进程及应用信息 ===" echo "1. 端口关联的 PID:" sudo ss -tulnp | grep -w ":$PORT" || sudo lsof -i:$PORT | grep -w LISTEN echo -e "\n2. 应用详细信息:" PID=$(sudo ss -tulnp | grep -w ":$PORT" | awk -F 'pid=' '{print $2}' | awk -F ',' '{print $1}' 2>/dev/null) if [ -z "$PID" ]; then PID=$(sudo lsof -i:$PORT | grep -w LISTEN | awk '{print $2}' 2>/dev/null) fi if [ -n "$PID" ]; then echo "PID: $PID" echo "启动命令:" sudo ps auxww | grep -w $PID | grep -v grep echo "工作目录:" sudo pwdx $PID 2>/dev/null echo "应用路径:" sudo ls -l /proc/$PID/exe 2>/dev/null else echo "未找到监听端口 $PORT 的进程(可能处于 TIME_WAIT 状态)" fi

使用方法:

chmod +x port2app.sh sudo ./port2app.sh 8080

总结

核心逻辑:端口 → PID → 应用,关键命令组合:

  1. 查 PID:sudo ss -tulnp | grep 端口sudo lsof -i:端口
  2. 查应用:ps auxww | grep PID(启动命令)、pwdx PID(工作目录)、ls -l /proc/PID/exe(应用路径)

该流程适用于端口冲突排查、服务异常定位、进程审计等场景,完全适配 IT 运维 / DevOps 日常工作需求,可直接复制命令执行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 5:14:11

Wan2.2-T2V-5B与YOLOv5/YOLOv8对比:不同AI模型的应用边界探讨

Wan2.2-T2V-5B与YOLOv5/YOLOv8对比:不同AI模型的应用边界探讨 在今天的AI应用现场,一个开发者可能会同时面对两个截然不同的任务:一边是市场部要求“根据一段文案自动生成3秒宣传视频”,另一边是工厂产线提出“实时检测产品表面是…

作者头像 李华
网站建设 2026/6/18 15:40:20

Navicat Mac版试用重置终极解决方案:完全免费无限使用指南

Navicat Mac版试用重置终极解决方案:完全免费无限使用指南 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat Premium的14天试用期焦虑吗?数…

作者头像 李华
网站建设 2026/6/20 10:07:15

11、信号处理中的自适应核学习

信号处理中的自适应核学习 1. 自适应滤波概述 自适应滤波是信号处理中的核心主题。自适应滤波器是一种配备自适应算法的滤波器结构,该算法通常由误差信号驱动,用于调整传递函数。由于自适应滤波器能够调整其传递函数以匹配生成输入数据的系统的变化参数,因此在非平稳环境中…

作者头像 李华
网站建设 2026/6/20 3:51:35

音乐解锁技术深度解析:打破音频加密壁垒的专业指南

音乐解锁技术深度解析:打破音频加密壁垒的专业指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://…

作者头像 李华
网站建设 2026/6/20 6:53:25

FLUX.1-dev文生图模型实战:如何通过Git下载并部署多模态AI生成镜像

FLUX.1-dev文生图模型实战:如何通过Git下载并部署多模态AI生成镜像 在数字内容创作日益自动化的今天,一个能“读懂提示词、画出想象力”的AI模型,正从科研实验室快速走向产品前线。无论是广告公司需要为新品生成视觉原型,还是独立…

作者头像 李华
网站建设 2026/6/19 18:29:57

终极指南:夸克网盘自动化签到系统技术架构深度解析

终极指南:夸克网盘自动化签到系统技术架构深度解析 【免费下载链接】quark-auto-save 夸克网盘签到、自动转存、命名整理、发推送提醒和刷新媒体库一条龙 项目地址: https://gitcode.com/gh_mirrors/qu/quark-auto-save 夸克网盘自动化签到系统通过精心设计的…

作者头像 李华