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