谁在用你的端口 ?运维1秒定位 !

谁在用你的端口 ?运维1秒定位 !

在使用 Linux 系统进行开发或维护时,你可能遇到一个很麻烦的问题:某个端口被占用了,但你却不知道是哪一个进程在偷偷“霸占”。这篇文章将带你深入了解如何快速定位占用端口的元凶,并轻松解决问题。

图片

什么是端口占用?

端口是计算机网络中的入口或出口,用来帮助应用程序与外界通信,比如 HTTP 服务通常使用 80 端口,SSH 使用 22 端口。在多种服务并行运行时,系统会分配不同的端口。然而,如果某个端口已经被程序占用,想再次使用就会报错。定位是谁占用了端口,是解决问题的第一步。

举例来说,当你尝试运行一个 HTTP 服务时:

# 运行HTTP服务时端口被占用的典型报错
Error: listen EADDRINUSE: address already in use :::8000

这时你需要知道 “到底是谁在用 8000 端口?”

常用工具:lsof 和 netstat

Linux 提供了两种简单的命令工具可以帮助你快速检查端口的占用情况:lsof 和 netstat

1. 使用 lsof 定位端口占用

lsof 是一个非常强大的工具,它的名字意为“list open files”(列出当前系统打开的文件)。联网服务通常被视为文件,所以可以用它来查看端口占用情况。

基本用法:

# 使用 lsof 查看特定端口的占用情况
lsof -i:8000

图片

示例输出:

COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
node      1234  root   10u  IPv4  123456 0t0      TCP *:8000 (LISTEN)

解释:

  • COMMAND:占用端口的进程名称(这里是 node)。
  • PID:进程 ID。
  • USER:运行进程的用户。
  • NAME:详细信息包含端口号(:8000)和状态(LISTEN 表示监听中)。

2. 使用 netstat 查看端口状态

netstat 是另一种工具,可以分析当前网络连接情况,显示哪些进程在监听哪些端口。

基本用法:

# 使用 netstat 查看端口 8000 的占用
netstat -tunlp | grep 8000
  • 参数说明
    • -t:显示 TCP 连接。
    • -u:显示 UDP 连接。
    • -n:显示数字地址和端口,而不是别名。
    • -l:显示正在监听的端口。
    • -p:显示使用端口的程序及其 PID。

图片

示例输出:

tcp   0   0 0.0.0.0:8000   0.0.0.0:*   LISTEN   1234/node

解释:

  • 0.0.0.0:8000:表示监听的端口号。
  • 1234/node:显示它是由进程 node(PID: 1234)占用。

进程杀掉该怎么办?

一旦你确认是哪个进程占用端口,可以用 kill 命令结束进程。例如,以下命令将杀掉 PID 为 1234 的进程:

kill -9 1234

注意:

  • 使用 -9 强制结束进程。请谨慎操作,确保不会意外结束关键的系统进程。
  • 如果正在调试开发环境,重启相关应用程序即可。

一些实用的技巧

  • 防止重复端口占用:启动服务时,可以通过检查端口是否被占用,避免不必要的错误。例如,可以在启动之前执行:

    lsof -i:端口号
  • 批量查看所有监听端口:使用 lsof -i -P -n 命令可以列出所有打开端口。

    lsof -i -P -n | grep LISTEN
  • 查看服务名与端口的绑定:运行以下命令可快速查阅常见服务名称与端口的配置:

    cat /etc/services

总结

  • 1.首先使用 lsof 或 netstat 确认被占用的端口号以及对应的进程信息。
  • 2.根据 PID 使用命令 kill 停止进程。
  • 3.确保端口空闲后,重新启动服务即可。

掌握这些 Linux 工具,不仅能快速解决问题,还能让你充分理解系统的运行状态。


本站所有资源都是由网友投搞发布,或转载各大下载站,请自行检测软件的完整性!本站所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!如有侵权请联系我们删除下架,联系方式:273171821@qq.com
0
分享到: