linux基礎(day 32)

10.6 監控io性能

監控系統狀態

  • iostat -x 磁盤使用
  • iotop 磁盤使用

查看磁盤使用狀況

  • 在運維工做中,除了查看CPU和內存以外,磁盤的io也是很是重要的一個指標
    • 有時候,CPU和內存有內存,但系統負載就是很高,咱們用vmstat命令查看到 b 列或者是 wa 列 較大,這時候就說明磁盤有瓶頸,那麼咱們就須要更詳細的查看磁盤的狀態

iostat命令

  • iostat命令,在查看系統輸入輸出設備和CPU的使用狀況
    • 在安裝 sysstat 這個包的時候,就會安裝上iostat命令
    • iosta t和 sar 屬於同一個包——>yum install -y sysstat
  • iostat 1 每秒查看磁盤讀寫速率
    • 快捷鍵ctrl+c退出查看
[root@localhost ~]# iostat
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 	2017年11月28日 	_x86_64_       (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.11    0.06    0.00   99.81

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.40         6.51         3.33     139818      71433
scd0              0.00         0.00         0.00         44          0

[root@localhost ~]# iostat 1    //每秒查看磁盤讀寫速率
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 	2017年11月28日 	_x86_64_       (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.11    0.06    0.00   99.81

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.40         6.51         3.41     139818      73217
scd0              0.00         0.00         0.00         44          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
scd0              0.00         0.00         0.00          0          0

^C      //按ctrl+c快捷鍵退出
[root@localhost ~]#

iostat命令參數-x

  • iostat -x 1
    • 關注其中一個重要指標,就是%util 列html

      • 它是一個百分比,這一列表示io等待,就是說你這個磁盤有多少時間佔用你CPU的
        • 這個CPU有一部分是留給進程處理計算的,還有一部分時間是等待io的,等待磁盤讀寫的,這個就是一個百分比
      • 若這個佔比達到百分之五六十,就說明這個磁盤io處理太差了(很是的忙碌)。數字很大的狀況下,那麼讀寫的數據也會很大。
        • 如果讀寫數據並不大,就是%util佔比比較大,那麼說明硬盤有着一些問題、故障的存在。
        • 硬盤很慢的話,則必然會影響系統性能。那麼即便CPU運行速度再快,硬盤跟不上,那麼始終會存在瓶頸。
    • 按快捷鍵ctrl+c 退出查看mysql

[root@localhost ~]# iostat -x 1
Linux 3.10.0-123.el7.x86_64 (localhost.localdomain) 	2017年11月28日 	_x86_64_       (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.04    0.00    0.12    0.05    0.00   99.79

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.02     0.01    0.26    0.12     6.21     3.24    49.21     0.00   12.12    6.39   24.71   2.89   0.11
scd0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00   23.45   23.45    0.00  23.45   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

^C    //快捷鍵ctrl+c退出查看
[root@localhost ~]#

iotop命令

  • 在發現磁盤io很忙、很頻繁的時候,要想知道是哪個進程在頻繁的讀寫呢?
    • 就可使用 iotop命令 查看
  • 安裝iotop包——>yum install -y iotop
    • 動態顯示
[root@localhost ~]# yum install -y iotop
  • iotop命令,是一個用來監視磁盤I/O使用情況的top類工具。
    • 動態顯示
    • iotop具備與top類似的UI,其中包括PID、用戶、I/O、進程等相關信息。
    • 按 q鍵 ,退出查看

10.7 free命令

監控系統狀態

  • free 查看內存使用狀況
  • free -m / -g / -h
  • buffer/cache區別
  • 公式:total=used+free+buff/cache
  • avaliable包含free和buffer/cache剩餘部分

free命令

  • free命令,查看內存使用狀況
    • 在centos7和centos6中顯示的結果是不一樣的
    • 在centos7中,則更加直觀
  • 默認單位:kb
  • 共有三行,咱們須要關注的是第二行,內存的使用狀況
    • 第一行,是說明
    • 第二行,是內存的使用狀況
    • 第三行,是swap交換分區的使用狀況
[root@localhost ~]# free
             total       used       free     shared    buffers     cached
Mem:       1010860     354592     656268       6824        692     192560
-/+ buffers/cache:     161340     849520
Swap:      2097148          0    2097148
[root@localhost ~]#
  • free -m 指定單位兆
[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           987        347        639          6          0        188
-/+ buffers/cache:        158        828
Swap:         2047          0       2047
[root@localhost ~]#
  • free -h 在具體的數字後面加上單位——>更加直觀顯示
[root@localhost ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          987M       347M       639M       6.7M       692K       188M
-/+ buffers/cache:       158M       828M
Swap:         2.0G         0B       2.0G
[root@localhost ~]#
  • 第一列,是總共有多大
  • 第二列,使用了多大
  • 第三列,剩餘多大
    • 在這裏會發現,used+free不等於total
      • 這是由於在linux操做系統,會把你的內存預分配一部分出來,分配給 buff 和 cache ,
  • 第四列,buff 表示 緩衝
  • 第五列,cache 表示 緩存
    • 區分:數據的流向不一樣
      • 磁盤——>內存(cache)——>cpu
      • cpu——>內存(buff)——>磁盤
  • 第六列,是free內存 + 預分配的buff/cache內存還沒用完的,就是available(在centos7.0版本中,不會顯示available,版本過低)

小常識

  • 公式:total=used+free+buff/cache
  • avaliable包含free和buffer/cache剩餘部分

swap部分

  • 當swap不夠使用了,就會使用到used,再used跑滿了,free剩餘爲0,那swap則確定須要添加了
    • 然而添加swap並非解決問題的方法,而是增長內存。swap不夠使用了,說明內存不夠了,或者說你的內存泄漏了,你的程序有BUG,須要去排查

10.8 ps命令

監控系統狀態

  • ps 查看系統進程
    • 用法:ps aux、ps -elf
  • STAT部分說明
    • D 不能中斷的進程
    • R run狀態的進程
    • S sleep狀態的進程
    • T 暫停的進程
    • Z 殭屍進程
    • < 高優先級進程
    • N 低優先級進程
    • L 內存中被鎖了內存分頁
    • s 主進程
    • l 多線程進程
    • 字符+ 前臺進程

ps命令

  • ps命令,彙報當前系統的進程狀態
  • ps用法(經常使用兩種方法)
    • ps aux 會把系統中全部的進程給列出來,靜態的顯示出來
[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.7  50772  7156 ?        Ss   15:49   0:01 /usr/lib/systemd/system
root         2  0.0  0.0      0     0 ?        S    15:49   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    15:49   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   15:49   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    15:49   0:00 [kworker/u128:0]
root         7  0.0  0.0      0     0 ?        S    15:49   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    15:49   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/0]
root        10  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/1]
root        11  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/2]
root        12  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/3]
root        13  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/4]
root        14  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/5]
root        15  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/6]
root        16  0.0  0.0      0     0 ?        S    15:49   0:00 [rcuob/7]
等等等,只截取了一部分——>這裏顯示出了全部的進程

