Linux Shell經常使用技巧(八)

 

1.  Linux的實時監測命令(watch):
    watch 是一個很是實用的命令,能夠幫你實時監測一個命令的運行結果,免得一遍又一遍的手動運行。該命令最爲經常使用的兩個選項是-d和-n,其中-n表示間隔多少秒執行一次"command",-d表示高亮發生變化的位置。下面列舉幾個在watch中經常使用的實時監視命令:
    /> watch -d -n 1 'who'   #每隔一秒執行一次who命令,以監視服務器當前用戶登陸的情況
    Every 1.0s: who       Sat Nov 12 12:37:18 2011
    
    stephen  tty1           2011-11-11 17:38 (:0)
    stephen  pts/0         2011-11-11 17:39 (:0.0)
    root       pts/1         2011-11-12 10:01 (192.168.149.1)
    root       pts/2         2011-11-12 11:41 (192.168.149.1)
    root       pts/3         2011-11-12 12:11 (192.168.149.1)
    stephen  pts/4         2011-11-12 12:22 (:0.0)
    此時經過其餘Linux客戶端工具以root的身份登陸當前Linux服務器,再觀察watch命令的運行變化。
    Every 1.0s: who       Sat Nov 12 12:41:09 2011
    
    stephen  tty1          2011-11-11 17:38 (:0)
    stephen  pts/0        2011-11-11 17:39 (:0.0)
    root       pts/1        2011-11-12 10:01 (192.168.149.1)
    root       pts/2        2011-11-12 11:41 (192.168.149.1)
    root       pts/3        2011-11-12 12:40 (192.168.149.1)
    stephen  pts/4        2011-11-12 12:22 (:0.0)
    root       pts/5        2011-11-12 12:41 (192.168.149.1)
    最後一行中被高亮的用戶爲新登陸的root用戶。此時按CTRL + C能夠退出正在執行的watch監控進程。
    
    #watch能夠同時運行多個命令,命令間用分號分隔。
    #如下命令監控磁盤的使用情況,以及當前目錄下文件的變化情況,包括文件的新增、刪除和文件修改日期的更新等。
    /> watch -d -n 1 'df -h; ls -l'
    Every 1.0s: df -h; ls -l     Sat Nov 12 12:55:00 2011
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda1             5.8G  3.3G  2.2G  61% /
    tmpfs                 504M  420K  504M   1% /dev/shm
    total 20
    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 root root   183 Nov 11 08:02 users
    -rw-r--r--. 1 root root   279 Nov 11 08:45 users2
    此時經過另外一個Linux控制檯窗口,在watch監視的目錄下,如/home/stephen/test,執行下面的命令
    /> touch aa         #在執行該命令以後,另外一個執行watch命令的控制檯將有以下變化
    Every 1.0s: df -h; ls -l                                Sat Nov 12 12:57:08 2011
    
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda1             5.8G  3.3G  2.2G  61% /
    tmpfs                 504M  420K  504M   1% /dev/shm
    total 20
    -rw-r--r--. 1 root root        0 Nov 12 12:56 aa
    -rw-r--r--. 1 root root        0 Nov 12 10:02 datafile3
    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
    -rw-r--r--. 1 root root     183 Nov 11 08:02 users
    -rw-r--r--. 1 root root     279 Nov 11 08:45 users2
    其中黃色高亮的部分,爲touch aa命令執行以後watch輸出的高亮變化部分。linux

    
    2.  查看當前系統內存使用情況(free):
    free命令有如下幾個經常使用選項:ios

選項 說明
-b 以字節爲單位顯示數據。
-k 以千字節(KB)爲單位顯示數據(缺省值)。
-m 以兆(MB)爲單位顯示數據。
-s delay 該選項將使free持續不斷的刷新,每次刷新之間的間隔爲delay指定的秒數,若是含有小數點,將精確到毫秒,如0.5爲500毫秒,1爲一秒。

    free命令輸出的表格中包含如下幾列:緩存

