如何查找Linux占用端口进程 netstat与ss命令结合使用

如何查找Linux占用端口进程 netstat与ss命令结合使用
最新回答
叼辣条闯世界

2022-12-15 14:02:23

在Linux系统中,查找占用特定端口的进程可通过netstat或ss命令实现,二者结合使用能高效定位问题。以下是具体方法及扩展工具说明:

一、使用 netstat 命令

netstat 是经典工具,通过解析/proc文件系统获取网络连接信息,适合大多数场景。

  • 基本语法

    sudo netstat -tulnp | grep :<端口号>

    选项说明

    -t:显示TCP连接。

    -u:显示UDP连接。

    -l:仅显示监听状态的套接字。

    -n:以数字形式显示地址和端口,避免解析主机名和服务名(加快速度)。

    -p:显示进程ID(PID)和程序名称(需root权限)。

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

    sudo netstat -tulnp | grep :80

    输出示例

    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12345/nginx

    关键信息:12345为PID,nginx为进程名。

二、使用 ss 命令

ss(Socket Statistics)是netstat的现代替代品,直接从内核获取信息,性能更高,尤其适合高并发场景。

  • 基本语法

    sudo ss -tulnp | grep :<端口号>

    选项说明:与netstat基本一致,但输出更简洁。

  • 示例:查找占用3306端口(MySQL默认端口)的进程

    sudo ss -tulnp | grep :3306

    输出示例

    tcp LISTEN 0 80 0.0.0.0:3306 0.0.0.0:* users:(("mysqld",pid=54321,fd=28))

    关键信息:mysqld为进程名,54321为PID。

三、通过PID获取进程详细信息

获取PID后,使用ps命令查看进程的完整信息(如用户、启动时间、命令行参数等):

ps -ef | grep <PID># 或ps aux | grep <PID>
  • 示例:ps -ef | grep 12345
四、其他工具补充1. lsof 命令
  • 功能:列出所有打开的文件(包括网络套接字),直接显示进程名、PID、用户等信息。
  • 语法:sudo lsof -i :<端口号>
  • 示例:sudo lsof -i :8080输出示例:COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEjava 67890 myuser 12u IPv6 123456 0t0 TCP *:http-alt (LISTEN)
2. fuser 命令
  • 功能:快速显示或终止占用指定端口的进程。
  • 语法:sudo fuser -n tcp <端口号> # TCP端口sudo fuser -n udp <端口号> # UDP端口
  • 示例:sudo fuser -n tcp 80输出示例:80/tcp: 12345

    终止进程(慎用):sudo fuser -k -n tcp 80

五、处理端口冲突的常见步骤
  1. 确认进程合法性

    通过ps aux | grep <PID>查看进程的用户和启动命令,判断是否为预期服务。

  2. 检查服务日志

    例如,Nginx的错误日志(/var/log/nginx/error.log)或通过journalctl -u <服务名>查看系统日志。

  3. 优雅停止服务

    使用systemctl stop <服务名>(Systemd系统)或service <服务名> stop(SysVinit系统)。

  4. 检查配置冲突

    确保多个服务未配置为监听同一端口(如Nginx和Apache默认均监听80端口)。

  5. 处理TIME_WAIT状态

    若端口处于TIME_WAIT状态(历史连接遗留),可调整内核参数net.ipv4.tcp_tw_reuse=1(需谨慎)。

六、为什么推荐 ss 替代 netstat?
  • 性能优势:ss通过Netlink套接字直接从内核获取数据,避免解析/proc文件系统,速度更快。
  • 信息丰富:支持显示TCP拥塞控制算法、内存使用等高级信息(故障排查时更有价值)。
  • 现代兼容性:在繁忙服务器上,netstat可能因性能瓶颈导致延迟,而ss无此问题。
总结
  • 快速定位:优先使用ss -tulnp | grep :<端口号>或netstat -tulnp | grep :<端口号>。
  • 详细信息:通过lsof -i :<端口号>或ps -ef | grep <PID>补充。
  • 高效终止:确认进程后,用systemctl stop或fuser -k处理。
  • 长期优化:检查配置文件避免冲突,调整内核参数处理TIME_WAIT状态。