一、Netstate
netstat 命令是一個監控TCP/IP網絡的非常有用的工具,它可以顯示路由表、實際的網絡連接以及每一個網絡接口設備的狀態信息
netstat用來查看系統當前系統網絡狀態信息,包括端口,連接情況等,常用方式如下:
netstat -atunlp,各參數含義如下:
• -t : 指明顯示TCP端口
• -u : 指明顯示UDP端口
• -l : 僅顯示監聽套接字(LISTEN狀態的套接字)
• -p : 顯示進程標識符和程序名稱,每一個套接字/端口都屬於一個程序
• -n : 不進行DNS解析
• -a 顯示所有連接的端口
二、LSOF
lsof 是 linux 下的一個非常實用的系統級的監控、診斷工具,它的意思是 List Open Files,很容易你就記住了它是 “ls + of”的組合它可以用來列出被各種進程打開的文件信息,記住:linux 下 “一切皆文件”
lsof filename 顯示打開指定文件的所有進程 2
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string 顯示COMMAND列中包含指定字符的進程所有打開的文件
lsof -u username 顯示所屬user進程打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /DIR/ 顯示目錄下被進程打開的文件
lsof +D /DIR/ 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d FD 顯示指定文件描述符的進程
lsof -n 不將IP轉換為hostname,缺省是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
三、常用命令
根據端口port查進程
netstat -nap | grep port lsof -i:port
根據進程pid查端口
netstat -nap | grep pid lsof -i | grep pid
四、區別
netstat在非root下不能識別所有的進程,而且不是自己擁有的進程信息不會展示,需要 root 賬號才能顯示所有信息lsof在非root下執行lsof -i 無任何輸出
兩者在root下均能顯示所有進程
netstat 可以顯示PID、進程名,不能顯示進程所屬的用戶
~$ sudo netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd
lsof 可以顯示進程名、PID、用戶
# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME sshd 1409 root 3u IPv6 5678 TCP *:ssh (LISTEN)
COMMAND:進程的名稱
PID:進程標識符
USER:進程所有者
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
TYPE:文件類型,如DIR、REG等
DEVICE:指定磁盤的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁盤上的標識)
NAME:打開文件的確切名稱
