Linux(入门基础):120---网络信息监控命令(sar、iptraf、lsof、netstat)

一、sar

  • sar是一个多功能的监控工具,使用简单,不需要管理员权限,可以输出每秒的网卡存取速度,适合线上排查问题时使用
  • 比如说云服务器会对服务器做限速,有时候传输文件会发现速率提不上去却找不到原因,可以通过这个命令查看发现原来是云服务器限速的原因
  • 命令格式:
sar [ -A ] [ -B ] [ -b ] [ -C ] [ -D ] [ -d ] [ -F [ MOUNT ] ] 
[ -H ] [ -h ] [ -p ] [ -q ] [ -r [ ALL ] ] [ -S ] [ -t ] 
[ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ] [ --human ] 
[ --sadc ] [ -I { int_list | SUM | ALL } ] [ -P { cpu_list | ALL } ] 
[ -m { keyword [,...] | ALL } ] [ -n { keyword [,...] |  ALL} ] 
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -f [ filename ] | -o [ filename ] | -[0-9]+ ] 
[ -i interval ] [ -s [ hh:mm[:ss] ] ] [ -e [ hh:mm[:ss] ] ] [interval [ count ] ]
  • 相关选项:
    • A:所有报告的总和。
    • ­u:CPU利用率。
    • ­v:进程、I节点、文件和锁表状态。
    • ­d:硬盘的使用报告。
    • ­r:没有使用的内存页面和硬盘快。
    • ­g:串口I/O的情况。
    • ­b:缓冲区的使用情况。
    • ­a:文件的读写情况。
    • ­c:系统的调用情况。
    • ­R:进程的活动情况。
    • ­y:终端设备的活动情况。
    • ­w:系统的交换活动。

演示案例

  • 从输出中可以看到网卡的读写速度和流量,在应急过程中可以用来判断服务器是否上量
sar -n DEV 1 1

二、iptraf

  • iptraf是一个基于ncurses开发的IP局域网监控工具,它可以实时地监视网卡流量,可以生成各种网络统计数据,包括TCP信息、UDP统计、ICMP和OSPF信息、以太网负载信息、节点统计、IP校验和错误和其它一些信息
  • 安装如下:
# centos
yum ‐y install ncurses
yum ‐y install iptraf

# ubuntu
sudo apt‐get install iptraf

  • 命令格式:
iptraf { [ -f ] [ -q ] [ -u ] [ { -i iface | -g | -d iface | -s iface | 
-z iface | -l iface } [ -t timeout ] [ -B [ -L logfile ] ] ] | [ -h ] }
  • 相关选项:
    • -i iface:网络接口:立即在指定网络接口上开启IP流量监视,iface为all指监视所有的网络接口,iface指相应的interface
    • -g:立即开始生成网络接口的概要状态信息
    • -d iface:网络接口:在指定网络接口上立即开始监视明细的网络流量信息,iface指相应的interface
    • -s iface:网络接口:在指定网络接口上立即开始监视TCP和UDP网络流量信息,iface指相应的interface
    • -z iface:网络接口:在指定网络接口上显示包计数,iface指相应的interface
    • -l iface:网络接口:在指定网络接口上立即开始监视局域网工作站信息,iface指相应的interface
    • -t timeout:时间:指定iptraf指令监视的时间,timeout指监视时间的minute数
    • -B:将标注输出重新定向到“/dev/null”,关闭标注输入,将程序作为后台进程运行
    • -L logfile:指定一个文件用于记录所有命令行的log,默认文件是地址:/var/log/iptraf
    • -I interval:指定记录log的时间间隔(单位是minute),不包括IP traffic monitor
    • -u:允许使用不支持的接口作为以太网设备
    • -f:清空所有计数器
    • -h:显示帮助信息
  • 在进入主界面之前可以选择不同的选项,在不同的选项下可以查看不同维度的网络信息

三、lsof

  • lsof是系统管理/安全的尤伯工具。将这个工具称之为lsof真实名副其实,因为它是指“列出打开文件(lists openfiles)”。而有一点要切记,在Unix中一切(包括网络套接口)都是文件
  • 命令格式:
