查詢連接數
netstat常用參數
-a (all)顯示所有選項
-t (tcp)僅顯示tcp協議 (一般都是tcp連接)
-n 拒絕顯示別名,能顯示數字的全部轉化成數字。(便于匹配ip地址和端口號)
-p 顯示進程號egrep = grep -E 可以使用基本的正則表達外, 還可以用擴展表達式. 注意區別.
擴展表達式:
加號+ 匹配一個或者多個先前的字符, 至少一個先前字符.
? 匹配0個或者多個先前字符.
a|b|c 匹配a或b或c
() 字符組, 如: love(able|ers) 匹配loveable或lovers.
(..)(..)\1\2 模板匹配. \1代表前面第一個模板, \2代第二個括弧里面的模板.
x{m,n} =x{m,n} x的字符數量在m到n個之間.
3
- 三次握手
- client發送syn: closed -> syn-send
- server 收到syn后為這次連接分配資源,然后回復syn+ack: listen -> syn-rcvd (為什么不能在這一步直接established,因為這個建連請求很可能過了很長一段時間才過來,這時候client已經死了,這個連接就變成一個單向連接,憑空占用了server的一個連接資源;為了確認client還活著,就得等待client的ack)
- client收到后回復Ack: syn-send -> established
- server收到ack后: syn-rcvd -> established
- 四次揮手
- client發送完最后一個請求后,發送fin,意思是我client沒有數據要發給你了,established -> fin-wait1
- server 收到fin后,如果還有應答沒有完成不必急著關閉連接,發送ack,告訴client,你的請求收到了但是我還有應答沒發完,請你等我的消息(這里比建立連接場景多了一次揮手,因為server有可能沒法馬上回復fin) established -> close-wait
- client收到ack后,繼續等待server的消息:fin-wait1 -> fin-wait2(這一步一般很快,因為ack正常情況是立即回復的)
- server確定應答都處理完了,發送fin告訴client,我已經發完數據準備關閉連接了,close-wait -> last-ack
- client收到fin后回復ack ,擔心這個ack沒有送到server那里,就等著server,最多等2分鐘: fin-wait2 -> time-wait,等待超時后 closed
6 server如果長時間沒有收到ack可以重發給client,有可能是因為網絡原因client的ack沒有收到,這時候client還是time-wait狀態能夠處理server的ack重發,如果收到了ack就知道可以關閉連接了,last-ack -> close
netstat -anpt | grep 機器地址:端口號 | egrep "TIME_WAIT|CLOSE_WAIT|ESTABLISHED"
打包備份目錄,排除指定子目錄
tar -zcvf /opt/back/xxx.tar.gz -exclude /opt/web/useless/ /opt/web
查詢線程數
ps 選項:
-e 顯示所有進程(默認顯示當前用戶進程)
-L 顯示線程
-f 顯示詳細信息,如果是線程會顯示線程號LWP,和線程數量NLWP
ps -eLf | wc -l
查找大日志文件
find 路徑 -name '文件名正則' -size +1000M -exec du -h {} ;
顯示文件內容,過濾注釋
grep -v "注釋符號" 文件名
磁盤IO異常排查
iotop -o 查看當前正在寫操作的所有進程信息