Linux運維常用的排錯必備小技巧及命令彙總

Linux AWK Vi Sed 運維人生精選 運維人生精選 2017-09-01

前言

在Linux日常運維中,你或許知道很多很多的基礎命令,像cd,rm,mkdir,chomod,netstat等等基礎命令,但是你是否真的瞭解這些命令高級複雜但是卻高效的用法?即使你記得以前敲過,但是你現在是否能敲出來?學習的過程就是需要不斷的進行總結匯總的,我也一樣,因此我也編寫了這技巧篇的文章,幫助自己彙總,也分享給大家。

Linux運維常用的排錯必備小技巧及命令彙總

一、日誌分析篇

以Nginx的訪問日誌為例。

1、獲取訪問前5位的IP地址

# netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n5

# netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n5

以上兩個命令均可以實現找出訪問前5位的IP地址,僅僅是結果展示一個是縮進展示,一個是排版展示的區別而已。

Linux運維常用的排錯必備小技巧及命令彙總

2、找出前5個訪問次數最多的頁面或者文件

# cat www.access.log | awk '{print $8}' | sort | uniq -c | sort -nr | head -5

Linux運維常用的排錯必備小技巧及命令彙總

3、根據日誌統計網絡的流量,單位M(前提是日誌中沒有屏蔽小文件記錄日誌,如jpg,js,css等)

# cat www.access.log | awk '{sum+=$11} END {print sum/1024/1024}'

Linux運維常用的排錯必備小技巧及命令彙總

4、統計所有狀態碼數量

# cat www.access.log | awk '{++S[$10]} END {for (a in S) print a,S[a]}'

Linux運維常用的排錯必備小技巧及命令彙總

二、數據庫篇

1、使用tcpdump查看正在執行的數據庫操作

# tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'

Linux運維常用的排錯必備小技巧及命令彙總

三、系統狀態查詢篇

1、查看系統的網絡流量

# sar -n 'DEV' 1 10000000|awk 'BEGIN{printf "DEVICE\tIN\t\tOUT\n"}''/eth0/ {printf $2" ";printf $5*8/1024"Kbps ";print $6*8/1024"Kbps"}'

Linux運維常用的排錯必備小技巧及命令彙總

2、查看系統佔用IO最高的進程

# yum -y install dstat

# dstat -g -r --top-io

Linux運維常用的排錯必備小技巧及命令彙總

3、找出內存使用最高的進程,並顯示內存使用率(包括used,buffer,cache,free值)

# dstat -g -m -s --top-mem

Linux運維常用的排錯必備小技巧及命令彙總

4、找出cpu佔用最大的進程

# dstat -c -y --proc-count --top-cpu

Linux運維常用的排錯必備小技巧及命令彙總

5、查看當前系統是否有IO壓力

# iostat -x 10

Linux運維常用的排錯必備小技巧及命令彙總

如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸;

如果 svctm 比較接近 await,說明I/O 幾乎沒有等待時間;

如果 await 遠大於 svctm,說明 I/O隊列太長,應用得到的響應時間變慢;

idle小於70% IO壓力就較大了,一般讀取速度有較多的wait;

6、查詢系統上每顆CPU的用戶、系統耗用率,io等待率,空閒率

# sar -u -P ALL 2 5

Linux運維常用的排錯必備小技巧及命令彙總

7、關於APR綁定與緩存清除

綁定已知機器的arp地址到文件:

# cat /proc/net/arp | awk '{print $1 " " $4}' |sort -t. -n +3 -4 > /etc/ethers

Linux運維常用的排錯必備小技巧及命令彙總

清除已知的arp緩存:

# arp -n|awk '/^[1-9]/ {print "arp -d "$1}'|sh

四、網絡連接篇

1、查詢TCP的連接狀態

netstat -nat |awk '{print $6}' |sort|uniq -c|sort -rn

netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}'

netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'

netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}'

netstat -n |awk '/^tcp/ {print $NF}' |sort|uniq -c|sort -rn

netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c

以上的命令查詢出來的效果基本上一致,只是不同的方法,羅列出來是想大家加深理解。

Linux運維常用的排錯必備小技巧及命令彙總

2、找出80端口tcp請求最高的5個IP

# netstat -anlp | grep 80 | grep tcp | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n5

Linux運維常用的排錯必備小技巧及命令彙總

3、查找time_wait狀態較多的鏈接

# netstat -n | grep TIME_WAIT | awk '{print $5}' | sort | uniq -c | sort -rn | head -n5

Linux運維常用的排錯必備小技巧及命令彙總

五、技巧篇

1、找出指定路徑下的0字節文件並刪除

# find ./ -type f -size 0 -exec rm -rf {} \;

2、sed替換字符串

# sed -i '/Root/s/no/yes/' /etc/ssh/sshd_config

sed在這個文裡Root的一行,匹配Root一行,將no替換成yes。

3、刪除N天前的文件

# find /tmp -mtime +5 -type f -exec rm -rf {} \;

可以用於日誌定期清理,刪除N天以前的日誌

4、Linux下編輯器vi(vim)使用技巧

vi編輯器(涉及到修改,添加,查找)

插入(insert)模式

i    光標前插入

I    光標行首插入

a    光標後插入

A    光標行尾插入

o    光標所在行下插入一行,行首插入

O    光標所在行上插入一行,行首插入

G    移至最後一行行首

nG    移至第n行行首

n+    下移n行,行首

n-    上移n行,行首

:/str/   從當前往右移動到有str的地方

:?str?    從當前往左移動到有str的地方

:s/str1/str2/    將找到的第一個str1替換為str2  

:s/str2/str2/g   將當前行找到的所有str1替換為str2

:n1,n2s/str1/str2/g 將從n1行至n2行找到的所有的str1替換為str2

:1,.s/str1/str2/g  將從第1行至當前行的所有str1替換為str2

:.,$s/str1/str2/g  將從當前行至最後一行的所有str1替換為str2

後續

未完待遇,請繼續關注~~~

相關推薦

推薦中...