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

演示案例

  • 顯示路由表

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