linux 經常使用命令top、awk、sed等

一、watch命令 :週期性的執行下個程序,並全屏顯示執行的結果html

-n:指定週期秒數
-d:高亮顯示變更過的地方
-t:關閉watch 命令在頂部的時間間隔命令顯示

示例:mysql

watch -n 1 -d netstat  -ant 
    watch -n 1 -d 'pstree | grep http'

二、tcpdump命令:linux網絡抓包工具linux

三、top命令:顯示系統中各個進程的資源佔用情況,相似於Windows的任務管理器正則表達式

-b 批處理
-c 顯示整個命令行而不僅是顯示命令名
-I 忽略失效過程
-s 保密模式
-S 累積模式
-i<時間> 設置間隔時間
-u<用戶名> 指定用戶名
-p<進程號> 指定進程
-n<次數> 循環顯示的次數

信息:sql

PID 進程id
 PPID 父進程id
 RUSER Real user name
 UID 進程全部者的用戶id
 USER 進程全部者的用戶名
 GROUP 進程全部者的組名
 TTY 啓動進程的終端名。不是從終端啓動的進程則顯示爲 ?
 PR 優先級
 NI nice值。負值表示高優先級,正值表示低優先級
 P 最後使用的CPU,僅在多CPU環境下有意義
 %CPU 上次更新到如今的CPU時間佔用百分比
 TIME 進程使用的CPU時間總計,單位秒
 TIME+ 進程使用的CPU時間總計,單位1/100秒
 %MEM 進程使用的物理內存百分比
 VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
 SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
 RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
 CODE 可執行代碼佔用的物理內存大小,單位kb
 DATA 可執行代碼之外的部分(數據段+棧)佔用的物理內存大小,單位kb
 SHR 共享內存大小,單位kb
 nFLT 頁面錯誤次數
 nDRT 最後一次寫入到如今,被修改過的頁面數。
 S 進程狀態。(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/中止,Z=殭屍進程)
 COMMAND 命令名/命令行
 WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名

示例:編程

top -d 1  #設置top的顯示間隔(以秒計)
  top -n 3  #設置top退出前迭代的次數
  top -p 12345 -p 6789//每隔5秒顯示pid是12345和pid是6789的兩個進程的資源佔用狀況
  top -d 2 -c -p 123456 //每隔2秒顯示pid是12345的進程的資源使用狀況,並顯式該進程啓動的命令行參數

四、awk:一個強大的文本分析工具,用於在linux/unix下對文本和數據進行處理。數據能夠來自標準輸入、一個或多個文件,或其它命令的輸出。支持用戶自定義函數和動態正則表達式等先進功能,是linux/unix下的一個強大編程工具。在命令行中使用,但更可能是做爲腳原本使用。
參考:https://www.cnblogs.com/xudon...
使用方法:網絡

awk '{pattern + action}' {filenames}
  awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

參數:tcp

-F fs or --field-separator fs #指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。
 -v var=value or --asign var=value #賦值一個用戶定義變量。
 -f scripfile or --file scriptfile #從腳本文件中讀取awk命令。
 
 特殊:     
 $0            表示整個當前行
 $1            每行第一個字段
 NF            字段數量變量
 NR            每行的記錄號,多文件記錄遞增
 FNR           與NR相似,不過多文件記錄不遞增,每一個文件都從1開始
 \t            製表符
 \n            換行符
 FS            BEGIN時定義分隔符
 RS            輸入的記錄分隔符, 默認爲換行符(即文本是按一行一行輸入)
 ~             匹配,與==相比不是精確比較
!~             不匹配,不精確比較
==             等於,必須所有相等,精確比較
!=             不等於,精確比較
&&            邏輯與
||             邏輯或
+              匹配時表示1個或1個以上
/[0-9][0-9]+/  兩個或兩個以上數字
/[0-9][0-9]*/  一個或一個以上數字
FILENAME       文件名
OFS            輸出字段分隔符, 默認也是空格,能夠改成製表符等
ORS            輸出的記錄分隔符,默認爲換行符,即處理結果也是一行一行輸出到屏幕
-F'[:#/]'      定義三個分隔符

使用示例:編輯器

