linux命令netstat的几个用法


Netstat 简介

Netstat 是linux下的一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,还能列出处于监听状态(即等待接入请求)的套接字。如果你想查看系统某一个端口是否被占用,就可以用netstat命令。另外netstat还可以列出本机路由信息和网络接口信息等。

1. 列出网络连接

1
netstat -antuple

由于netstat命令参数比较多,查看网络连接相关,常用的就是上面这些, 这里为了方便记忆组合了下:an tuple, 两个简单的英文单词~

参数说明:

  • -a: –all, 显示所有连接的socket (默认: connected)
  • -n: –numeric, 不解析名称,包括主机名,端口名和用户名
  • -t: –tcp, 只显示tcp连接
  • -u: –udp, 只显示udp连接
  • -p: –programs, 显示连接进程的PID或进程名
  • -l: –listening, 显示正在监听的socket
  • -e: –extend, 显示更多信息,包括连接进程的用户名等

注意:

  1. 将 -n 和 -e 选项一起使用,会列出用户的 ID 号,而不是用户名。
  2. 使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。

2. 显示内核路由信息

1
netstat -rn

使用 -r 选项打印内核路由信息。打印出来的信息与 route 命令输出的信息一样。也可以使用 -n 选项禁止名称解析。

参数说明:

  • -r: –route, 显示内核路由信息
  • -n: 与上面相同

3. 显示网络接口信息

1
netstat -ie

使用 -i 选项可以输出网络接口信息, 但是输出的信息比较原始。搭配 -e 选项,可以输出用户友好的信息,输出结果与 ifconfig 一样。

参数说明:

  • -i: –interfaces, 显示网络接口信息
  • -e: 与上面相同

4. 其他选项

  • -s: –statistics, 显示统计数据
  • -g: –groups, 显示多播,组播信息
  • -c: –continuous, 持续打印信息

5. 用法举例

5.1 打印 active 状态的连接

active 状态的套接字连接用 “ESTABLISHED” 字段表示,所以我们可以使用 grep 命令获得 active 状态的连接:

1
2
3
4
5
$ netstat -atnp | grep ESTA
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 192.168.1.2:49156 173.255.230.5:80 ESTABLISHED 1691/chrome
tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED 1691/chrome

配合 watch 命令监视 active 状态的连接:

1
$ watch -d -n0 "netstat -atnp | grep ESTA"

5.2 查看服务是否在运行

比如查看mysql服务:

1
2
3
4
$ sudo netstat -anple | grep mysql
tcp6 0 0 :::3306 :::* LISTEN 122 26837 1041/mysqld
unix 2 [ ACC ] STREAM LISTENING 26838 1041/mysqld /var/run/mysqld/mysqld.sock
unix 3 [ ] STREAM CONNECTED 26817 1041/mysqld