io、free、ps、netstat命令、Linux下抓包

 

一、監控 io 性能linux

 

這個 iostat 命令,在安裝 sar 命令的時候,就一塊兒安裝了,因此不用從新安裝。具體用法見下圖,ios

iostat 命令和 vmstat 挺像的,輸入 iostat 能夠直接查看磁盤顯示狀況,輸入 iostat 1 就是每隔1秒顯示一次,是動態命令,使用 ctrl + c 結束命令。sda 和 sdb 表示磁盤,第3 列和第4 列表示讀和寫的速度。這個命令沒什麼用處,由於命令 sar -b 也能夠看出這些信息。web

接着往下介紹命令 iostat -x 1,見下圖,windows

這個命令有一個很是重要的指標 %util ,表示 io 等待,在統計時間內全部處理IO時間,除以總共統計時間。例如,若是統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,因此該參數暗示了設備的繁忙程度。通常地,若是該參數是100%表示設備已經接近滿負荷運行了(固然若是是多磁盤,即便%util是100%,由於磁盤的併發能力,因此磁盤使用未必就到了瓶頸)。centos

還有一個命令 iotop ,須要安裝,見下圖,緩存

iotop 命令和 top 命令很像,也是動態顯示,輸入命令 iotop ,回車,見下圖,安全

能夠看到排序,可是 io 沒有什麼讀寫信息,也就沒有什麼排序。按字母 q 退出。服務器

 

二、free 命令網絡

 

直接查看內存使用情況。輸入 free ,回車,見下圖,多線程

能夠看到當前系統的總內存大小以及使用內存的狀況,單純的 free 命令單位是 KB ,-m 選項的單位是 M ,-g 選項的單位是 G,-h 選項是智能的顯示單位。其中,第2行是內存使用狀況,第3行是 swap的使用狀況。咱們關注的是第2行的數據,從上例中可看到當前系統內存總大小爲999936 KB,已經使用118532 KB,剩餘578680 KB,共享6832 KB。 系統初始化時,就已經分配出很大一部份內存給緩存(buff/cache),這部分緩存用來隨時提供給程序使用,若是程序不用,那這部份內存就空閒。CPU 和磁盤之間,須要經過內存來緩存。從磁盤到CPU之間的內存叫 cache ,從CPU到磁盤之間的內存叫 buffer。

公式:total=used+free+buff/cache。

avaliable包含free和buffer/cache剩餘部分。

 

三、ps 命令

 

 

做爲系統管理員,必定要知道你所管理的系統都有那些進程在運行,在windows下只要打開任務管理器便可查看。在linux下呢?其實在上面介紹的top命令就能夠,可是不容易看,還有專門顯示系統進程的命令 ps ,靜態顯示出來進程狀況。

先輸入命令 man ps ,回車,來查看一下 ps 的功能,見下圖,

能夠看到 ps 的做用是報告當前流程的快照。

接着來看一下 ps 的用法,見下圖,

ps aux 命令顯示當前系統的全部進程,它常常會連同管道符一塊兒使用,用來查看某個進程或者它的數量,見下圖,

ps 還有一種用法,見下圖,

-elf 的用法和 aux 大同小異,顯示的信息基本上是同樣的,不一一截圖了。這兩種方法就是看我的喜愛。

接着介紹 ps aux 命令結果裏面幾個參數的意義:

USER:進程的運行用戶

PID :進程的id,這個id頗有用,在linux中內核管理進程就得靠pid來識別和管理某一個程序,好比我想終止某一個進程,則用 kill  進程的pid 有時並不能殺掉,則須要加一個-9選項了 kill  -9  進程pid

如今假設 PID 爲509的進程是非法進程,先查看一下進程的目錄,看看進程是從哪邊啓動起來的,就是下圖紅色框框綠色字體的內容。

%CPU   CPU百分比

%MEM  內存百分比

VSZ       虛擬內存

RSS       物理內存

START   何時啓動

TIME     運行多久

COMMAND 命令