列名 說明
total 總計物理內存的大小。
used 已使用的內存數量。
free 可用的內存數量。
Shared 多個進程共享的內存總額。
Buffers/cached 磁盤緩存的大小。


    見如下具體示例和輸出說明:
    /> free -k
                        total         used          free     shared    buffers     cached
    Mem:       1031320     671776     359544          0      88796     352564
    -/+ buffers/cache:      230416     800904
    Swap:        204792              0     204792
    對於free命令的輸出,咱們只需關注紅色高亮的輸出行和綠色高亮的輸出行,見以下具體解釋:
    紅色輸出行:該行使從操做系統的角度來看待輸出數據的,used(671776)表示內核(Kernel)+Applications+buffers+cached。free(359544)表示系統還有多少內存可供使用。
    綠色輸出行:該行則是從應用程序的角度來看輸出數據的。其free = 操做系統used + buffers + cached,既:
    800904 = 359544 + 88796 + 352564
    /> free -m
                      total        used        free      shared    buffers     cached
    Mem:          1007         656        351            0         86            344
    -/+ buffers/cache:        225        782
    Swap:          199             0        199
    /> free -k -s 1.5  #以千字節(KB)爲單位顯示數據,同時每隔1.5刷新輸出一次,直到按CTRL+C退出
                      total        used       free     shared    buffers     cached
    Mem:          1007         655        351          0           86        344
    -/+ buffers/cache:        224        782
    Swap:          199             0        199

                      total        used       free     shared    buffers     cached
    Mem:          1007         655        351          0           86        344
    -/+ buffers/cache:        224        782
    Swap:          199             0        199

    3.  CPU的實時監控工具(mpstat):
    該命令主要用於報告當前系統中全部CPU的實時運行情況。
    #該命令將每隔2秒輸出一次CPU的當前運行情況信息,一共輸出5次,若是沒有第二個數字參數,mpstat將每隔兩秒執行一次,直到按CTRL+C退出。
    /> mpstat 2 5  
    Linux 2.6.32-71.el6.i686 (Stephen-PC)   11/12/2011      _i686_  (1 CPU)

    04:03:00 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    04:03:02 PM  all    0.00    0.00    0.50    0.00    0.00    0.00    0.00    0.00   99.50
    04:03:04 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:03:06 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:03:08 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:03:10 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    Average:       all    0.00    0.00    0.10    0.00    0.00    0.00    0.00    0.00   99.90

    第一行的末尾給出了當前系統中CPU的數量。後面的表格中則輸出了系統當前CPU的使用情況,如下爲每列的含義:服務器

