1. 程式人生 > 其它 >netstat和lsof檢視埠的區別

netstat和lsof檢視埠的區別

一、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:開啟檔案的確切名稱