linux中确认进程监听端口有五种方法:一、ss命令(如sudo ss -tulnp);二、lsof命令(如sudo lsof -i :3306);三、netstat命令(如sudo netstat -tulnp);四、fuser命令(如sudo fuser 80/tcp);五、/proc文件系统手动验证(如cat /proc/pid/net/tcp)。

如果您在Linux系统中需要确认某个进程正在监听哪个端口,或想验证特定端口是否已被某进程绑定,则需通过内核暴露的套接字信息进行反向查询。以下是多种可靠且互为补充的查看方法:
一、使用ss命令查看进程与端口映射
ss直接读取内核socket表,响应快、结果实时,是现代Linux发行版首选工具;加-p参数可关联进程信息,但需root权限才能显示其他用户进程的名称和PID。
1、列出所有监听状态的TCP/UDP端口及对应进程:sudo ss -tulnp
2、过滤指定端口号(如8080),精确定位占用者:sudo ss -tulnp | grep ':8080'
3、仅显示IPv4监听端口并排除通配地址(如0.0.0.0),聚焦本机绑定:sudo ss -tlnp | grep ':8080' | grep -v '\*:'
二、使用lsof命令精准定位进程端口关系
lsof将网络套接字视为“打开的文件”,能提供最完整的进程上下文字段(COMMAND、PID、USER、TYPE、NODE等),特别适合冲突排查与审计场景。
1、直接查询某端口(如3306)被哪个进程占用:sudo lsof -i :3306
2、列出全部处于LISTEN状态的TCP端口,禁用主机名与服务名解析以提升速度:sudo lsof -iTCP -sTCP:LISTEN -P -n
3、已知进程名(如redis-server)时,反查其监听的所有端口:sudo lsof -i -a -p $(pidof redis-server)
三、使用netstat命令兼容旧环境或调试需求
netstat虽在新系统中默认未安装且依赖过时接口,但在嵌入式设备、容器基础镜像或无ss/lsof的最小化系统中仍具不可替代性;其参数语义清晰,便于人工解读。
1、显示全部监听中的TCP/UDP端口及其进程ID与程序名:sudo netstat -tulnp
2、过滤出特定端口(如22)的监听行,快速识别SSH服务绑定情况:sudo netstat -tulnp | grep ':22'
3、仅以数字形式输出地址与端口,避免DNS解析延迟或失败干扰:sudo netstat -tuln | grep ':22'
四、使用fuser命令快速获取并操作占用进程
fuser专为文件与套接字设计,不解析连接状态,可单步返回PID甚至一键终止,适用于脚本自动化或紧急释放端口场景。
1、直接输出占用某端口(如80)的进程ID(TCP协议):sudo fuser 80/tcp
2、显示详细占用信息,包括用户名、访问类型及命令名:sudo fuser -v 80/tcp
3、强制终止所有占用该端口的进程(高风险操作,仅限明确授权场景):sudo fuser -k 80/tcp
五、通过/proc文件系统手动验证进程网络绑定
/proc/PID/fd/目录下包含进程打开的所有文件描述符,其中socket链接指向内核socket结构;结合/proc/PID/net/可进一步确认监听行为,适用于无外部工具或权限受限环境。
1、获取目标进程PID(例如nginx):pidof nginx
2、查看该进程打开的网络套接字文件描述符:sudo ls -l /proc/$(pidof nginx)/fd/ | grep socket
3、读取该进程的TCP监听表(IPv4):sudo cat /proc/$(pidof nginx)/net/tcp | tail -n +2 | awk '{print $2}' | cut -d: -f2 | xargs -n1 printf "%d\n" 16#










