zzxworld

Linux 系统通过命令查看网络端口占用情况

Linux 系统通过命令查看网络端口占用情况

管理 Linux 服务器时常要关注机器的网络情况,特别是网络端口的占用和连接信息,它们能反映出目前系统开启了哪些端口和服务,有多少连接,以及各 IP 的连接信息。根据这些信息可以及时发现并防范各种问题。

使用 netstat 命令

在 Linux 系统上比较常用的一个网络连接和端口查看命令是 netstat。大多数 Linux 发行版都预装了这个工具,如果没有就需要自己安装,在 Debian 或是 Ubuntu 上安装的命令如下:

sudo apt install net-tools

默认不加参数的 netstat 命令显示的数据比较繁杂,一些与网络无关的进程间通讯信息也在其中。所以需要用参数过滤一下:

netstat -tul

上面命令使用了 3 个参数:

  1. t 显示 TCP 连接
  2. d 显示 UDP 连接
  3. l 显示正在侦听的连接

在我的这台电脑上,命令执行结果如下:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:mysql         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*

从上面的结果中可以看到,显示的是服务名称,并没有显示端口号,这个可以通过 -n 选项来实现:

netstat -tuln

执行结果如下:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
udp        0      0 0.0.0.0:68              0.0.0.0:* 

可以看到,服务名称变成了端口号。

使用 lsof 命令

在 Linux 上查看网络端口的另一个方法是使用 lsof 命令。它本身是用来查看在 Linux 系统上打开的文件和进程信息的,不过在 Linux 上,万物皆文件,所以这个命令变相的也可以用来查看网络端口的占用情况。

使用此命令查看网络端口信息的使用方式如下:

sudo lsof -nP -iTCP -sTCP:LISTEN

注意必须要以管理权限执行,否则可能得不到任何结果。在我的电脑上,该命令的执行结果如下:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     288  root    3u  IPv4  11320      0t0  TCP *:22 (LISTEN)
sshd     288  root    4u  IPv6  11367      0t0  TCP *:22 (LISTEN)
mariadbd 350 mysql   19u  IPv4  11642      0t0  TCP 127.0.0.1:3306 (LISTEN)