對比

  • top命令,動態顯示,把cpu的、內存的作一個排行榜出來
  • ps命令,是靜態的顯示,一次性把全部的情況列出來
    • ps和top命令顯示的結果很是類似

ps命令 查看系統全部進程(兩種)

  • ps aux 查看系統全部進程
  • ps -elf 顯示出的效果和ps aux基本相似
[root@localhost ~]# ps aux    //查看系統全部進程
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.7  50772  7156 ?        Ss   11月28   0:01 /usr/lib/systemd/syst
root         2  0.0  0.0      0     0 ?        S    11月28   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    11月28   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   11月28   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    11月28   0:00 [kworker/u128:0]
root         7  0.0  0.0      0     0 ?        S    11月28   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    11月28   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    11月28   0:00 [rcuob/0]
root        10  0.0  0.0      0     0 ?        S    11月28   0:00 [rcuob/1]
root        11  0.0  0.0      0     0 ?        S    11月28   0:00 [rcuob/2]
等等等,只截取了一部分——>這裏顯示出了全部的進程

[root@localhost ~]# ps -elf    //查看系統全部進程
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 - 12693 ep_pol 11月28 ?      00:00:01 /usr/lib/syst
1 S root         2     0  0  80   0 -     0 kthrea 11月28 ?      00:00:00 [kthreadd]
1 S root         3     2  0  80   0 -     0 smpboo 11月28 ?      00:00:00 [ksoftirqd/0]
1 S root         5     2  0  60 -20 -     0 worker 11月28 ?      00:00:00 [kworker/0:0H
1 S root         6     2  0  80   0 -     0 worker 11月28 ?      00:00:00 [kworker/u128
1 S root         7     2  0 -40   - -     0 smpboo 11月28 ?      00:00:00 [migration/0]
1 S root         8     2  0  80   0 -     0 rcu_gp 11月28 ?      00:00:00 [rcu_bh]
1 S root         9     2  0  80   0 -     0 rcu_no 11月28 ?      00:00:00 [rcuob/0]
1 S root        10     2  0  80   0 -     0 rcu_no 11月28 ?      00:00:00 [rcuob/1]
等等等,只截取了一部分——>這裏顯示出了全部的進程
  • 第一列,顯示出進程的運行用戶
  • 第二列,進程的PID
    • 在殺死一個進程的時候,就回須要使用PID,命令 kill PID號
      • 例子:kill 1346
      • 而後ps aux |grep qmgr 會看到的該進程被殺掉了
    • 在系統被黑了,遇到一個不知道的進程(有多是被入侵的進程),在殺死該進程的時候,就須要先知道PID號
      • 先查看PID號,進程在哪裏啓動起來的
        • ls -l /proc/PID號 ,會看到進程啓動的目錄
  • 第三列,CPU百分比
  • 第四列,內存百分比
  • 第五列,虛擬內存
  • 第六列,物理內存
  • 第七列,是在哪個TTY上
  • 第八列,STAT,表示進程的狀態,是咱們須要關注的一列!
    • STAT有這幾種狀態
    • D 不能中斷的進程 (會直接影響CPU資源)
    • R run狀態的進程(正在跑的進程,表示某一個時間段內,使用的CPU)
    • S sleep狀態的進程
    • T 暫停的進程
    • Z 殭屍進程
    • 字符< 高優先級進程
    • N 低優先級進程
    • L 內存中被鎖了內存分頁
    • s 主進程
    • l 多線程進程
    • 字符+ 前臺進程
  • 第九列,何時啓動的
  • 第十列,TIME,運行了多久了
  • 第十一列,命令
線程和進程最大的區別: 
1 進程裏包含了線程,線程是進程的子單元
2 同一個進程下的線程所有共享相同的內存,而進程之間內存相互隔離。

ps命令查看進程是否在存在

  • ps aux |grep nginx //查看nginx進程是否在存在
  • ps aux |grep mysql //查看mysql進程是否存在
[root@localhost ~]# ps aux |grep nginx    //查看nginx進程是否在存在
root      2619  0.0  0.0 112656   984 pts/0    R+   00:00   0:00 grep --color=auto ngin
[root@localhost ~]# ps aux |grep mysql    //查看mysql進程是否存在
root      2643  0.0  0.0 112656   984 pts/0    R+   00:02   0:00 grep --color=auto mysq
[root@localhost ~]#

重點部分 STAT

10.9 查看網絡狀態

監控系統狀態

  • netstat 查看網絡狀態
  • netstat -lnp 查看監聽端口
  • netstat -an 查看系統的網絡鏈接情況
  • netstat -lntp 只看出tcp的,不包含socket
  • ss -an和netstat殊途同歸
  • 技巧:
    • netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t" ,sta[key]}'

netstat命令

  • netstat命令,查看linux中網絡系統的狀態信息
    • 查看的就是tcp/ip通訊的一個狀態

netstat命令,查看監聽端口

  • netstat -lnp 查看監聽端口
    • l 就是監聽的意思
    • tcp
      • 25端口,是發郵件的端口
      • 22 端口,有兩個,一個是tcp,另外一個是tcp6
        • tcp6就是ipv6的IP
    • udp
    • UNIX中有一種文件叫socket
      • 也是進程間相互通訊的(前提:同一臺服務器,兩個進程相互通訊,使用socket文件)
[root@hf-01 ~]# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1522/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1178/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1522/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1525/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1178/sshd           
udp        0      0 0.0.0.0:51407           0.0.0.0:*                           557/avahi-daemon: r 
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           557/avahi-daemon: r 
raw6       0      0 :::58                   :::*                    7           650/NetworkManager  
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
unix  2      [ ACC ]     STREAM     LISTENING     18892    1522/master          private/tlsmgr
unix  2      [ ACC ]     STREAM     LISTENING     18880    1522/master          public/pickup
unix  2      [ ACC ]     STREAM     LISTENING     18895    1522/master          private/rewrite
unix  2      [ ACC ]     STREAM     LISTENING     18898    1522/master          private/bounce
unix  2      [ ACC ]     STREAM     LISTENING     18901    1522/master          private/defer
unix  2      [ ACC ]     STREAM     LISTENING     18904    1522/master          private/trace
unix  2      [ ACC ]     STREAM     LISTENING     18907    1522/master          private/verify
unix  2      [ ACC ]     STREAM     LISTENING     18913    1522/master          private/proxymap
unix  2      [ ACC ]     STREAM     LISTENING     18916    1522/master          private/proxywrite
unix  2      [ ACC ]     STREAM     LISTENING     18919    1522/master          private/smtp
unix  2      [ ACC ]     STREAM     LISTENING     18922    1522/master          private/relay
unix  2      [ ACC ]     STREAM     LISTENING     18928    1522/master          private/error
unix  2      [ ACC ]     STREAM     LISTENING     18931    1522/master          private/retry
unix  2      [ ACC ]     STREAM     LISTENING     18934    1522/master          private/discard
unix  2      [ ACC ]     STREAM     LISTENING     18937    1522/master          private/local
unix  2      [ ACC ]     STREAM     LISTENING     11300    1/systemd            /run/lvm/lvmpolld.socket
unix  2      [ ACC ]     STREAM     LISTENING     18940    1522/master          private/virtual
unix  2      [ ACC ]     STREAM     LISTENING     18943    1522/master          private/lmtp
unix  2      [ ACC ]     STREAM     LISTENING     18946    1522/master          private/anvil
unix  2      [ ACC ]     STREAM     LISTENING     18949    1522/master          private/scache
unix  2      [ ACC ]     STREAM     LISTENING     6719     1/systemd            /run/systemd/journal/stdout
unix  2      [ ACC ]     STREAM     LISTENING     11092    1/systemd            /run/lvm/lvmetad.socket
unix  2      [ ACC ]     STREAM     LISTENING     15756    650/NetworkManager   /var/run/NetworkManager/private-dhcp
unix  2      [ ACC ]     STREAM     LISTENING     13965    1/systemd            /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     18884    1522/master          public/cleanup
unix  2      [ ACC ]     STREAM     LISTENING     13979    1/systemd            /var/run/avahi-daemon/socket
unix  2      [ ACC ]     STREAM     LISTENING     18887    1522/master          public/qmgr
unix  2      [ ACC ]     STREAM     LISTENING     18910    1522/master          public/flush
unix  2      [ ACC ]     STREAM     LISTENING     18925    1522/master          public/showq
unix  2      [ ACC ]     STREAM     LISTENING     19266    1525/mysqld          /tmp/mysql.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     11220    1/systemd            /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     15580    650/NetworkManager   /var/run/NetworkManager/private
unix  2      [ ACC ]     STREAM     LISTENING     10994    1/systemd            /run/systemd/private
[root@hf-01 ~]#

netstat命令 查看全部的鏈接狀態

  • netstat -an 查看全部的鏈接狀態
[root@hf-01 ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0     52 192.168.74.129:22       192.168.74.1:49322      ESTABLISHED
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
udp        0      0 0.0.0.0:51407           0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
raw6       0      0 :::58                   :::*                    7          
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     18892    private/tlsmgr
unix  2      [ ACC ]     STREAM     LISTENING     18880    public/pickup
unix  2      [ ACC ]     STREAM     LISTENING     18895    private/rewrite
unix  2      [ ACC ]     STREAM     LISTENING     18898    private/bounce
等等等,只截取了一部分

netstat命令 只查看tcp

  • netstat -ltnp 只查看tcp
[root@hf-01 ~]# netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1522/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1178/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1522/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1525/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1178/sshd           
[root@hf-01 ~]#

netstat命令 只查看tcp和udp

  • netstat -ltunp //只查看tcp和udp
[root@hf-01 ~]# netstat -ltunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1522/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1178/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1522/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      1525/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1178/sshd           
udp        0      0 0.0.0.0:51407           0.0.0.0:*                           557/avahi-daemon: r 
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           557/avahi-daemon: r 
[root@hf-01 ~]#

netstat命令和awk相關的

  • 查看全部狀態的數字
  • netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t" ,sta[key]}'
    • 在現上環境中查看的多(虛擬機實現的效果太差)
[root@hf-01 ~]# netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t"
LISTEN 	 5
ESTABLISHED 	 1
[root@hf-01 ~]#
  • 查看netstat須要關注一個值,就是ESTABLISHED,這個數字如果很大,說明系統很忙
    • 一般ESTABLISHED 這個數字在一千之內,服務器都是能夠接受的
  • 網站併發鏈接數,併發鏈接數就是指同一時刻有多少個客戶端在鏈接你,而咱們就能夠拿ESTABLISHED 這個數字去說明,併發鏈接數有多少
    • 說明這個時刻,有多少個客戶端在和服務端保持通訊

ss -an命令和netstat命令類似

  • ss -an
[root@hf-01 ~]# ss -an
Netid State      Recv-Q Send-Q                                                             Local Address:Port                                                               Peer Address:Port 
nl    UNCONN     0      0                                                                              0:4194954                                                                          *     
nl    UNCONN     0      0                                                                              0:650                                                                            *     
nl    UNCONN     0      0                                                                              0:557                                                                            *     
nl    UNCONN     0      0                                                                              0:0                                                                              *     
nl    UNCONN     4352   0                                                                              4:2922                                                                           *     
nl    UNCONN     768    0                                                                              4:0                                                                              *     
nl    UNCONN     0      0                                                                              6:0                                                                              *     
nl    UNCONN     0      0                                                                              7:554                                                                            *     
nl    UNCONN     0      0                                                                              7:1                                                                              *     
nl    UNCONN     0      0                                                                              7:0                                                                              *     
nl    UNCONN     0      0                                                                              9:0                                                                              *     
nl    UNCONN     0      0                                                                              9:514                                                                            *     
nl    UNCONN     0      0                                                                              9:1                                                                              *     
nl    UNCONN     0      0                                                                             10:0                                                                              *     
nl    UNCONN     0      0                                                                             11:0                                                                              *     
nl    UNCONN     0      0                                                                             15:650                                                                            *     
等等等,只截取了一部分


[root@hf-01 ~]# ss -an |grep -i listen    //由於listen是大寫,因此加-i 參數
u_str  LISTEN     0      100       private/tlsmgr 18892                 * 0    
u_str  LISTEN     0      100        public/pickup 18880                 * 0    
u_str  LISTEN     0      100      private/rewrite 18895                 * 0    
u_str  LISTEN     0      100       private/bounce 18898                 * 0    
u_str  LISTEN     0      100        private/defer 18901                 * 0    
u_str  LISTEN     0      100        private/trace 18904                 * 0    
u_str  LISTEN     0      100       private/verify 18907                 * 0    
u_str  LISTEN     0      100     private/proxymap 18913                 * 0    
u_str  LISTEN     0      100    private/proxywrite 18916                 * 0    
等等等,只截取了一部分
  • ss -an 缺點:不會顯示進程的名稱

10.10 linux下抓包

監控系統狀態

  • 抓包工具 tcpdump
  • 用法:tcpdump -nn
  • tcpdump -nn -i ens33
  • tcpdump -nn port 80
  • tcpdump -nn not port 22 and host 192.168.0.100
  • tcpdump -nn -c 100 -w 1.cap
  • tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
  • yum install -y wireshark

tcpdump命令

  • tcpdump命令,是用來抓包的
  • 安裝tcpdump包——>yum install -y tcpdump
  • tcp -nn -i eno16777736
    • 第一個n,表示你的ip用數字的形式顯示出來(如果不加,則會顯示出主機名)
[root@hf-01 ~]# tcpdump -nn
tcpdump: packet printing is not supported for link type NFLOG: use -w
[root@hf-01 ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.74.129  netmask 255.255.255.0  broadcast 192.168.74.255
        inet6 fe80::20c:29ff:feff:fe93  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ff:fe:93  txqueuelen 1000  (Ethernet)
        RX packets 11067  bytes 12250186 (11.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2631  bytes 312427 (305.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@hf-01 ~]# tcpdump -nn -i eno16777736 
5204, ack 6605, win 159, length 180
06:27:41.186368 IP 192.168.74.129.22 > 192.168.74.1.49322: Flags [P.], seq 45955204:45955384, ack 6605, win 159, length 180
06:27:41.186422 IP 192.168.74.129.22 > 192.168.74.1.49322: Flags [P.], seq 45955384:45955564, ack 6605, win 159, length 180
等等等,運行後,會顯示出不少的信息
按ctrl+c退出
  • DDos攻擊
    • udp flood叫udp的洪水攻擊
      • 在遇到這種攻擊的時候,只能接入防攻擊的設備(好比:創宇--300G是能夠頂住的)

tcpdump命令指定端口

  • tcpdump -nn -i eno16777736 port 22
[root@hf-01 ~]# tcpdump -nn -i eno16777736 port 22
4, length 0
06:52:04.034073 IP 192.168.74.129.22 > 192.168.74.1.49322: Flags [P.], seq 228004:228376, ack 1, win 159, length 372
06:52:04.034155 IP 192.168.74.129.22 > 192.168.74.1.49322: Flags [P.], seq 228376:228556, ack 1, win 159, length 180
06:52:04.034302 IP 192.168.74.1.49322 > 192.168.74.129.22: Flags [.], ack 228556, win 252, length 0
06:52:04.034387 IP 192.168.74.129.22 > 192.168.74.1.49322: Flags [P.], seq 228556:228832, ack 1, win 159, length 276
等等等,只截取了一部分

tcpdump命令使用排除法

  • tcpdump -nn not port 22 and host 192.168.0.100 除去22端口和只要ip爲192.168.0.100的包

tcpdump命令指定長度和個數

  • tcpdump -nn -i eno16777736 -c 100 -w 1.cap 指定數據包只要10個,並存入到1.cap文件中去
    • 在終端查看的時候,不產生一些數據量的話,就不會產生那麼多數據包
  • file 1.cap 查看該文件——>文件名稱能夠隨意更改
    • 能查看文件的大概信息
    • 該文件不能直接 cat命令 查看的,會出現亂碼
      • 由於1.cap這個文件就是從你網卡里捕捉到的數據包,就是你通訊的那個數據
在這裏複製另外一個終端,並打開,跑vmstat 1命令

在當前終端查看,輸入如下命令
[root@hf-01 ~]# tcpdump -nn -i eno16777736 -c 10 -w 1.cap
tcpdump: listening on eno16777736, link-type EN10MB (Ethernet), capture size 262144 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel
[root@hf-01 ~]# file 1.cap
1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)
[root@hf-01 ~]#
  • 若要查看這個文件,則能夠tcpdump -r 1.cap
    • -r 表示讀
[root@hf-01 ~]# tcpdump -r 1.cap    //查看1.cap文件
reading from file 1.cap, link-type EN10MB (Ethernet)
07:02:05.134302 IP 192.168.74.129.ssh > 192.168.74.1.49322: Flags [P.], seq 4218852344:4218852492, ack 3076966380, win 159, length 148
07:02:05.134859 IP 192.168.74.1.49322 > 192.168.74.129.ssh: Flags [.], ack 148, win 255, length 0
07:02:05.257655 IP 192.168.74.129.ssh > 192.168.74.1.49322: Flags [P.], seq 148:280, ack 1, win 159, length 132
07:02:05.462113 IP 192.168.74.1.49322 > 192.168.74.129.ssh: Flags [.], ack 280, win 255, length 0
07:02:06.258704 IP 192.168.74.129.ssh > 192.168.74.1.49322: Flags [P.], seq 280:428, ack 1, win 159, length 148
07:02:06.462164 IP 192.168.74.1.49322 > 192.168.74.129.ssh: Flags [.], ack 428, win 254, length 0
07:02:07.259714 IP 192.168.74.129.ssh > 192.168.74.1.49322: Flags [P.], seq 428:560, ack 1, win 159, length 132
07:02:07.460218 IP 192.168.74.1.49322 > 192.168.74.129.ssh: Flags [.], ack 560, win 254, length 0
07:02:08.260717 IP 192.168.74.129.ssh > 192.168.74.1.49322: Flags [P.], seq 560:708, ack 1, win 159, length 148
07:02:08.460263 IP 192.168.74.1.49322 > 192.168.74.129.ssh: Flags [.], ack 708, win 253, length 0
[root@hf-01 ~]#
  • 在read的返回的時候,是數據流,從哪到哪(包括tcpdump -nn屏幕上顯示的也是數據流)
  • 而tcpdump -r的時候,寫入的是真正的數據包

tshark命令

  • tshark命令
  • 安裝tshark包——>yum install -y wireshark
  • tshark和tcpdump相似的工具,也是用來抓包的
  • tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" 查看指定網卡,80端口的一個web訪問狀況
    • 相似於web的訪問日誌

擴展

相關文章
相關標籤/搜索