STAT :表示進程的狀態,進程狀態分爲如下幾種(不要求記住,但要了解)

D 不能中斷的進程(一般爲IO)

R 正在運行中的進程

S (大寫的S)已經中斷的進程,一般狀況下,系統中大部分進程都是這個狀態

T 已經中止或者暫停的進程,若是咱們正在運行一個命令,好比說 vmstat 1 ,若是咱們按一下 ctrl + z  讓他暫停,那麼咱們用ps查看就會顯示T這個狀態,見下圖,

W 這個好像是說,從內核2.6xx 之後,表示爲沒有足夠的內存頁分配

X 已經死掉的進程(這個好像歷來不會出現)

Z 殭屍進程,殺不掉,打不死的垃圾進程,佔系統一小點資源,不過沒有關係。若是太多,就有問題了。通常不會出現。

< 高優先級進程,CPU先給這些進程用

N 低優先級進程

L 在內存中被鎖了內存分頁(還沒見過,瞭解便可)

s (小寫的s)主進程,通常顯示爲 Ss 爲主進程,S 爲子進程。

l 多線程進程,意思就是這個進程有多個線程。這邊線程和進程,能夠查查資料

+ 表明在前臺運行的進程

這個ps命令是在工做中用的很是多的命令之一。

 

總結:

iostat -x     %util表示在統計時間內全部處理IO時間,除以總共統計時間

iostat         顯示當前磁盤使用狀況

iostat 1      每隔1秒顯示一次磁盤使用狀況,是動態命令,使用 ctrl + c 結束命令

iotop          磁盤使用狀況,按 io 排序

free            能夠看到當前系統的總內存大小以及使用內存的狀況,-m 單位M,-g單位G,-h智能顯示單位

ps aux        靜態的顯示當前系統的全部進程,常常與 | 一塊兒使用

ps -elf        結果與 ps aux 大同小異,看我的喜愛使用

 

四、netstat

 

netstat 是在內核中訪問網絡鏈接狀態及其相關信息的程序,它能提供TCP鏈接,TCP和UDP監聽,進程內存管理的相關報告。

netstat 是控制檯命令,是一個監控TCP/IP網絡的很是有用的工具,它能夠顯示路由表、實際的網絡鏈接以及每個網絡接口設備的狀態信息。netstat用於顯示與IP、TCP、UDP和ICMP協議相關的統計數據,通常用於檢驗本機各端口的網絡鏈接狀況。

若是你的計算機有時候接收到的數據包致使出錯數據或故障,你沒必要感到奇怪,TCP/IP能夠允許這些類型的錯誤,並可以自動重發數據包。但若是累計的出錯狀況數目佔到所接收的IP數據報至關大的百分比,或者它的數目正迅速增長,那麼你就應該使用netstat查一查爲何會出現這些狀況了。

netstat 命令的功能是顯示網絡鏈接、路由表和網絡接口信息,可讓用戶得知有哪些網絡鏈接正在運做。使用時若是不帶參數,netstat顯示活動的 TCP 鏈接。

 

netstat 命令用來打印網絡鏈接情況、系統所開放端口、路由表等信息。最經常使用的關於netstat的命令就是這個 netstat -lnp (查看當前系統啓動哪些端口)以及 netstat  -an (查看網絡鏈接情況)這兩個命令很是有用。

正常狀況下,一臺機器是沒有任何的端口監聽,也就意味着它沒有辦法和其餘的機器通訊。要想提供web服務,讓其餘人訪問服務器和網站,就須要監聽一個端口。那麼怎麼查看監聽端口?輸入命令 netstat -lnp ,回車,見下圖,

重點關注上圖紅色框框的內容,顯示監聽了哪些端口,後面會常常用到這個命令。tcp和udp,最好網上查查他們倆的意思,作個瞭解。

tcp 百度百科 https://baike.baidu.com/item/TCP/33012?fr=aladdin 

dup 百度百科 https://baike.baidu.com/item/UDP/571511?fr=aladdin 

