Linux系统排查利器,如何高效查询进程及其占用的端口号

admin
Linux系统排查中,高效查询进程及端口占用需掌握关键命令,使用lsof -i:端口号可快速定位特定端口对应的进程ID;利用netstat -tunlpss -tunlp可列出所有网络连接及进程详情,结合ps命令,运维人员能迅速解决端口冲突问题,提升故障排查效率。

在Linux服务器的日常运维和故障排查中,最常见的需求之一就是查询进程以及该进程具体绑定了哪个端口号,这通常用于解决端口冲突、排查服务异常占用、或进行安全审计。

虽然 ps 命令可以查看进程,但它不直接显示端口信息,为了快速、准确地获取“进程”与“端口”的对应关系,Linux 提供了几个非常强大的工具,本文将详细介绍三种最常用的方法。

使用 netstat 命令(经典方法)

netstat 是最老牌的网络状态查看工具,几乎在所有 Linux 发行版中都已预装。

Linux系统排查利器,如何高效查询进程及其占用的端口号

命令格式:

netstat -tunlp

参数详解:

  • -t (tcp):显示 TCP 协议的连接。
  • -u (udp):显示 UDP 协议的连接。
  • -n (numeric):以数字形式显示 IP 地址和端口号,而不是尝试解析为主机名或服务名(这通常是我们需要的,能提高速度)。
  • -l (listening):仅显示处于监听状态的端口。
  • -p (process):显示进程 ID (PID) 和进程名称。

示例: 如果你想查看 8080 端口被哪个进程占用,可以结合 grep 使用:

sudo netstat -tunlp | grep 8080

输出示例:

tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1234/java

这表示进程 ID 为 1234java 进程正在监听 8080 端口。


使用 ss 命令(推荐方法)

ss (Socket Statistics) 是现代 Linux 系统(如 CentOS 7+, Ubuntu 16.10+)推荐使用的工具,它的速度比 netstat 快得多,因为它直接读取 /proc 下的内核信息。

命令格式:

ss -tunlp

参数含义与 netstat 完全一致,用法也完全相同。

示例: 查找占用 3306 端口(通常是 MySQL)的进程:

sudo ss -tunlp | grep 3306

输出示例:

LISTEN     0      128       0.0.0.0:3306                  0.0.0.0:*       users:(("mysqld",pid=5678,fd=15))

使用 lsof 命令(进程文件打开工具)

lsof (List Open Files) 的功能非常强大,它可以列出当前系统打开的所有文件,在网络连接中,它被视为“网络文件”,因此可以列出网络端口。

命令格式:

lsof -i -P -n

参数详解:

  • -i:列出网络连接。
  • -P:不将端口号转换为服务名(如将 80 转换为 http),只显示数字,方便查看。
  • -n:不将 IP 地址转换为主机名,提高速度。

示例: 查找占用端口的进程:

sudo lsof -i -P -n

如果你知道 PID,想看它占用了哪些端口:

sudo lsof -p <PID>

总结与实战技巧

在实际工作中,为了提高效率,通常会结合 grep 进行过滤:

  1. 按端口号查询进程:

    sudo ss -tunlp | grep :8080
  2. 按进程名查询端口:

    sudo ss -tunlp | grep nginx
  3. 杀掉占用端口的进程: 如果确认该进程不需要,可以使用 kill 命令(需要先通过上述命令获取 PID):

    sudo kill -9 <PID>

建议: 在新系统中,优先使用 ss 命令,因为它更快且是系统内置工具,不会因为依赖库缺失而报错。

文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码