列名 說明
%user 在internal時間段裏,用戶態的CPU時間(%),不包含nice值爲負進程  (usr/total)*100
%nice 在internal時間段裏,nice值爲負進程的CPU時間(%)   (nice/total)*100
%sys 在internal時間段裏,內核時間(%)       (system/total)*100
%iowait 在internal時間段裏,硬盤IO等待時間(%) (iowait/total)*100
%irq 在internal時間段裏,硬中斷時間(%)     (irq/total)*100
%soft 在internal時間段裏,軟中斷時間(%)     (softirq/total)*100
%idle 在internal時間段裏,CPU除去等待磁盤IO操做外的由於任何緣由而空閒的時間閒置時間(%) (idle/total)*100

    計算公式:
    total_cur=user+system+nice+idle+iowait+irq+softirq
    total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
    user=user_cur – user_pre
    total=total_cur-total_pre
    其中_cur 表示當前值,_pre表示interval時間前的值。上表中的全部值可取到兩位小數點。    

    /> mpstat -P ALL 2 3  #-P ALL表示打印全部CPU的數據,這裏也能夠打印指定編號的CPU數據,如-P 0(CPU的編號是0開始的)
    Linux 2.6.32-71.el6.i686 (Stephen-PC)   11/12/2011      _i686_  (1 CPU)

    04:12:54 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    04:12:56 PM    all      0.00      0.00     0.50    0.00      0.00    0.00    0.00      0.00     99.50
    04:12:56 PM      0     0.00      0.00     0.50    0.00      0.00    0.00    0.00      0.00     99.50

    04:12:56 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    04:12:58 PM    all     0.00      0.00     0.00    0.00      0.00    0.00    0.00      0.00    100.00
    04:12:58 PM     0     0.00      0.00     0.00    0.00      0.00    0.00    0.00      0.00    100.00

    04:12:58 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    04:13:00 PM    all      0.00     0.00    0.00    0.00      0.00    0.00     0.00      0.00    100.00
    04:13:00 PM     0      0.00     0.00    0.00    0.00      0.00    0.00     0.00      0.00    100.00

    Average:       CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
    Average:         all      0.00     0.00    0.17    0.00      0.00    0.00     0.00      0.00     99.83
    Average:          0      0.00     0.00    0.17    0.00      0.00    0.00     0.00      0.00     99.83

    4.  虛擬內存的實時監控工具(vmstat):
    vmstat命令用來得到UNIX系統有關進程、虛存、頁面交換空間及CPU活動的信息。這些信息反映了系統的負載狀況。vmstat首次運行時顯示自系統啓動開始的各項統計信息,以後運行vmstat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。
    /> vmstat 1 3    #這是vmstat最爲經常使用的方式,其含義爲每隔1秒輸出一條,一共輸出3條後程序退出。
    procs  -----------memory----------   ---swap-- -----io---- --system-- -----cpu-----
     r  b   swpd      free      buff   cache   si   so     bi    bo     in   cs  us  sy id  wa st
     0  0        0 531760  67284 231212  108  0     0  260   111  148  1   5 86   8  0
     0  0        0 531752  67284 231212    0    0     0     0     33   57   0   1 99   0  0
     0  0        0 531752  67284 231212    0    0     0     0     40   73   0   0 100 0  0

    /> vmstat 1       #其含義爲每隔1秒輸出一條,直到按CTRL+C後退出。

    下面將給出輸出表格中每一列的含義說明:
    有關進程的信息有:(procs)
    r:  在就緒狀態等待的進程數。
    b: 在等待狀態等待的進程數。    
    有關內存的信息有:(memory)
    swpd:  正在使用的swap大小,單位爲KB。
    free:    空閒的內存空間。
    buff:    已使用的buff大小,對塊設備的讀寫進行緩衝。
    cache: 已使用的cache大小,文件系統的cache。
    有關頁面交換空間的信息有:(swap)
    si:  交換內存使用,由磁盤調入內存。
    so: 交換內存使用,由內存調入磁盤。  
    有關IO塊設備的信息有:(io)
    bi:  從塊設備讀入的數據總量(讀磁盤) (KB/s)
    bo: 寫入到塊設備的數據總理(寫磁盤) (KB/s)   
    有關故障的信息有:(system)
    in: 在指定時間內的每秒中斷次數。
    sy: 在指定時間內每秒系統調用次數。
    cs: 在指定時間內每秒上下文切換的次數。   
    有關CPU的信息有:(cpu)
    us:  在指定時間間隔內CPU在用戶態的利用率。
    sy:  在指定時間間隔內CPU在覈心態的利用率。
    id:  在指定時間間隔內CPU空閒時間比。
    wa: 在指定時間間隔內CPU由於等待I/O而空閒的時間比。   
    vmstat 能夠用來肯定一個系統的工做是受限於CPU仍是受限於內存:若是CPU的sy和us值相加的百分比接近100%,或者運行隊列(r)中等待的進程數老是不等於0,且常常大於4,同時id也常常小於40,則該系統受限於CPU;若是bi、bo的值老是不等於0,則該系統受限於內存。

    5.  設備IO負載的實時監控工具(iostat):
    iostat主要用於監控系統設備的IO負載狀況,iostat首次運行時顯示自系統啓動開始的各項統計信息,以後運行iostat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。
    其中該命令中最爲經常使用的使用方式以下:
    /> iostat -d 1 3    #僅顯示設備的IO負載,其中每隔1秒刷新並輸出結果一次,輸出3次後iostat退出。
    Linux 2.6.32-71.el6.i686 (Stephen-PC)   11/16/2011      _i686_  (1 CPU)

    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
    sda                 5.35       258.39        26.19     538210      54560

    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
    sda                 0.00         0.00         0.00                  0          0

    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
    sda                 0.00         0.00         0.00                  0          0

    Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
    sda                 0.00         0.00         0.00                  0          0
    /> iostat -d 1  #和上面的命令同樣,也是每隔1秒刷新並輸出一次,可是該命令將一直輸出,直到按CTRL+C退出。
    下面將給出輸出表格中每列的含義:工具

