管理 Linux 服务器时常要关注机器的网络情况,特别是网络端口的占用和连接信息,它们能反映出目前系统开启了哪些端口和服务,有多少连接,以及各 IP 的连接信息。根据这些信息可以及时发现并防范各种问题。
使用 netstat 命令
在 Linux 系统上比较常用的一个网络连接和端口查看命令是 netstat
。大多数 Linux 发行版都预装了这个工具,如果没有就需要自己安装,在 Debian 或是 Ubuntu 上安装的命令如下:
sudo apt install net-tools
默认不加参数的 netstat
命令显示的数据比较繁杂,一些与网络无关的进程间通讯信息也在其中。所以需要用参数过滤一下:
netstat -tul
上面命令使用了 3 个参数:
t
显示 TCP 连接d
显示 UDP 连接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)