lsof [ -?abChKlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ]
 [ +|-D D ] [ +|-e s ] [ +|-E ] [ +|-f [cfgGn] ] [ -F [f] ]
 [ -g [s] ] [ -i [i] ] [ -k k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ]
 [ -o [o] ] [ -p s ] [ +|-r [t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ]
 [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [  -Z [Z] ] [ -- ] [names]
  • 相关选项:
    • 默认 : 没有选项,lsof列出活跃进程的所有打开文件
    • 组合 : 可以将选项组合到一起,如-abc,但要当心哪些选项需要参数
    • -a : 结果进行“与”运算(而不是“或”)。多项数据需要【同时成立】才显示出结果时使用
    • -l : 在输出显示用户ID而不是用户名
    • -h : 获得帮助
    • -t : 仅获取进程ID
    • -U : 获取UNIX套接口地址
    • -u:后面接用户名,列出该使用者相关所使用的文件
    • +d:后面接目录,即找出某个目录下面已经被使用的文件
    • -F : 格式化输出结果,用于其它命令。可以通过多种方式格式化,如-F pcfn(用于进程id、命令名、文件描述符、文件名,并以空终止)
  • 其他演示案例参阅:https://blog.csdn.net/qq_41453285/article/details/88409849

演示案例

  • 显示端口被某个程序占用(以80为例)
sudo lsof -i:80

  • 查看进程打开了哪些文件(以PID为12的进程为例)
sudo lsof -p 12

 

  • 显示xxx进程现在打开的文件(以ssh进程为例)
sudo lsof -c ssh

  • 显示打开xxx文件的进程(以/usr/sbin/sshd为例,见上图)
sudo lsof /usr/sbin/sshd

四、netstat

  • 功能:
    • 这个命令经常被用在网络监控方面
    • 显示的信息会被分为两个部分:一部分是网络相关的部分,一部分是与socket进程相关的部分(非网络)
  • 命令格式:
netstat  [address_family_options]  [--tcp|-t]  [--udp|-u]  [--udplite|-U]  [--sctp|-S]  [--raw|-w]  [--l2cap|-2]  [--rfcomm|-f] [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] [--verbose|-v] [--continuous|-c] [--wide|-W]

netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] [--verbose|-v]   [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]

netstat  {--interfaces|-i} [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] [--program|-p] [--numeric|-n]   [--numeric-hosts] [--numeric-ports]
 [--numeric-users] [--continuous|-c]

netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]

netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]

netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--udplite|-U] [--sctp|-S] [--raw|-w]

netstat {--version|-V}

netstat {--help|-h}

address_family_options:

[-4|--inet]  [-6|--inet6]  [--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp,bluetooth,  ... } ] [--unix|-x] [--inet|--ip|--tcpip]
 [--ax25] [--x25] [--rose] [--ash] [--bluetooth] [--ipx] [--netrom] [--ddp|--appletalk] [--econet|--ec]
  • 相关选项:
    • -a:将目前系统上所有连接、监听、socket信息都列出来
    • -t:列出tcp网络封包的信息
    • -u:列出udp网络封包的信息
    • -n:不以进程的服务名称,以端口号来显示
    • -l:列出目前正在网络监听的服务
    • -p: 列出该网络服务的进程PID
  • 提示:
    • 你的主机上面到底开了多少个网络服务,与你的网络服务类型无关,而与产生你这个服务的相应的程序有关,程序也是一个进程。例如,你的Linux提供www服务,那么在你的主机上一定要有一个程序来提供这个www服务才行。所以你想要关闭一个网络服务,就关闭该程序所触发的那个进程就行了

演示案例

  • 显示网络相关的信息与进程信息

  • Active Internet connections (w/o servers)下面的是与网络连接有关的信息
Proto 网络的封包协议,主要为TCP和UDP
Recv-Q 非由用户进程连接到此socket的复制的总Bytes数
Send-Q 非由远程主机传送过来的acknowledged总Bytes数
Local Address

本地端的IP:port

如果IP为*:代表使用为0的IP地址(通配地址INADDR_ANY,in6addr_any)

如果port为*:代表为0号端口号(系统自动分配端口)

Foreign Address 远程主机的IP:port
State 连接状态,主要有:建立(ESTABLISED)、监听(LISTEN)
  • Active UNIX domain sockets (w/o servers)下面是不同的进程的信息(Linux可以接收到不同进程发过来的信息,这就是Linux上面的socket文件,sokcet文件可以沟通两个进程之间的信息,因此进程可以获取对方传过来的数据),上表中socket文件的输出字段如下
Proto 一般就是unix
RefCnt 连接到此socket的进程数量
Flags 连接的标识
Type socket存取的类型。主要有确定连接的STREAM与不需要确定的DGRAM两种
State 若为CONNECTED则表示多个进程之间已经建立连接
I-Node  
Path

连接到此socket的相关进程的路径,或是相关数据的输出路径

第二张图中:那些/tmp/.xx下面的数据,就是X Windows图形界面的相关进程,而PATH指向的就是这些进程要交换数据的socket文件

演示案例

  • 列出系统上已在监听的网络连接以及PID 

  • 除了可以列出监听网络的界面和状态之外,最后一栏还列出了此网络服务进程的PID和进程的名称
  • 我们想把上面的那个0 0.0.0.0:59577网络服务关闭的话,可以使用下面的方法(不过这是个非正规的方法,正规的方法查看后面文章的介绍)
kill  -9  944
killall  -9  dhclient

演示案例

  • 显示路由表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章