天天看點

lsof指令

lsof(list open files)指令是一個列出系統目前打開的檔案的工具。在linux環境中,所有的事物都是以檔案的形式存在的,是以通過檔案形式不僅可以通路正常的資料,而且可以通路網絡連接配接和硬體。當然要通路系統的核心記憶體和檔案的時候,是需要root權限的。

在使用lsof指令時羅列出系統打開的檔案,顯示的各列的資訊的意義:

名稱

意義

COMMAND

程序的名字

PID

程序标示符

USER

程序所有者

FD

檔案描述符

TYPE

檔案類型

DEVICE

指定磁盤的名稱

SIZE

檔案大小

NODE

索引節點,指檔案在磁盤上的辨別

NAME

打開檔案的确切名稱

 FD 列中的檔案描述符cwd 值表示應用程式的目前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改。txt 類型的檔案是程式代碼,如應用程式二進制檔案本身或共享庫,如上清單中顯示的 /sbin/init 程式。其次數值表示應用程式的檔案描述符,這是打開該檔案時傳回的一個整數。如上的最後一行檔案/dev/initctl,其檔案描述符為10。u 表示該檔案被打開并處于讀取/寫入模式,而不是隻讀 ® 或隻寫 (w) 模式。同時還有大寫 的W 表示該應用程式具有對整個檔案的寫鎖。該檔案描述符用于確定每次隻能打開一個應用程式執行個體。初始打開每個應用程式時,都具有三個檔案描述符,從 0 到 2,分别表示标準輸入、輸出和錯誤流。是以大多數應用程式所打開的檔案的 FD 都是從 3 開始。與 FD 列相比,Type 列則比較直覺。檔案和目錄分别稱為 REG 和 DIR。而CHR 和 BLK,分别表示字元和塊裝置;或者 UNIX、FIFO 和 IPv4,分别表示 UNIX 域套接字、先進先出 (FIFO) 隊列和網際協定 (IP) 套接字。

       lsof 常見的用法是查找應用程式打開的檔案的名稱和數目。可用于查找出某個特定應用程式将日志資料記錄到何處,或者正在跟蹤某個問題。例如,linux限制了程序能夠打開檔案的數目。通常這個數值很大,是以不會産生問題,并且在需要時,應用程式可以請求更大的值(直到某個上限)。如果你懷疑應用程式耗盡了檔案描述符,那麼可以使用 lsof 統計打開的檔案數目,以進行驗證。

 常用的參數清單: 

參數

filename

顯示打開指定檔案的所有程序

-a

标示兩個參數都滿足時才顯示結果

-c string

顯示COMMAND列中敖漢指定字元的程序所打開的檔案

-u username

顯示所屬user程序打開的檔案

-g gid

顯示歸屬gid的程序情況

+d /DIR/

顯示目錄下被程序打開的檔案

+D /DIR/

同上,但是會搜尋目錄下的所有目錄,時間相對較長

-d FD

顯示指定檔案描述符的程序

-n

不将IP轉換為hostname,預設是不加上-n參數

-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 --> 端口号 (可以不隻一個)

示例:

1、檢視80端口的使用情況:sudo lsof -i :80

2、檢視所屬root使用者程序所打開的檔案類型為txt的檔案:lsof -a -u root -d txt

3、恢複被誤删的檔案(挂在/proc目錄下):cat /proc/1283/fd/2 > /var/log/messages

常用的參數清單: 

繼續閱讀