麒麟系统中定位进程端口的五种高级方法:一、lsof -p按pid查套接字;二、lsof -c按命令名批量查端口;三、lsof -i :端口反向查归属进程;四、lsof -i -p -n结合grep精准过滤;五、lsof +d扫描目录关联网络资源。

如果您在麒麟操作系统中需要确认某个特定进程正在监听或使用哪些网络端口,或需诊断端口冲突、服务未响应等问题,则可能是由于进程未正确绑定端口、端口被其他实例抢占或权限配置异常所致。以下是多种精准定位特定进程端口的高级方法:
一、使用 lsof -p 按 PID 查看进程全部网络套接字
该方法直接读取指定进程的文件描述符目录(/proc/PID/fd),完整列出其打开的所有TCP/UDP套接字、监听端口及连接状态,适用于已知PID的深度排查场景。
1、获取目标进程PID,例如查询nginx主进程:ps aux | grep nginx | grep master
2、执行命令展示该进程所有网络相关资源:lsof -p 12345 -i(将12345替换为实际PID)
3、若仅需显示IPv4 TCP监听端口,添加过滤:lsof -p 12345 -iTCP -sTCP:LISTEN
4、为避免域名解析延迟并显示端口号而非服务名,强制启用数值格式:lsof -nP -p 12345 -i
二、使用 lsof -c 按命令名匹配所有同名进程端口
该方法适用于存在多个同名进程(如多worker模式的Java应用或Nginx worker)且需一次性汇总其全部端口占用情况,无需逐个查PID,提升批量分析效率。
1、列出所有以“java”开头的进程所打开的网络连接:lsof -c java -i
2、精确匹配完整命令名(含路径),排除子字符串干扰:lsof -c "/usr/bin/python3" -iTCP
3、结合状态筛选,仅显示处于ESTABLISHED状态的外连:lsof -c nginx -iTCP -sTCP:ESTABLISHED
4、输出仅含PID与端口列,便于脚本提取:lsof -c sshd -i -F p
三、使用 lsof -i :端口 反向定位占用端口的进程
当已知端口号但不确定归属进程时,此方法通过端口反查PID、用户及命令,是端口冲突诊断的第一步,支持TCP/UDP及通配端口范围。
1、查看80端口被哪个进程监听:sudo lsof -i :80
2、指定协议类型,避免UDP干扰:sudo lsof -iTCP :443
3、查询端口范围(如8000–8010)内所有活动连接:sudo lsof -i :8000-8010
4、静默模式下仅返回PID,供后续命令链式调用:sudo lsof -t -i :22
四、使用 lsof -i -P -n 结合 grep 精确过滤进程与端口组合
该方法利用原始IP和端口数值输出,规避DNS解析与服务名映射开销,再通过文本匹配实现进程名与端口的交叉筛选,适合复杂环境下的精准定位。
1、列出所有监听端口并高亮显示包含“nginx”和“:80”的行:sudo lsof -i -P -n | grep -E "(nginx.*:80|:80.*nginx)"
2、筛选属于用户www-data且使用TCP 8080端口的所有连接:sudo lsof -iTCP:8080 -u www-data -P -n
3、排除本地回环地址,仅关注外部绑定:sudo lsof -iTCP -P -n | grep -v "127.0.0.1:" | grep ":3306"
4、统计某进程监听的唯一端口数量:sudo lsof -c mysqld -iTCP -sTCP:LISTEN -P -n | awk '{print $9}' | sort -u | wc -l
五、使用 lsof +D 配合 -i 扫描指定目录下进程关联的网络资源
该方法适用于容器化或沙箱部署场景,当进程工作目录集中(如/var/lib/docker/containers),可通过目录路径快速收敛关联进程及其网络行为,突破PID未知限制。
1、扫描 /opt/app/serviceA 目录下所有进程打开的网络连接:sudo lsof +D /opt/app/serviceA -i
2、限定仅输出TCP监听项,并去除重复:sudo lsof +D /usr/local/nginx -iTCP -sTCP:LISTEN -P -n | sort -u -k 9
3、配合用户筛选,定位指定用户在该目录启动的监听服务:sudo lsof +D /home/user/app -i -u user -P -n
4、导出结果至临时文件用于离线分析:sudo lsof +D /var/log -iUDP > /tmp/udp_procs.log











