linux下lsof程序簡介

1、簡介

      lsof(list open files)是一個列出當前系統打開文件的工具。在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。


2、詳細解釋

     在終端下輸入lsof即可顯示系統打開的文件,因爲 lsof 需要訪問核心內存和各種文件,所以必須以 root 用戶的身份運行它才能夠充分地發揮其功能。
2.1 顯示示例
     COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
     init 1 root cwd DIR 3,3 1024 2 /
     init 1 root rtd DIR 3,3 1024 2 /
     init 1 root txt REG 3,3 38432 1763452 /sbin/init
     init 1 root mem REG 3,3 106114 1091620 /lib/libdl-2.6.so
     init 1 root mem REG 3,3 7560696 1091614 /lib/libc-2.6.so
     init 1 root mem REG 3,3 79460 1091669 /lib/libselinux.so.1
     init 1 root mem REG 3,3 223280 1091668 /lib/libsepol.so.1
     init 1 root mem REG 3,3 564136 1091607 /lib/ld-2.6.so
     init 1 root 10u FIFO 0,15 1309 /dev/initctl
2.2 各列解釋
     每行顯示一個打開的文件,若不指定條件默認將顯示所有進程打開的所有文件。lsof輸出各列信息的意義如下:
     COMMAND:進程的名稱
     PID:進程標識符
     USER:進程所有者
     FD:文件描述符,應用程序通過文件描述符識別該文件。如cwd、txt等
     TYPE:文件類型,如DIR、REG等
     DEVICE:指定磁盤的名稱
     SIZE:文件的大小
     NODE:索引節點(文件在磁盤上的標識)
     NAME:打開文件的確切名稱
2.3 補充
     其中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) 套接字。


3、語法

     lsof [-?ahlnNPRsv][-c c][+|-d d][+|-D D][-g [s]] [+|-L [I]][-p s][+|-r [t]][-u s][names] 
    參數說明:若沒有加上任何參數,lsof會列出所有被程序開啓的文件。 
    -? -h 這兩個參數意思相同,顯示出lsof的使用說明 -a 參數被視爲AND,會影響全部的參數 
    -C c 顯示出以字符或字符串c開頭的命令程序開啓的文件,如$lsof -C init 
    +d s 在文件夾s下搜尋,此參數不會繼續深入搜尋此文件夾。如顯示在/usr/local下被程序開啓的文件:$lsof +d /usr/local +D D 同上,但是會以該文件爲基礎往下全部搜尋,這樣花費較大的CPU時間,請謹慎使用 
    -d s 此參數以file descriptor(FD)值顯示結果,可以採用範圍(1-3)或個別,如顯示FD爲4的進程:$lsof -d 4 
    -g [s] 以程序的PGID顯示,也可以採用範圍或個別表示,若沒有特別指定,則顯示全部,如顯示PGID爲6的進程:$lsof -g 6 
    -i 用以監聽有關的任何符合的地址,若沒有相關地址被指定,則監聽全部 
            語法: lsof -i [46][protocol][@hostname|hostaddr][:serivce|port] 
            說明: 46  IPv4 or IPv6 
                        protocol TCP or UDP 
                        hostname internet host name 
                        hostaddr IPv4地址 
                        service /etc/service中的service name 
                        port 端口號 
    -l 此參數禁止將user ID 轉換爲登錄的名稱,默認是登錄名稱 
    +|-L [l] +或-表示開啓或關閉顯示文件連接數,如果只有單純的+L,後面沒有任何數字,則表示顯示全部,如果後面有數字,只有文件連接數少於該數字的會被列出 
    -n 不將IP地址轉換爲hostname,預設是轉換的 
    -N 顯示NFS的文件 
    -p s 以PID作爲顯示的依據 
    -P 此參數禁止將port number轉換爲service name,預設爲轉換 
    +|-r [t] 控制lsof不斷重複執行,t爲15秒,也就是說每隔15秒再重複執行 +r 一直執行,直到沒有文件被顯示 -r 永遠    不斷的執行,直到收到中斷訊號(ctrl+ c) 
    -R 此參數增列出PID的子程序,也就是PPID 
    u s 列出login name或UID爲的程序 
    -v 顯示lsof的版本信息 


參考文獻:百度百科和http://linux.chinaunix.net/techdoc/system/2007/12/20/974736.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章