這個 netstat 也是挺好玩的,其實這個命令比較常被用在網絡的監控方面,不過,在程序管理方面也是需要了解!
這個命令的運行如下所示:基本上, netstat 的輸出分爲兩大部分,分別是網絡與系統自己的程序相關性部分:
[root@instructor ~]# netstat -[atunlp]
選項與參數:
-a :將目前系統上所有的連線、監聽、Socket 數據都列出來
-t :列出 tcp 網絡封包的數據
-u :列出 udp 網絡封包的數據
-n :不以程序的服務名稱,以端口號 (port number) 來顯示;
-l :列出目前正在網絡監聽 (listen) 的服務;
-p :列出該網絡服務的程序 PID
範例一:列出目前系統已經創建的網絡連線與 unix socket 狀態
[root@instructor ~]# netstat
Active Internet connections (w/o servers) <==與網絡較相關的部分
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 132 192.168.201.110:ssh 192.168.:vrtl-vmf-sa ESTABLISHED
Active UNIX domain sockets (w/o servers) <==與本機的程序自己的相關性(非網絡)
Proto RefCnt Flags Type State I-Node Path
unix 20 [ ] DGRAM 9153 /dev/log
unix 3 [ ] STREAM CONNECTED 13317 /tmp/.X11-unix/X0
unix 3 [ ] STREAM CONNECTED 13233 /tmp/.X11-unix/X0
unix 3 [ ] STREAM CONNECTED 13208 /tmp/.font-unix/fs7100
....(中間省略)....
Proto :網絡的封包協議,主要分爲 TCP 與 UDP 封包。
Recv-Q:不是由使用者程序連結到此 socket 的複製的總 bytes 數;
Send-Q:不是由遠程主機傳送過來的 acknowledged 總 bytes 數;
Local Address :本地端的 IP:port 情況
Foreign Address:遠程主機的 IP:port 情況
State :連線狀態,主要有創建(ESTABLISED)及監聽(LISTEN);
我們看上面僅有一條連線的數據,他的意義是:透過 TCP 封包的連線,遠程的 192.168.:vrtl.. 連線到本地端的 192.168.201.110:ssh ,這條連線狀態是創建 (ESTABLISHED) 的狀態!
除了網絡上的連線之外,其實 Linux 系統上面的程序是可以接收不同程序所發送來的資訊,那就是 Linux 上頭的插槽文件 (socket file)。socket file 可以溝通兩個程序之間的資訊,因此程序可以取得對方傳送過來的數據。 由於有 socket file,因此類似 X Window 這種需要透過網絡連接的軟件,目前新版的 distributions 就以 socket 來進行窗口介面的連線溝通了。上表中 socket file 的輸出欄位有:
Proto :一般就是 unix ;
RefCnt:連接到此 socket 的程序數量;
Flags :連線的旗標;
Type :socket 存取的類型。主要有確認連線的 STREAM 與不需確認的 DGRAM 兩種;
State :若爲 CONNECTED 表示多個程序之間已經連線創建。
Path :連接到此 socket 的相關程序的路徑!或者是相關數據輸出的路徑。
以上的輸出爲例,最後那三行在 /tmp/.xx 底下的數據,就是 X Window 窗口介面的相關程序! 而 PATH 指向的就是這些程序要交換數據的插槽文件!
範例二:找出目前系統上已在監聽的網絡連線及其 PID
[root@instructor ~]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 4566/hpiod
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 4328/portmap
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 4597/cupsd
tcp 0 0 0.0.0.0:728 0.0.0.0:* LISTEN 4362/rpc.statd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 4629/sendmail:
tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 4571/python
tcp 0 0 :::22 :::* LISTEN 4586/sshd
# 除了可以列出監聽網絡的介面與狀態之外,最後一個欄還能夠顯示此服務的 PID 號碼以及程序的命令名稱喔!例如最後一行的 4586 就是該 PID