除了 tcp 和 dup ,還有 unix ,以前說過 socket 文件,說的是同一臺服務器,兩個進程以前互相通訊使用 socket 文件。

只查看tcp和udp的命令,見下圖,

還有一個命令,輸入 netstat -an ,回車,見下圖,

內容較多,沒有一一截圖。這個命令涉及擴展知識,叫TCP/IP的「三次握手,四次揮手」。「三次握手,四次揮手」是重點。

上圖中常見狀態即鏈接狀態。在原模式中沒有狀態,在用戶數據報協議中也常常沒有狀態,因而狀態列能夠空出來。如有狀態,一般取值爲:

LISTEN

偵聽來自遠方的TCP端口的鏈接請求

SYN-SENT

在發送鏈接請求後等待匹配的鏈接請求

SYN-RECEIVED

在收到和發送一個鏈接請求後等待對方對鏈接請求的確認

ESTABLISHED

表明一個打開的鏈接,表示正在通訊。這個數值須要關注,若是很大的話,說明系統如今很忙。一般狀況下,1000之內,服務器都是能夠接受的。

FIN-WAIT-1

等待遠程TCP鏈接中斷請求,或先前的鏈接中斷請求的確認

FIN-WAIT-2

從遠程TCP等待鏈接中斷請求

CLOSE-WAIT

等待從本地用戶發來的鏈接中斷請求

CLOSING

等待遠程TCP對鏈接中斷的確認

LAST-ACK

等待原來的發向遠程TCP的鏈接中斷請求的確認

TIME-WAIT

等待足夠的時間以確保遠程TCP接收到鏈接中斷請求的確認

CLOSED

沒有任何鏈接狀態

 

分享一個小技巧,能夠查看全部的狀態的數字,輸入命令 netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}' ,回車,見下圖,

個人虛擬機上的狀態比較少,顯示爲 LISTEN 4個,ESTABLISHED 1個。

 

還有一個命令 ss ,它與 netstat 相似,見下圖,

內容較多,不一一截圖。ss -an 也可以查看狀態,想單獨查看某一個狀態的話,輸入命令 ss -an | grep -i listen,回車,見下圖,

這個命令有個缺點,不會顯示進程的名字,netstat 命令就能夠。

 

五、Linux 下抓包

 

 

TcpDump能夠將網絡中傳送的數據包徹底截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。

Linux做爲網絡服務器,特別是做爲路由器和網關時,數據的採集和分析是不可少的。TcpDump是Linux中強大的網絡數據採集分析工具之一。

用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。

做爲互聯網上經典的的系統管理員必備工具,tcpdump以其強大的功能,靈活的截取策略,成爲每一個高級的系統管理員分析網絡,排查問題等所必備的工具之一。

tcpdump提供了源代碼,公開了接口,所以具有很強的可擴展性,對於網絡維護和入侵者都是很是有用的工具。tcpdump存在於基本的 FreeBSD系統中,因爲它須要將網絡接口設置爲混雜模式,普通用戶不能正常執行,但具有root權限的用戶能夠直接執行它來獲取網絡上的信息。所以系統中存在網絡分析工具主要不是對本機安全的威脅,而是對網絡上的其餘計算機的安全存在威脅。

基本上tcpdump的總的輸出格式爲:系統時間 來源主機.端口 > 目標主機.端口 數據包參數

 

有時候,也許你會有這樣的需求,想看一下某個網卡上都有哪些數據包,尤爲是當你初步斷定你的服務器上有流量攻擊。這時,使用抓包工具來抓一下數據包,就能夠知道有哪些IP在攻擊你了。

若是沒有tcpdump 這個命令,須要用 yum install -y tcpdump 命令去安裝一下。見下圖,

接着執行最簡單的用法,輸入命令 tcpdump -nn ,回車,見下圖,

出現上圖所示一段話,而後命令就卡着沒有動,須要使用 ctrl + c 才能結束命令。這是由於個人設備名字比較特殊,因此須要指定網卡的名字,使用命令 ifconfig ,見下圖,

而後輸入命令 tcpdump -nn -i ens33 ,回車,見下圖,

命令跑得很是快,須要使用 ctrl + c 來結束命令。上圖中,結果顯示出不少信息,命令這邊的 -nn 中第1個 n 表示IP用數字的形式顯示出來,若是不加就會顯示成主機名。輸入命令 tcpdump -i ens33 ,回車,見下圖,

能夠看到,顯示的ip地址變成主機名了。主機名對咱們來講,不知道是誰,因此仍是用 -nn 查看ip地址比較直觀。咱們本身的主機名上的 .ssh 意思是ssh服務的端口 22 ,知道 22 的話就還好,不知道的話,就不知道是誰了。

上上圖中第1列是時間,第2列是IP,第3列顯示的是原IP.原端口,> 是一個方向表示到哪裏去,第4列顯示的信息是如今的IP和端口,後面的信息是該數據包的相關信息。咱們主要關注的是IP地址和端口這兩列。認真看的話,會發現這兩列IP地址是一對一對,並且互相發送信息。

tcpdump 查看的就是數據的流向。

也能夠指定端口查看,來看一下123端口的,輸入命令 tcpdump -nn -i ens33 port 123 ,回車,見下圖,

結果就只有端口123的出來,固然也有排除的命令,輸入 tcpdump -nn -i ens33 not port 22 ,回車,見下圖,

還能夠加入條件,輸入命令 tcpdump -nn -i ens33 not port 22 and host 192.168.218.128 ,回車,見下圖,

還能夠指定數據包的長度和個數,見下圖,

上圖中的10就表示個數,還能夠指定存放的文件,文件名隨便取,見下圖,

這邊取包會須要點時間,不是卡住了,耐心等一會就會有結果的。最終寫出的文件,能夠進入查看,輸入命令 file /tmp/1.cap ,回車,見下圖,

這個文件沒法用 cat 命令查看,結果會出現一堆亂碼,可使用 file 命令查看一下大體信息,也可使用 tcpdump 命令查看,須要加上 -r ,見下圖,

結果就是一些數據流。

接着分享一個命令 tshark ,須要先安裝一個工具,見下圖,

安裝完畢,往下操做,輸入命令 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端口訪問的狀況,虛擬機是查不到狀況的,由於沒有任何的80端口在監聽,沒有提供web服務。因此上圖沒有結果,看不到效果,可是須要記住這個命令。這個命令的結果相似於web的訪問日誌,包含時間、IP地址、訪問的域名,連接等信息。

 

總結:

netstat -lnp         查看當前系統啓動哪些端口

netstat -an          查看網絡鏈接情況

netstat -ltnp        查看當前系統啓動的tcp端口

netstat -lunp       查看當前系統啓動的udp端口

netstat -ltunp      查看當前系統啓動的tcp和udp端口

netstat -an | awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key, "\t", sta[key]}'     能夠查看全部的狀態的數字。

課件地址在 centos7.aminglinux.com 

ss -an                  與 netstat 殊途同歸,都是查看狀態的,不過它不會顯示進程的名字

ss -an | grep -i listen       查看狀態爲 listen 的狀況

tcpdump -nn -i ens33     查看數據的流向,可查看ip地址和端口

tcpdump -i ens33            不加-nn查看主機名,沒有ip地址和端口

tcpdump -nn -i ens33 port 123   查看指定端口123的數據流向

tcpdump -nn -i ens33 not port 22    查看非指定端口22的數據流向

tcpdump -nn -i ens33 not port 22 and host 192.168.218.128     查看非指定端口22和ip地址是 192.168.218.128 的數據流向

tcpdump -nn -i ens33 -c 10       查看10個數據的流向

tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap    查看10個數據的流向而且指定存放的路徑/tmp/1.cap 

tcpdump -r /tmp/1.cap      查看數據存放的文件

相關文章
相關標籤/搜索