列名 說明
Blk_read/s 每秒塊(扇區)讀取的數量。
Blk_wrtn/s 每秒塊(扇區)寫入的數量。
Blk_read 總共塊(扇區)讀取的數量。
Blk_wrtn 總共塊(扇區)寫入的數量。

    iostat還有一個比較經常使用的選項-x,該選項將用於顯示和io相關的擴展數據。
    /> iostat -dx 1 3
    Device:  rrqm/s wrqm/s  r/s   w/s  rsec/s wsec/s avgrq-sz avgqu-sz   await  svctm  %util
    sda            5.27   1.31 2.82 1.14 189.49  19.50    52.75     0.53     133.04  10.74   4.26

    Device:  rrqm/s wrqm/s  r/s   w/s  rsec/s wsec/s avgrq-sz avgqu-sz   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

    Device:  rrqm/s wrqm/s  r/s   w/s  rsec/s wsec/s avgrq-sz avgqu-sz   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
    還能夠在命令行參數中指定要監控的設備名,如:
    /> iostat -dx sda 1 3   #指定監控的設備名稱爲sda,該命令的輸出結果和上面命令徹底相同。

    下面給出擴展選項輸出的表格中每列的含義:操作系統

列名 說明
rrqm/s 隊列中每秒鐘合併的讀請求數量
wrqm/s 隊列中每秒鐘合併的寫請求數量
r/s 每秒鐘完成的讀請求數量
w/s 每秒鐘完成的寫請求數量
rsec/s 每秒鐘讀取的扇區數量
wsec/s 每秒鐘寫入的扇區數量
avgrq-sz 平均請求扇區的大小
avgqu-sz 平均請求隊列的長度
await 平均每次請求的等待時間
util 設備的利用率

    下面是關鍵列的解釋:
    util是設備的利用率。若是它接近100%,一般說明設備能力趨於飽和。
    await是平均每次請求的等待時間。這個時間包括了隊列時間和服務時間,也就是說,通常狀況下,await大於svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。
    avgqu-sz是平均請求隊列的長度。毫無疑問,隊列長度越短越好。                 

     6.  當前運行進程的實時監控工具(pidstat):
     pidstat主要用於監控所有或指定進程佔用系統資源的狀況,如CPU,內存、設備IO、任務切換、線程等。pidstat首次運行時顯示自系統啓動開始的各項統計信息,以後運行pidstat將顯示自上次運行該命令之後的統計信息。用戶能夠經過指定統計的次數和時間來得到所需的統計信息。
    在正常的使用,一般都是經過在命令行選項中指定待監控的pid,以後在經過其餘具體的參數來監控與該pid相關係統資源信息。命令行

