服务器测评网
我们一直在努力

Linux如何查看进程占用的具体端口号?

在Linux系统中,查看进程与端口的对应关系是系统管理和网络排查中的常见需求,通过分析进程占用的端口,可以快速定位服务异常、端口冲突或安全威胁等问题,本文将详细介绍多种查看进程端口号的方法,涵盖基础命令、进阶技巧及实际应用场景,帮助读者全面掌握这一技能。

Linux如何查看进程占用的具体端口号?

使用netstat命令查看进程端口

netstat是传统的网络工具,用于显示网络连接、路由表、接口统计等信息,通过特定参数可以快速定位进程与端口的映射关系。

基本语法与常用参数

netstat [选项] [协议]
  • -t:显示TCP连接
  • -u:显示UDP连接
  • -n:以数字形式显示地址和端口,避免DNS解析,提高速度
  • -l:仅显示监听端口
  • -p:显示进程ID(PID)和进程名称(需root权限)

实用示例

  • 查看所有监听端口对应的进程

    sudo netstat -tulnp

    输出结果中,Local Address列显示端口和IP,PID/Program name列直接关联进程信息,

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd

    表示SSH服务(sshd进程)在22端口监听。

  • 查看指定端口的进程

    sudo netstat -tulnp | grep :80

    此命令可快速定位80端口(HTTP服务)的占用进程。

  • 查看TCP/UDP连接详情

    netstat -anp | grep ESTABLISHED  # 查看已建立的TCP连接
    netstat -unp                     # 查看UDP连接及进程

使用ss命令替代netstat

ssnetstat的替代工具,在Linux新版本中默认安装,其查询速度更快,功能更强大,尤其在处理大量网络连接时优势明显。

基本语法与常用参数

ss [选项] [过滤条件]
  • -t:TCP连接
  • -u:UDP连接
  • -l:仅显示监听端口
  • -n:数字形式显示
  • -p:显示进程信息
  • -a:显示所有连接(包括监听和非监听)

实用示例

  • 查看所有监听端口及进程

    Linux如何查看进程占用的具体端口号?

    sudo ss -tulnp

    输出格式与netstat类似,但效率更高,

    TCP   LISTEN 0      511          0.0.0.0:3306          0.0.0.0:*    users:(("mysqld",pid=5678,fd=11))

    表示MySQL服务(mysqld进程)监听3306端口。

  • 按端口过滤

    sudo ss -tulnp | grep ':443'
  • 查看进程的网络连接

    sudo ss -tulnp | grep 'PID=1234'  # 查看PID为1234的进程所有连接

使用lsof命令查看进程端口

lsof(List Open Files)用于列出系统打开的文件,在Linux中,一切皆文件,网络连接也被视为文件,因此可通过lsof精准定位进程与端口的关系。

基本语法

lsof [选项] [文件/目录/端口]
  • -i:显示网络连接
  • -P:不解析端口号为服务名称
  • -n:不解析主机名(与-i配合使用)
  • -t:仅输出进程ID(适合脚本调用)

实用示例

  • 查看指定端口占用的进程

    sudo lsof -i :8080

    输出结果会显示进程名称、PID、用户及连接状态,

    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    java      901 tomcat   0u  IPv6  12345      0t0  TCP *:8080 (LISTEN)
  • 查看进程的所有网络连接

    sudo lsof -i -P -n | grep 'PID=901'
  • 杀死占用端口的进程

    Linux如何查看进程占用的具体端口号?

    sudo kill -9 $(lsof -t -i :8080)  # 先获取PID,再强制终止

结合psgrep精准定位

当需要结合进程状态(如CPU、内存占用)分析端口问题时,可联合使用ps(查看进程)和grep(过滤信息)。

查看所有进程的端口占用情况

sudo ps aux | grep -v grep | grep -E 'LISTEN|:80'
  • ps aux:显示所有进程的详细信息
  • grep -v grep:过滤掉grep命令自身的进程
  • grep -E 'LISTEN|:80':匹配包含“LISTEN”状态或80端口的进程

通过PID反向查找端口

若已知进程PID,可通过/proc文件系统查询其端口信息:

sudo cat /proc/1234/net/tcp  # 查看TCP连接(十六进制端口需转换)

端口001F(十六进制)转换为十进制为31,对应端口31。

实际应用场景

排查端口冲突

当启动服务时提示“端口被占用”,可通过以下步骤定位:

sudo ss -tulnp | grep :端口号  # 查看占用端口的进程
sudo kill -9 PID             # 终止进程(谨慎操作)

分析异常网络连接

若发现服务器存在异常连接,可通过lsof -i查看进程来源,判断是否为恶意程序:

sudo lsof -i | grep ESTABLISHED | grep 'IP地址'

监控关键服务端口

编写定时任务,定期检查关键服务(如HTTP、MySQL)端口是否正常监听:

#!/bin/bash
if ! ss -tulnp | grep -q ':3306'; then
    echo "MySQL服务端口异常" | mail -s "端口告警" admin@example.com
fi

注意事项

  1. 权限问题:查看其他进程的端口信息需要root权限,否则-p参数可能不显示进程名。
  2. 端口范围:Linux端口分为知名端口(0-1023)、注册端口(1024-49151)和动态端口(49152-65535),需根据场景关注重点端口。
  3. IPv4与IPv6:部分命令需额外过滤IPv6(如grep IPv6),避免混淆。

通过以上方法,可灵活应对不同场景下的进程端口查询需求,提升系统管理效率,掌握这些工具不仅能快速定位问题,还能为网络调试和安全排查提供有力支持。

赞(0)
未经允许不得转载:好主机测评网 » Linux如何查看进程占用的具体端口号?