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

linux如何查询进程占用的端口及具体命令有哪些?

在Linux系统中,查询进程与端口的占用情况是系统管理和故障排查中的常见操作,掌握相关命令和方法,能够帮助管理员快速定位服务异常、资源冲突等问题,本文将详细介绍几种主流的查询方式,从基础到进阶,涵盖不同场景下的应用技巧。

linux如何查询进程占用的端口及具体命令有哪些?

使用netstat命令查询端口及进程

netstat是传统的网络状态查看工具,能够显示网络连接、路由表、接口统计等信息,通过特定参数,可以精准定位端口占用的进程。

基本语法与常用参数

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

实用示例

  1. 查看所有监听端口

    netstat -tuln

    输出结果包括本地地址(Local Address)和端口(Port),以及协议类型(如tcpudp)。

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN  
    tcp6       0      0 :::80                   :::*                    LISTEN  

    其中0.0.0:22表示所有IP地址的22端口(SSH服务)被监听,::80表示IPv6的80端口(HTTP服务)被监听。

  2. 查看指定端口的占用进程
    若需查询8080端口的占用情况,可结合grep过滤:

    netstat -tuln | grep 8080

    若需显示进程详细信息(如PID和进程名),需添加-p参数(需root权限):

    sudo netstat -tulnp | grep 8080

    输出示例:

    tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1234/nginx: worker  

    其中1234为进程ID,nginx: worker为进程名称。

  3. 查看所有网络连接(包括非监听端口)

    netstat -an

    -a表示显示所有连接,-n避免DNS解析,适合快速查看连接状态(如ESTABLISHEDTIME_WAIT等)。

使用ss命令替代netstat(推荐)

ssiproute2工具包的一部分,相较于netstatss在查询大量连接时速度更快,功能更强大,在现代Linux发行版中,ss已逐渐取代netstat成为主流工具。

基本语法与常用参数

ss [选项] [过滤条件]
  • -t:TCP端口
  • -u:UDP端口
  • -l:仅显示监听端口
  • -n:数字形式显示
  • -p:显示进程ID和名称
  • -a:显示所有连接

实用示例

  1. 查看所有监听端口

    ss -tuln

    输出格式与netstat类似,但信息更简洁高效。

    linux如何查询进程占用的端口及具体命令有哪些?

  2. 查询指定端口的占用进程

    sudo ss -tulnp | grep 8080

    输出示例:

    tcp    LISTEN   0      511       0.0.0.0:8080      0.0.0.0:*    users:(("nginx",pid=1234,fd=6))  

    users字段直接显示进程名和PID,比netstat更直观。

  3. 按进程名或PID过滤
    若需查询名为java的进程占用的所有端口:

    sudo ss -tulnp | grep java

    或查询PID为5678的进程的端口占用:

    sudo ss -tulnp | grep 'pid=5678'

使用lsof命令查询端口关联进程

lsof(List Open Files)是一个功能强大的工具,用于列出系统中被打开的文件、目录、网络连接等,在Linux中,一切皆文件,端口也被视为一种“文件”,因此可通过lsof查询端口占用的进程。

基本语法

lsof [选项] [文件/端口]
  • -i:显示符合条件的网络连接
  • -P:不显示端口号对应的名称(避免DNS解析)
  • -n:不显示主机名(与-i配合使用)
  • -t:仅显示进程ID(适合脚本处理)

实用示例

  1. 查询指定端口的占用进程

    sudo lsof -i :8080

    输出示例:

    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME  
    nginx    1234   root    6u  IPv4   12345      0t0  TCP *:http-alt (LISTEN)  

    其中COMMAND为进程名,PID为进程ID,NAME为监听的地址和端口。

  2. 查询指定进程占用的所有端口

    sudo lsof -i -P -n | grep nginx

    -i显示网络连接,-P -n避免解析,结合grep过滤进程名。

  3. 仅获取进程ID(用于脚本)

    sudo lsof -ti :8080

    直接输出进程ID(如1234),适合后续操作(如kill命令)。

    linux如何查询进程占用的端口及具体命令有哪些?

结合grepawk高级过滤

在实际场景中,可能需要更复杂的过滤逻辑,查询所有监听端口的进程并按端口号排序:

sudo netstat -tulnp | grep LISTEN | awk '{print $4, $7}' | sort -t: -k2 -n

或使用ss命令:

sudo ss -tulnp | grep LISTEN | awk '{print $5, $7}' | sort -t: -k2 -n
  • awk提取第4列(地址:端口)和第7列(进程信息)
  • sort -t: -k2 -n按端口号(冒号后的数字)升序排序

端口占用问题的解决步骤

查询到端口占用后,若需释放端口或解决冲突,可按以下步骤操作:

  1. 确认进程合法性
    通过ps -ef | grep PID查看进程详情,判断是否为必要服务(如nginxmysql)或异常进程。

  2. 终止占用进程
    若进程异常,可通过kill命令终止:

    kill -9 PID  # 强制终止(谨慎使用)

    或先尝试优雅终止:

    kill PID
  3. 修改服务端口
    若为合法服务(如Web服务),建议修改配置文件中的端口(如nginx.conf中的listen 8080),重启服务后即可释放原端口。

  4. 检查端口范围限制
    部系统可能限制用户使用低于1024的端口(需root权限),若非root用户需使用1024以上的端口。

在Linux中,查询进程端口占用主要有三种工具:

  • netstat:传统工具,功能全面但速度较慢;
  • ss:现代工具,高效推荐,适合大规模连接查询;
  • lsof:灵活性强,可按端口、进程双向查询,适合复杂场景。

掌握这些命令及其参数组合,能够快速定位端口占用问题,提升系统管理效率,日常运维中,建议优先使用ss命令,结合grepawk实现精准过滤,确保排查过程高效、准确。

赞(0)
未经允许不得转载:好主机测评网 » linux如何查询进程占用的端口及具体命令有哪些?