選項 說明
-l 顯示該進程和CPU相關的信息(command列中能夠顯示命令的完整路徑名和命令的參數)。
-d 顯示該進程和設備IO相關的信息。
-r 顯示該進程和內存相關的信息。
-w 顯示該進程和任務時間片切換相關的信息。
-t 顯示在該進程內正在運行的線程相關的信息。
-p 後面緊跟着帶監控的進程id或ALL(表示全部進程),如不指定該選項,將監控當前系統正在運行的全部進程。

    #監控pid爲1(init)的進程的CPU資源使用狀況,其中每隔3秒刷新並輸出一次,3次後程序退出。
    /> pidstat -p 1 2 3 -l
    07:18:58 AM       PID    %usr %system  %guest    %CPU   CPU  Command
    07:18:59 AM         1    0.00    0.00    0.00    0.00     0  /sbin/init
    07:19:00 AM         1    0.00    0.00    0.00    0.00     0  /sbin/init
    07:19:01 AM         1    0.00    0.00    0.00    0.00     0  /sbin/init
    Average:               1    0.00    0.00    0.00    0.00     -  /sbin/init
    %usr:      該進程在用戶態的CPU使用率。
    %system:該進程在內核態(系統級)的CPU使用率。
    %CPU:     該進程的總CPU使用率,若是在SMP環境下,該值將除以CPU的數量,以表示每CPU的數據。
    CPU:         該進程所依附的CPU編號(0表示第一個CPU)。

    #監控pid爲1(init)的進程的設備IO資源負載狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。
    /> pidstat -p 1 2 3 -d    
    07:24:49 AM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
    07:24:51 AM         1      0.00      0.00      0.00  init
    07:24:53 AM         1      0.00      0.00      0.00  init
    07:24:55 AM         1      0.00      0.00      0.00  init
    Average:               1      0.00      0.00      0.00  init
    kB_rd/s:   該進程每秒的字節讀取數量(KB)。
    kB_wr/s:   該進程每秒的字節寫出數量(KB)。
    kB_ccwr/s: 該進程每秒取消磁盤寫入的數量(KB)。

    #監控pid爲1(init)的進程的內存使用狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。
    /> pidstat -p 1 2 3 -r
    07:29:56 AM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    07:29:58 AM         1      0.00      0.00    2828   1368   0.13  init
    07:30:00 AM         1      0.00      0.00    2828   1368   0.13  init
    07:30:02 AM         1      0.00      0.00    2828   1368   0.13  init
    Average:               1      0.00      0.00    2828   1368   0.13  init
    %MEM:  該進程的內存使用百分比。

    #監控pid爲1(init)的進程任務切換狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。
    /> pidstat -p 1 2 3 -w
    07:32:15 AM       PID   cswch/s nvcswch/s  Command
    07:32:17 AM         1      0.00      0.00  init
    07:32:19 AM         1      0.00      0.00  init
    07:32:21 AM         1      0.00      0.00  init
    Average:            1      0.00      0.00  init
    cswch/s:    每秒任務主動(自願的)切換上下文的次數。主動切換是指當某一任務處於阻塞等待時,將主動讓出本身的CPU資源。
    nvcswch/s: 每秒任務被動(不自願的)切換上下文的次數。被動切換是指CPU分配給某一任務的時間片已經用完,所以將強迫該進程讓出CPU的執行權。

    #監控pid爲1(init)的進程及其內部線程的內存(r選項)使用狀況,其中每隔2秒刷新並輸出一次,3次後程序退出。須要說明的是,若是-t選項後面不加任何其餘選項,缺省監控的爲CPU資源。結果中黃色高亮的部分表示進程和其內部線程是樹狀結構的顯示方式。
    /> pidstat -p 1 2 3 -tr
    Linux 2.6.32-71.el6.i686 (Stephen-PC)   11/16/2011      _i686_  (1 CPU)

    07:37:04 AM      TGID       TID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    07:37:06 AM         1         -      0.00      0.00        2828   1368      0.13  init
    07:37:06 AM         -         1      0.00      0.00        2828   1368      0.13  |__init

    07:37:06 AM      TGID       TID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    07:37:08 AM         1         -      0.00      0.00        2828   1368      0.13  init
    07:37:08 AM         -         1      0.00      0.00        2828   1368      0.13  |__init

    07:37:08 AM      TGID       TID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    07:37:10 AM         1         -      0.00      0.00        2828   1368      0.13  init
    07:37:10 AM         -         1      0.00      0.00        2828   1368      0.13  |__init

    Average:         TGID       TID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    Average:            1         -      0.00      0.00        2828   1368      0.13  init
    Average:            -         1      0.00      0.00        2828   1368      0.13  |__init
    TGID: 線程組ID。
    TID: 線程ID。  線程

    以上監控不一樣資源的選項能夠同時存在,這樣就將在一次輸出中輸出多種資源的使用狀況,如:pidstat -p 1 -dr。

    7.  報告磁盤空間使用情況(df):
    該命令最爲經常使用的選項就是-h,該選項將智能的輸出數據單位,以便使輸出的結果更具可讀性。
    /> df -h
    Filesystem             Size  Used   Avail Use% Mounted on
    /dev/sda1             5.8G  3.3G  2.2G  61%   /
    tmpfs                  504M  260K  504M   1%  /dev/shm

    8.  評估磁盤的使用情況(du):blog

選項 說明
-a 包括了全部的文件,而不僅是目錄。
-b 以字節爲計算單位。
-k 以千字節(KB)爲計算單位。
-m 以兆字節(MB)爲計算單位。
-h 是輸出的信息更易於閱讀。
-s 只顯示工做目錄所佔總空間。
--exclude=PATTERN 排除掉符合樣式的文件,Pattern就是普通的Shell樣式,?表示任何一個字符,*表示任意多個字符。
--max-depth=N 從當前目錄算起,目錄深度大於N的子目錄將不被計算,該選項不能和s選項同時存在。 
 

    #僅顯示子一級目錄的信息。
    /> du --max-depth=1 -h
    246M    ./stephen
    246M    .    
    /> du -sh ./*   #獲取當前目錄下全部子目錄所佔用的磁盤空間大小。
    352K    ./MemcachedTest
    132K    ./Test
    33M     ./thirdparty    
    #在當前目錄下,排除目錄名模式爲Te*的子目錄(./Test),輸出其餘子目錄佔用的磁盤空間大小。
    /> du --exclude=Te* -sh ./*  
    352K    ./MemcachedTest
    33M     ./thirdparty隊列

分享轉發點贊私信,點擊這裏獲取更多linux筆記乾貨

相關文章
相關標籤/搜索