如何检查端口占用:netstat和lsof指令

在网络故障排查和系统管理中,检查端口占用情况是一项常见且重要的任务。本文将详细介绍如何使用 netstat 和 lsof 这两个强大的工具来检查端口占用和相关服务。

1. 使用 netstat 查看端口占用

netstat (network statistics) 是一个用于显示网络连接、路由表、接口统计等信息的命令行工具。

1.1 最常用的 netstat 命令

netstat -an

这是最常用的形式,让我们解析其参数:

-a: 显示所有连接和监听端口
-n: 以数字形式显示地址和端口号,而不是尝试解析主机名、服务名或端口名
这个命令会显示所有的网络连接,包括 TCP、UDP,以及处于 LISTEN 状态的端口。

1.2 查看占用端口的进程

如果你想知道哪些进程占用了端口,可以添加 -p 参数:

sudo netstat -anp

注意:使用 -p 通常需要 root 权限。

1.3 netstat 输出解析

运行 netstat -anp 后,你会看到类似以下的输出:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      5678/nginx
udp        0      0 0.0.0.0:68              0.0.0.0:*                           910/dhclient
  • Proto: 协议(TCP 或 UDP)
  • Recv-Q 和 Send-Q: 接收队列和发送队列中的字节数
  • Local Address: 本地地址和端口号
  • Foreign Address: 远程地址和端口号
  • State: 连接状态(如 LISTEN, ESTABLISHED 等)
  • PID/Program name: 使用该连接的进程ID和进程名称

1.4 其他有用的 netstat 参数

-t: 仅显示 TCP 连接
-u: 仅显示 UDP 连接
-l: 只显示监听状态(LISTEN)的连接
这些参数可以组合使用,例如:

1.5 查看特定端口

通常,我们的netstat指令要结合grep,比如我们只想查看特定端口(例如 8886):

netstat -an | grep 8886

在这里插入图片描述
可以看到-an指令基本上只能看到用什么协议,只是知道这个端口被占用了,让我们来使用-anp

netstat -anp | grep 8886

在这里插入图片描述

如果你是普通用户的话,你可以发现,你仍然是看不见的

普通用户需要提权

sudo netstat -anp | grep 8886

然后我可以看到进程号,以及是docker的服务占用了ipv4/ipv6协议下的8886端口
在这里插入图片描述

2. 使用 lsof 查看端口占用

lsof (List Open Files) 是另一个强大的工具,不仅可以查看端口占用,还可以查看进程打开的文件。

2.1 基本用法

查看所有网络连接:

sudo lsof -i

查看特定端口(如 8080):

sudo lsof -i :8080

2.2 lsof 输出解析

运行 sudo lsof -i 后,你会看到类似以下的输出:

COMMAND     PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
sshd       1234   root    3u  IPv4    12345      0t0  TCP *:22 (LISTEN)
nginx      5678   www     6u  IPv6    23456      0t0  TCP *:80 (LISTEN)
  • COMMAND: 进程名称
  • PID: 进程 ID
  • USER: 运行该进程的用户
  • FD: 文件描述符
  • TYPE: 文件类型
  • DEVICE: 设备号
  • SIZE/OFF: 文件大小或偏移量
  • NODE: 节点号
  • NAME: 文件名,对于网络连接,显示协议、本地地址、远程地址、状态

3. netstat 和 lsof 的比较

netstat 优势:

更直观的网络连接视图
在大多数系统中默认安装
参数组合灵活,适合快速检查

lsof 优势:

提供更详细的进程信息
可以同时查看文件系统和网络使用情况
在处理大量连接时通常比 netstat 更快

看自己习惯哪个吧

你可能感兴趣的:(服务器,运维)