awk -F":" '{print $1}'  /etc/passwd
 awk -F":" '{print $1,$3}'  /etc/passwd                          #多了一個逗號,$1與$3使用空格分隔
 awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd  #自定義輸出  
 awk -F: '{print NF}' /etc/passwd                                #顯示每行有多少字段
 awk -F: '{print $NF}' /etc/passwd                               #將每行第NF個字段的值打印出來
 awk -F: 'NF==4 {print}' /etc/passwd                             #顯示只有4個字段的行
 awk -F: 'NF>2{print $0}' /etc/passwd                            #顯示每行字段數量大於2的行
 awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd                 #依次打印行號,字段數,最後字段值,製表符,每行內容
 awk -F: 'NR==5 || NR==6{print}'  /etc/passwd                    #顯示第5行和第6行
 //匹配代碼塊
 //純字符匹配   !//純字符不匹配   ~//字段值匹配    !~//字段值不匹配   ~/a1|a2/字段值匹配a1或a2   
 awk '/mysql/{print $0}' /etc/passwd              #三條指令結果同樣
 awk '!/mysql/{print $0}' /etc/passwd             #輸出不匹配mysql的行
 awk '!/mysql|mail/{print}' /etc/passwd           #輸出不匹配mysql或mail的行
 awk '/[2][7][7]*/{print $0}' /etc/passwd         #匹配包含27爲數字開頭的行,如27,277,2777...
 awk -F: '$1~/mail/{print $1}' /etc/passwd        #$1匹配指定內容才顯示
 awk -F: '$1!~/mail|mysql/{print $1}' /etc/passwd        

 IF語句 必須用在{}中,且比較內容用()擴起來
 awk -F: '{if($1~/mail/) print $1}' /etc/passwd                                     
 awk -F: '{if($1~/mail/) {print $1}}'  /etc/passwd                              
 awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd  #if...else...

 條件表達式 ==   !=   >   >=  
 awk -F":" '{if($1=="mysql") print $3}' /etc/passwd          //與上面相同 
 awk -F":" '$1!="mysql"{print $3}' /etc/passwd               //不等於
 awk -F":" '$3>1000{print $3}' /etc/passwd                   //大於

 邏輯運算符 && || 
 awk -F: '{if($1~/mail/ && $3>8) print }' /etc/passwd
 awk -F: '{if($1~/mail/ || $3>1000) print }' /etc/passwd

應用:函數

ls -l|awk 'NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf "%-6s %-5s %-3s %-2s \n",i," ",sum[i]/1024/1024,"MB"}'

五、sed:一種流編輯器,它是文本處理中很是有用的工具,可以完美的配合正則表達式,處理時,把當前處理的行存儲在臨時緩衝區中,稱爲『模式空間』(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,直到文件末尾。原文件內容並無改變。
參考:http://www.runoob.com/linux/l...
參數:

參數說明:
 -f<script文件>或--file=<script文件> 以選項中指定的script文件來處理輸入的文本文件。
 -h或--help 顯示幫助。
 -V或--version 顯示版本信息。
 -n :只打印模式匹配的行
 -e :直接在命令行模式上進行sed動做編輯,此爲默認選項
 -i :直接修改文件內容
 
 動做說明:
 a :新增, a 的後面能夠接字串,而這些字串會在新的一行出現(目前的下一行)~
 c :取代, c 的後面能夠接字串,這些字串能夠取代 n1,n2 之間的行!
 d :刪除,由於是刪除啊,因此 d 後面一般不接任何咚咚;
 i :插入, i 的後面能夠接字串,而這些字串會在新的一行出現(目前的上一行);
 p :打印,亦即將某個選擇的數據印出。一般 p 會與參數 sed -n 一塊兒運行~
 s :取代,能夠直接進行取代的工做哩!一般這個 s 的動做能夠搭配正規表示法!例如 1,20s/old/new/g 就是啦!
 
 = 顯示文件行號
 w filename
 r filename 從另外一個文件中讀文本,相似輸入重定向 <
 q 第一個模式匹配完成後退出或當即退出
 {} 在定位行執行的命令組,用分號隔開
 \<pattern\> 單詞錨點

示例:

echo hello|sed 's/hello/(&)/' #將hello放在擴號中
sed -i '/DEVICE/c\Ethernet' test 
nl /etc/passwd | sed '2i drink tea' 
sed -i '/connect/s#YES#NO#' test    #匹配connect的行,把YES替換成NO
相關文章
相關標籤/搜索