[SHELL]查看端口,文件,服務關系的四個命令netstat,lsof,fuser,nmap


一,netstat

(1)簡介

netstat主要是用來打印系統網絡的狀態信息,當輸入netstat后,輸出如下:

 

可以看出,netstat的輸出分為兩個部分組成:

一個是Active Internet Connections,稱為有源TCP連接,其中"Recv-Q"和"Send-Q"指%0A的是接收隊列和發送隊列。這些數字一般都應該是0。如果不是則表示軟件包正在隊列中堆積。這種情況只能在非常少的情況見到。

另一個是Active UNIX domain sockets,稱為有源Unix域套接口(和網絡套接字一樣,但是只能用於本機通信,性能可以提高一倍)。
Proto顯示連接使用的協議,RefCnt表示連接到本套接口上的進程號,Types顯示套接口的類型,State顯示套接口當前的狀態,Path表示連接到套接口的其它進程使用的路徑名

(2)常用參數

-a (all)顯示所有選項,默認不顯示LISTEN相關
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 拒絕顯示別名,能顯示數字的全部轉化成數字。
-l 僅列出有在 Listen (監聽) 的服務狀態
-p 顯示建立相關鏈接的程序名
-r 顯示路由信息,路由表
-e 顯示擴展信息,例如uid等
-s 按各個協議進行統計
-c 每隔一個固定時間,執行該netstat命令。

LISTEN和LISTENING的狀態只有用-a或者-l才能看到

(3)常見應用

列出所有端口

netstat  -a  #列出所有端口
netstat -at  #列出所有tcp端口
netstat -au  #列出所有udp端口
netstat -ax  #列出所有UNIX端口

netstat -al  #列出所有監聽中的端口
netstat -lt  #列出所有監聽中的tcp有端口
netstat -lu  #列出所有監聽中的udp端口
netstat -lx  #列出所有監聽中的unix端口

 

查看所有協議的統計信息

netstat -s
netstat -st  #查看tcp統計
netstat -su  #查看udp統計

 

找出程序運行所占用的端口

netstat -ap | grep  ":ssh"

 

找出運行在指定端口的進程

查看占用本機某個端口最多的IP地址:

二,lsof(list open file)

(1)簡介

主要查看進程占用了哪些文件

每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:  
COMMAND:進程的名稱 
PID:進程標識符 
USER:進程所有者 
FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等 
TYPE:文件類型,如DIR、REG等 
DEVICE:指定磁盤的名稱 
SIZE:文件的大小 
NODE:索引節點(文件在磁盤上的標識) 
NAME:打開文件的確切名稱 
其中FD 列中的文件描述符cwd 值表示應用程序的當前工作目錄,這是該應用程序啟動的目錄,除非它本身對這個目錄進行更改。txt 類型的文件是程序代碼,如應用程序二進制文件本身或共享庫,如上列表中顯示的 /sbin/init 程序。其次數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。如上的最后一行文件/dev/initctl,其文件描述符為 10。u 表示該文件被打開並處於讀取/寫入模式,而不是只讀(R) 或只寫 (w) 模式。同時還有大寫 的W 表示該應用程序具有對整個文件的寫鎖。該文件描述符用於確保每次只能打開一個應用程序實例。初始打開每個應用程序時,都具有三個文件描述符,0、1、2, 分別表示標准輸入、輸出和錯誤流。所以大多數應用程序所打開的文件的 FD 都是從 3 開始。  
與 FD 列相比,Type 列則比較直觀。文件和目錄分別稱為 REG 和 DIR(在 Solaris 中,稱為 VREG 和 VDIR)。而CHR 和 BLK,分別表示字符和塊設備; 或者 UNIX、FIFO 和 IPv4,分別表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協議 (IP) 套接字。 

(2)常用參數

lsof  filename 顯示打開指定文件的所有進程 
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 用以顯示符合條件的進程情況 
lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 
            46 --> IPv4 or IPv6 
            protocol --> TCP or UDP 
            hostname --> Internet host name 
            hostaddr --> IPv4地址 
            service --> /etc/service中的 service name (可以不只一個) 
            port --> 端口號 (可以不只一個) 

lsof +L/-L 打開或關閉文件的連結數計算,當+L沒有指定時,所有的連結數都會顯示(默認);若+L后指定數字,則只要連結數小於該數字的信息會顯示;連結數會顯示在NLINK列。
例如:+L1將顯示沒有unlinked的文件信息;+aL1,則顯示指定文件系統所有unlinked的文件信息。-L 默認參數,其后不能跟數字,將不顯示連結數信息lsof +L1

(3)常見應用

查看某個端口是否被占用(特別需要注意 ,-i 后面是 有個“:”)

  

查看root用戶打開的文件類型為txt的文件

 

三 ,fuser

(1)簡介

主要是查看某個文件被哪個進程占用

(2)常用參數

-a 顯示所有命令行中指定的文件,默認情況下被訪問的文件才會被顯示。  
-c 和-m一樣,用於POSIX兼容。  
-k 殺掉訪問文件的進程。如果沒有指定-signal就會發送SIGKILL信號。  
-i 殺掉進程之前詢問用戶,如果沒有-k這個選項會被忽略。  
-l 列出所有已知的信號名稱。  
-m name 指定一個掛載文件系統上的文件或者被掛載的塊設備(名稱name)。這樣所有訪問這個文件或者文件系統的進程都會被列出來。如果指定的是一個目錄會自動轉換成"name/",並使用所有掛載在那個目錄下面的文件系統。  
-n space 指定一個不同的命名空間(space).這里支持不同的空間文件(文件名,此處默認)、tcp(本地tcp端口)、udp(本地udp端口)。對於端口, 可以指定端口號或者名稱,如果不會引起歧義那么可以使用簡單表示的形式,例如:name/space (即形如:80/tcp之類的表示)。  
-s 靜默模式,這時候-u,-v會被忽略。-a不能和-s一起使用。  
-signal 使用指定的信號,而不是用SIGKILL來殺掉進程。可以通過名稱或者號碼來表示信號(例如-HUP,-1),這個選項要和-k一起使用,否則會被忽略。  
-u 在每個PID后面添加進程擁有者的用戶名稱。  
-v 詳細模式。輸出似ps命令的輸出,包含PID,USER,COMMAND等許多域,如果是內核訪問的那么PID為kernel.  -V 輸出版本號。  
-4 使用IPV4套接字,不能和-6一起應用,只在-n的tcp和udp的命名存在時不被忽略。  
-6 使用IPV6套接字,不能和-4一起應用,只在-n的tcp和udp的命名存在時不被忽略。  
- 重置所有的選項,把信號設置為SIGKILL.  

(3)常見應用

查看占用某個文件的進程信息

 

殺掉打開readme文件的程序

$fuser -m -k -i readme  
這里,會在kill之前詢問是否確定。最好加上-v以便知道將要殺那個進程。 

 
查看那些程序使用tcp的80端口 
$fuser -v -n tcp 80  

$fuser -v 80/tcp  

四,nmap

 

轉載自:關於netstat:https://www.cnblogs.com/wangkangluo1/p/3649688.html 

關於lsof: http://czmmiao.iteye.com/blog/1734384

關於fuser: http://czmmiao.iteye.com/blog/1733722


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM