Linux下shell命令用法及常见用例:netstat

netstat命令用来查看系统中所有的网络套接字连接情况。

命令格式

netstat [选项]

参考:https://linux.die.net/man/8/netstat。

netstat命令用来查看系统中所有的网络套接字连接情况。

命令格式

netstat [选项]

参考:https://linux.die.net/man/8/netstat。

netstat命令用来查看系统中所有的网络套接字连接情况。

命令格式

netstat [选项]

命令功能

netstat命令用来查看系统中所有的网络套接字连接情况,包括TCP、UDP和Unix套接字。也可以显示路由表,接口状态,masquerade 连接,多播成员(Multicast Memberships)等等。另外,它还可以列出处于监听状态(等待接入请求)的套接字,比如想确认系统中的web服务是否起来,就可以查看80端口有没有打开。

命令参数

  • -a或–all:显示所有选项,默认不显示LISTEN相关。
  • -t或–tcp:(TCP)仅显示TCP相关选项。
  • -u或–udp:(UDP)仅显示UDP相关选项。
  • -x或–unix:此参数的效果和指定”-A unix”参数相同。
  • -n或–numeric:拒绝显示别名,能显示数字的全部转化成数字。
  • -l或–listening:仅列出有在Listen(监听)的服务状态。
  • -g或–groups:显示多重广播功能群组组员名单。
  • -p或–programs:显示建立相关链接的程序名和PID。
  • -r或–route:显示路由信息,路由表。
  • -e或–extend:显示扩展信息,例如UID等。
  • -s或–statistics:按各个协议进行统计。
  • -c或–continuous:每隔一个固定时间,执行该netstat命令。
  • -g或–groups:显示多重广播功能群组组员名单。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到。

输出信息含义

netstat的输出结构可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接。其中”Recv-Q”和”Send-Q”指的是接收队列和发送队列。

1
2
3
4
5
6
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 VM01.root:ssh 61.149.11.230:21859 ESTABLISHED
tcp 0 0 localhost:51476 localhost:27017 ESTABLISHED
tcp 0 0 VM01.root:ssh 61.149.11.230:50883 ESTABLISHED
tcp 0 0 VM01.root:58300 47.89.193.173:3666 ESTABLISHED

另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

1
2
3
4
5
6
7
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 15049 /run/user/0/systemd/notify
unix 3 [ ] DGRAM 13640 /run/systemd/notify
unix 2 [ ] DGRAM 13645 /run/systemd/journal/syslog
unix 8 [ ] DGRAM 13660 /run/systemd/journal/socket
unix 25 [ ] DGRAM 10467 /run/systemd/journal/dev-log

实例

实例:列出当前所有的连接(-a)
命令:netstat -a
输出:

1
2
3
4
5
6
7
8
root@iZhp3fz3iqsadyes2s8ayeZ:~# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:8838 *:* LISTEN
tcp 0 0 localhost:27017 *:* LISTEN
tcp 0 0 *:8330 *:* LISTEN
tcp 0 0 localhost:submission *:* LISTEN
......

实例:列出所有TCP端口(-t)
命令:netstat -at
输出:

1
2
3
4
5
6
7
root@iZhp3fz3iqsadyes2s8ayeZ:~# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:8838 *:* LISTEN
tcp 0 0 localhost:27017 *:* LISTEN
tcp 0 0 *:8330 *:* LISTEN
tcp 0 0 localhost:submission *:* LISTEN

示例:列出所有监听TCP的端口,数字显示
描述:查看本机监听的(-l)TCP连接(-t)的IP地址的数字显示(-n)。不适用-n的话,就会用端口的约定名称来显示,例如80端口,会显示成http。
命令:netstat -tnl
输出:

1
2
3
4
5
6
root@iZhp3fz3iqsadyes2s8ayeZ:~# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:8838 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8330 0.0.0.0:* LISTEN

示例:获取本机的所有的TCP连接的进程名、进程号以及用户ID
描述:使用-p选项查看进程信息,-ep选项可以同时查看进程名和用户名。另外,-n和-e选项一起使用,User列的属性就是用户ID,而不是用户名。
查看本机所有的(al)TCP连接的(t)进程名(p)和用户名ID(ne)。
命令:netstat -altpen

1
2
3
4
5
6
7
root@iZhp3fz3iqsadyes2s8ayeZ:~# netstat -altpen
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:8838 0.0.0.0:* LISTEN 0 11863750 31212/bnewd
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 110 2945745 18546/mongod
tcp 0 0 0.0.0.0:8330 0.0.0.0:* LISTEN 0 22250263 13550/btnd
tcp 0 0 127.0.0.1:587 0.0.0.0:* LISTEN 0 12285119 11792/sendmail: MTA

这个可能是最屌的命令了,也可能是最常用的命令了。

还有一些实例,暂时不常用,有待完善。