lsof的簡單用法

lsof能夠列出某個進程打開的全部文件信息。打開的文件多是普通的文件,目錄,NFS文件,塊文件,字符文件,共享庫,常規管道,明明管道,符號鏈 接,Socket流,網絡Socket,UNIX域Socket,以及其它更多。由於Unix系統中幾乎全部東西都是文件,你能夠想象lsof該有多有用。vim

lsof的輸出:
FD 和 Type 列的含義最爲模糊,它們提供了關於文件如何使用的更多信息。bash

FD 列表示文件描述符,應用程序經過文件描述符識別該文件。Type 列提供了關於文件格式的更多描述。
咱們來具體研究一下文件描述符列,上面出現了三種不一樣的值。cwd 值表示應用程序的當前工做目錄,這是該應用程序啓動的目錄,除非它自己對這個目錄進行更改。txt 類型的文件是程序代碼,如應用程序二進制文件自己或共享庫,再好比本示例的列表中顯示的 init 程序。最後,數值表示應用程序的文件描述符,這是打開該文件時返回的一個整數。在最後一行中,您能夠看到用戶正在使用 vim 編輯 /root/1.txt,其文件描述符爲 3。u 表示該文件被打開並處於讀取/寫入模式,而不是隻讀 (r) 或只寫 (w) 模式。有一點不是很重要但卻頗有幫助,初始打開每一個應用程序時,都具備三個文件描述符,從 0 到 2,分別表示標準輸入、輸出和錯誤流。正由於如此,大多數應用程序所打開的文件的 FD 都是從 3 開始。網絡

與 FD 列相比,Type 列則比較直觀。根據具體操做系統的不一樣,您會發現將文件和目錄稱爲 REG 和 DIR(在 Solaris 中,稱爲 VREG 和 VDIR)。其餘可能的取值爲 CHR 和 BLK,分別表示字符和塊設備;或者 UNIX、FIFO 和 IPv4,分別表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協議 (IP) 套接字。tcp

用法:操作系統

列出有所打開的文件:遞歸

#losf

找出誰在使用文件隊列

#lsof /root/.bashrc

遞歸查找某個目錄中全部打開的文件進程

# lsof +D /usr/lib

加上+D參數,lsof會對指定目錄進行遞歸查找,注意這個參數要比grep版本慢資源

# lsof | grep '/usr/lib'

之因此慢是由於+D首先查找全部的文件,而後一次性輸出it

列出某個用戶代開的文件

#lsof -u root

列出除root用戶外的全部用戶打開的文件

# lsof -u ^root

列出某個程序打開的全部文件

#lsof -c httpd

能夠只寫進程的頭幾個字母

#lsof -c ht

這就會列出以ht開頭的進程打開的文件

列出某個pid對應的進程所打開的文件

#lsof -p 489

列出全部網絡鏈接

#lsof -i

lsof的-i選項能夠列出全部打開了網絡套接字(TCP和UDP)的進程

列出全部tcp網絡鏈接

#lsof -i tcp

找出某個端口的進程

#lsof -i :25

找出某個tcp端口的進程

#lsof -i tcp:80

找到某個用戶的全部網絡鏈接

# lsof -a -u hacker -i

-a參數能夠將多個選項的組合條件由或變爲與,使用-a將-u和-i選項組合可讓lsof列出某個用戶的全部網絡行爲

輸出使用某些資源的進程pid

# lsof -t -i

-t選項輸出進程的PID,你能夠將它和-i選項組合輸出使用某個端口的進程的PID,下面的命令將會殺掉全部使用網絡的進程:

# kill -9 `lsof -t -i`

循環列出文件

# lsof -r 1

-r選項讓lsof能夠循環列出文件直到被中斷,參數1的意思是每秒鐘重複打印一次,這個選項最好同某個範圍比較小的查詢組合使用,好比用來監測網絡活動:

# lsof -r 1 -u john -i -a
相關文章
相關標籤/搜索