1. 程式人生 > >Linux日常管理技巧(2):free,ps,netstat命令和抓包工具

Linux日常管理技巧(2):free,ps,netstat命令和抓包工具

情況下 路由器配置 傳輸協議 method ups lis red field 保存

一、free命令

free命令可以顯示當前系統未使用的和已使用的內存數目,還可以顯示被內核使用的內存緩沖區。
用法

free [選項]

選項:

-b:以Byte為單位顯示內存使用情況;
-k:以KB為單位顯示內存使用情況;
-m:以MB為單位顯示內存使用情況;
-o:不顯示緩沖區調節列;
-s<間隔秒數>:持續觀察內存使用狀況;
-t:顯示內存總和列;
-V:顯示版本信息。

實例:
技術分享圖片
total:內存總數;
used:已經使用的內存數;
free:空閑的內存數;
shared:當前已經廢棄不用;
buff/cache:分配給buffer和cache的內存總共有多大;
available:系統可使用內存大小,avaliable包含free和buffer/cache剩余部分。

二、ps命令

ps命令用於報告當前系統的進程狀態。可以搭配kill指令隨時中斷、刪除不必要的程序。ps命令是最基本同時也是非常強大的進程查看命令,使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等,總之大部分信息都是可以通過執行該命令得到的。
用法:

# ps [選項]

選項(參考):

http://man.linuxde.net/ps
由於ps命令能夠支持的系統類型相當的多,所以選項多的離譜!

實例:
技術分享圖片
有的人喜歡用ps -elf 大同小異,顯示的信息基本上是一樣的。ps命令還有更多的用法,這裏不多做介紹,因為你只要會用這個命令就足夠了,如果需要其他用法,man一下或者網上搜索。下面說幾個參數的意義。

PID :進程的id,這個id很有用,在linux中內核管理進程就得靠pid來識別和管理某一個程,比如我想終止某一個進程,則用kill 進程的pid有時並不能殺掉,則需要加一個-9選項了kill -9 進程pid,這樣做有點暴力,嚴重的時候回丟失數據,所以盡量不用。
STAT :表示進程的狀態,進程狀態分為以下幾種(不要求記住,但要大致了解)

D:不能中斷的進程(通常為IO)
R:正在運行中的進程
S:已經中斷的進程,通常情況下,系統中大部分進程都是這個狀態
T:已經停止或者暫停的進程,如果我們正在運行一個命令,比如說 sleep 10 如果我們按一下ctrl -z 讓他暫停,那麽我們用ps查看就會顯示T這個狀態

W:這個好像是說,從內核2.6xx 以後,表示為沒有足夠的內存頁分配
X:已經死掉的進程(這個好像從來不會出現)
Z:僵屍進程,殺不掉,打不死的垃圾進程,占系統一小點資源,不過沒有關系。如果太多,就有問題了。一般不會出現。
<:高優先級進程
N:低優先級進程
L:在內存中被鎖了內存分頁
s:主進程
l:多線程進程
+:代表在前臺運行的進程
在日常工作中,ps命令經常配合管道符使用:
技術分享圖片

三、netstat命令

netstat命令用來打印Linux中網絡系統的狀態信息,可讓你得知整個Linux系統的網絡情況。
用法:

# netsta [參數]

參數:

-a或--all:顯示所有連線中的Socket;
-A<網絡類型>或--<網絡類型>:列出該網絡類型連線中的相關地址;
-c或--continuous:持續列出網絡狀態;
-C或--cache:顯示路由器配置的快取信息;
-e或--extend:顯示網絡其他相關信息;
-F或--fib:顯示FIB;
-g或--groups:顯示多重廣播功能群組組員名單;
-h或--help:在線幫助;
-i或--interfaces:顯示網絡界面信息表單;
-l或--listening:顯示監控中的服務器的Socket;
-M或--masquerade:顯示偽裝的網絡連線;
-n或--numeric:直接使用ip地址,而不通過域名服務器;
-N或--netlink或--symbolic:顯示網絡硬件外圍設備的符號連接名稱;
-o或--timers:顯示計時器;
-p或--programs:顯示正在使用Socket的程序識別碼和程序名稱;
-r或--route:顯示Routing Table;
-s或--statistice:顯示網絡工作信息統計表;
-t或--tcp:顯示TCP傳輸協議的連線狀況;
-u或--udp:顯示UDP傳輸協議的連線狀況;
-v或--verbose:顯示指令執行過程;
-V或--version:顯示版本信息;
-w或--raw:顯示RAW傳輸協議的連線狀況;
-x或--unix:此參數的效果和指定"-A unix"參數相同;
--ip或--inet:此參數的效果和指定"-A inet"參數相同。
參考: http://man.linuxde.net/netstat

實例:
技術分享圖片
netstat命令用來打印網絡連接狀況、系統所開放端口、路由表等信息。最常用的關於netstat的命令就是這個netstat -lnp (打印當前系統啟動哪些端口)以及netstat -an (打印網絡連接狀況)這兩個命令非常有用,請一定要記住。
技術分享圖片
上圖最右側為網絡連接狀態,了解下tcp三次握手,就很好理解了。
如果你所管理的服務器是一臺提供web服務(80端口)的服務器,那麽你就可以使用 netstat -an |grep 80 查看當前連接web服務的有哪些IP了。
補充:ss -annetstat -an作用類似。

# netstat -an | awk ‘/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}‘  //查看tcp各網絡連接狀態的數量

技術分享圖片

四、抓包工具

1、tcpdump抓包工具。

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

# tcpdump -nn -c 10 -i ens33            //抓取10次包指定ens33網卡,並顯示ip和端口,不顯示主機名和服務名稱

技術分享圖片
如果沒有tcpdump 這個命令,需要用yum install -y tcpdump命令去安裝一下。上例中第三列和第四列顯示的信息為哪一個IP+port在連接哪一個IP+port,後面的信息是該數據包的相關信息,-nn參數是為了直接顯示ip+端口號,需要關註的只是第三列以及第四列。-i 選項後面跟設備名稱,如果你想抓ens33網卡的包,後面則要跟eens33。-nn選項的作用是讓第三列和第四列顯示成IP+端口號的形式,如果不加-nn則顯示的是主機名+服務名稱。
-c選項,指定抓包數量。
參考:http://man.linuxde.net/tcpdump
一些常用的tcpdump實例:

# tcpdump -nn -i ens33 port 22           //只抓22端口的包
# tcpdump host 192.168.x.x   //抓取指定ip的包
# tcpdump -nn -i ens33 tcp and not port 22        //指定抓tcp的包,但是不要22端口的
# tcpdump -nn -i ens33 port 22 and port 53       //只抓22和53端口的包
# tcpdump -nn -i ens33 -c 10 -i ens33 -w /tmp/tset.cap    //保存10次抓包到/tmp/test.cap
# tcpdump -r /tmp/test.cap  //讀取抓包文件

技術分享圖片

2、wireshark工具

參考:http://www.360doc.com/content/15/0516/18/14900341_471040655.shtml
實例:

# 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" 

技術分享圖片
這類似與訪問web日誌,若服務器沒有配置訪問日誌,可以臨時使用該命令查看當前的web請求。
更多用法可參考:https://www.cnblogs.com/liun1994/p/6142505.html

Linux日常管理技巧(2):free,ps,netstat命令和抓包工具