linux怎么查看程序占用哪个端口号

linux怎么查看程序占用哪个端口号
最新回答
风花雪月夜

2022-11-08 23:59:37

在Linux系统中,可通过以下方法查看程序占用的端口号

1、使用netstat命令
netstat是传统工具,用于查看网络连接和监听状态。执行以下命令可筛选特定进程的端口信息:
netstat -tuln | grep <进程名或PID>
参数说明

  • -t:显示TCP连接
  • -u:显示UDP连接
  • -l:仅显示监听状态的端口
  • -n:以数字形式显示端口号(不解析服务名称)
    输出结果会包含协议类型、本地地址、外部地址及进程状态,通过grep过滤后可快速定位目标进程的端口。

2、使用lsof命令
lsof通过文件描述符关联进程与端口,可直接查询特定端口或进程的占用情况:

  • 查询指定端口:
    lsof -i :<端口号>
  • 限定协议类型(TCP/UDP):
    lsof -i TCP:<端口号>
    lsof -i UDP:<端口号>
    输出内容包含进程ID(PID)、用户、命令名称及端口状态,适合快速确认端口归属。

3、使用ss命令
ss是netstat的现代替代工具,查询效率更高,语法与netstat类似:
ss -tuln | grep <进程名或PID>
优势

  • 底层使用内核空间接口,速度更快
  • 支持更详细的过滤条件(如-p直接显示进程名)
  • 输出格式更简洁,适合脚本处理

4、通过/proc文件系统
Linux内核通过/proc虚拟文件系统暴露进程信息,每个进程对应/proc/<PID>目录。执行以下步骤可手动解析端口:

  1. 确认进程PID(如通过ps aux | grep <进程名>)
  2. 查看进程打开的套接字文件:
    ls -l /proc/<PID>/fd | grep socket
    结果解读
  • 符号链接指向的socket:[<inode>]中的inode号需与ss -tulnp输出的inode匹配
  • 此方法需结合其他工具解析,适合深度调试场景

应用场景建议

  • 快速排查:优先使用ss或lsof,直接关联进程与端口
  • 脚本自动化:ss -tulnp | awk '{print $5,$7}'可提取端口与进程名
  • 兼容性需求:旧系统使用netstat,确保工具可用性
  • 底层调试:通过/proc分析内核级套接字信息

以上方法覆盖了从用户态到内核态的多种查询路径,可根据实际需求选择最适合的工具组合。