lsoflist open files)是一個列出當前系統打開檔的工具。在linux環境下,任何事物都以檔的形式存在,通過檔不僅僅可以訪問常規資料,還可以訪問網路連接和硬體。所以如傳輸控制協定 (TCP) 和使用者資料包通訊協定 (UDP) 通訊端等,系統在後臺都為該應用程式分配了一個檔描述符,無論這個檔的本質如何,該檔描述符為應用程式與基礎作業系統之間的交互提供了通用介面。因為應用程式打開檔的描述符列表提供了大量關於這個應用程式本身的資訊,因此通過lsof工具能夠查看這個清單對系統監測以及排錯將是很有幫助的。

1命令格式:

lsof [參數][文件]

2命令功能:

用於查看你進程開打的檔,打開檔的進程,進程打開的埠(TCPUDP)。找回/恢復刪除的檔。是十分方便的系統監視工具,因為 lsof 需要訪問核心記憶體和各種檔,所以需要root使用者執行。

lsof打開的檔可以是:

1.普通檔

2.目錄

3.網路檔案系統的文件

4.字元或設備檔

5.(函數)共用庫

6.管道,具名管道

7.符號連結

8.網路檔(例如:NFS file、網路socketunix功能變數名稱socket

9.還有其它類型的文件,等等

3命令參數:

-a 列出打開檔存在的進程

-c<進程名列出指定進程所打開的檔

-g  列出GID號進程詳情

-d<檔號列出佔用該檔號的進程

+d<目錄>  列出目錄下被打開的檔

+D<目錄>  遞迴列出目錄下被打開的檔

-n<目錄>  列出使用NFS的檔

-i<條件>  列出符合條件的進程。(46、協議、:埠、 @ip 

-p<進程號列出指定進程號所打開的檔

-u  列出UID號進程詳情

-h 顯示説明資訊

-v 顯示版本資訊

4使用實例:

實例1:無任何參數

命令:

lsof

輸出:

      [root@localhost ~]# lsof

 

COMMAND     PID USER   FD      TYPE             DEVICE     SIZE       NODE NAME
init          1 root  cwd       DIR                8,2     4096          2 /
init          1 root  rtd       DIR                8,2     4096          2 /
init          1 root  txt       REG                8,2    43496    6121706 /sbin/init
init          1 root  mem       REG                8,2   143600    7823908 /lib64/ld-2.5.so
init          1 root  mem       REG                8,2  1722304    7823915 /lib64/libc-2.5.so
init          1 root  mem       REG                8,2    23360    7823919 /lib64/libdl-2.5.so
init          1 root  mem       REG                8,2    95464    7824116 /lib64/libselinux.so.1
init          1 root  mem       REG                8,2   247496    7823947 /lib64/libsepol.so.1
init          1 root   10u     FIFO               0,17                1233 /dev/initctl
migration     2 root  cwd       DIR                8,2     4096          2 /
migration     2 root  rtd       DIR                8,2     4096          2 /
migration     2 root  txt   unknown                                        /proc/2/exe
ksoftirqd     3 root  cwd       DIR                8,2     4096          2 /
ksoftirqd     3 root  rtd       DIR                8,2     4096          2 /
ksoftirqd     3 root  txt   unknown                                        /proc/3/exe
migration     4 root  cwd       DIR                8,2     4096          2 /
migration     4 root  rtd       DIR                8,2     4096          2 /
migration     4 root  txt   unknown                                        /proc/4/exe
ksoftirqd     5 root  cwd       DIR                8,2     4096          2 /
ksoftirqd     5 root  rtd       DIR                8,2     4096          2 /
ksoftirqd     5 root  txt   unknown                                        /proc/5/exe
events/0      6 root  cwd       DIR                8,2     4096          2 /
events/0      6 root  rtd       DIR                8,2     4096          2 /
events/0      6 root  txt   unknown                                        /proc/6/exe
events/1      7 root  cwd       DIR                8,2     4096          2 /

 

說明:

lsof輸出各列資訊的意義如下:

COMMAND:進程的名稱

PID:進程識別字

PPID:父進程識別字(需要指定-R參數)

USER:進程所有者

PGID:進程所屬組

FD:檔描述符,應用程式通過檔描述符識別該檔。如cwdtxt

1cwd:表示current work dirctory,即:應用程式的當前工作目錄,這是該應用程式啟動的目錄,除非它本身對這個目錄進行更改

2txt :該類型的檔是程式碼,如應用程式二進位檔案本身或共用庫,如上清單中顯示的 /sbin/init 程式

3lnnlibrary references (AIX);

4erFD information error (see NAME column);

5jldjail directory (FreeBSD);

6ltxshared library text (code and data);

7mxx hex memory-mapped type number xx.

8m86DOS Merge mapped file;

9memmemory-mapped file;

10mmapmemory-mapped device;

11pdparent directory;

12rtdroot directory;

13trkernel trace file (OpenBSD);

14v86  VP/ix mapped file;

150:表示標準輸出

161:表示標準輸入

172:表示標準錯誤

一般在標準輸出、標準錯誤、標準輸入後還跟著檔狀態模式:rwu

1u:表示該檔被打開並處於讀取/寫入模式

2r:表示該檔被打開並處於唯讀模式

3w:表示該檔被打開並處於

4)空格:表示該檔的狀態模式為unknow,且沒有鎖定

5-:表示該檔的狀態模式為unknow,且被鎖定

同時在檔狀態模式後面,還跟著相關的鎖

1Nfor a Solaris NFS lock of unknown type;

2rfor read lock on part of the file;

3Rfor a read lock on the entire file;

4wfor a write lock on part of the file;(檔的部分寫鎖)

5Wfor a write lock on the entire file;(整個文件的寫鎖)

6ufor a read and write lock of any length;

7Ufor a lock of unknown type;

8xfor an SCO OpenServer Xenix lock on part      of the file;

9Xfor an SCO OpenServer Xenix lock on the      entire file;

10spaceif there is no lock.

TYPE:檔案類型,如DIRREG等,常見的檔案類型

1DIR:表示目錄

2CHR:表示字元類型

3BLK:塊設備類型

4UNIX UNIX 域通訊端

5FIFO:先進先出 (FIFO) 佇列

6IPv4:網際協議 (IP) 通訊端

DEVICE:指定磁片的名稱

SIZE:文件的大小

NODE:索引節點(檔在磁片上的標識)

NAME:打開檔的確切名稱

實例2查看誰正在使用某個檔,也就是說查找某個檔相關的進程

命令:

lsof /bin/bash

輸出:

 

[root@localhost ~]# lsof /bin/bash
COMMAND   PID USER  FD   TYPE DEVICE   SIZE    NODE NAME
bash    24159 root txt    REG    8,2 801528 5368780 /bin/bash
bash    24909 root txt    REG    8,2 801528 5368780 /bin/bash
bash    24941 root txt    REG    8,2 801528 5368780 /bin/bash
[root@localhost ~]

 

 

說明:

實例3遞迴查看某個目錄的檔資訊

命令:

lsof test/test3

輸出:

 

[root@localhost ~]# cd /opt/soft/
[root@localhost soft]# lsof test/test3
COMMAND   PID USER   FD   TYPE DEVICE SIZE    NODE NAME
bash    24941 root  cwd    DIR    8,2 4096 2258872 test/test3
vi      24976 root  cwd    DIR    8,2 4096 2258872 test/test3
[root@localhost soft]

 

 

說明:

使用了+D,對應目錄下的所有子目錄和檔都會被列出

實例4:不使用+D選項,遍歷查看某個目錄的所有檔資訊的方法

命令:

 lsof |grep 'test/test3'

輸出:

[root@localhost soft]# lsof |grep 'test/test3'

bash      24941 root  cwd       DIR                8,2     4096    2258872 /opt/soft/test/test3
vi        24976 root  cwd       DIR                8,2     4096    2258872 /opt/soft/test/test3
vi        24976 root    4u      REG                8,2    12288    2258882 /opt/soft/test/test3/.log2013.log.swp
[root@localhost soft]

說明:

實例5:列出某個使用者打開的檔資訊

命令

lsof -u username

說明

-u 選項,u其實是user的縮寫

實例6:列出某個程式進程所打開的檔資訊

命令:

lsof -c mysql

說明:

 -c 選項將會列出所有以mysql這個進程開頭的程式的檔,其實你也可以寫成 lsof | grep mysql, 但是第一種方法明顯比第二種方法要少打幾個字元了

實例7:列出多個進程多個打開的檔資訊

命令:

lsof -c mysql -c apache

實例8:列出某個使用者以及某個進程所打開的檔資訊

命令:

lsof  -u test -c mysql 

說明:

使用者與進程可相關,也可以不相關

實例9:列出除了某個用戶外的被打開的檔資訊

命令:

lsof -u ^root

說明:

^這個符號在用戶名之前,將會把是root使用者打開的進程不讓顯示

實例10:通過某個進程號顯示該進行打開的檔

命令:

lsof -p 1

實例11:列出多個進程號對應的檔資訊

命令:

lsof -p 1,2,3

實例12:列出除了某個進程號,其他進程號所打開的檔資訊

命令:

lsof -p ^1

實例13:列出所有的網路連接

命令:

lsof -i

實例14:列出所有tcp 網路連接資訊

命令:

lsof -i tcp

實例15:列出所有udp網路連接資訊

命令:

lsof -i udp

實例16:列出誰在使用某個埠

命令:

lsof -i :3306

實例17:列出誰在使用某個特定的udp

命令:

lsof -i udp:55

或者:特定的tcp

命令:

lsof -i tcp:80

實例18:列出某個使用者的所有活躍的網路埠

命令:

lsof -a -u test -i

實例19:列出所有網路檔案系統

命令:

lsof -N

實例20:功能變數名稱socket文件

命令:

lsof -u

實例21:某個使用者組所打開的檔資訊

命令:

lsof -g 5555

實例22:根據檔描述列出對應的檔資訊

命令:

lsof -d description(like 2)

例如:lsof  -d  txt

例如:lsof  -d  1

例如:lsof  -d  2

說明:

0表示標準輸入,1表示標準輸出,2表示標準錯誤,從而可知:所以大多數應用程式所打開的檔的 FD 都是從 3 開始

實例23:根據檔描述範圍列出檔資訊

命令:

lsof -d 2-3

實例24:列出COMMAND列中包含字串" sshd",且檔描符的類型為txt的檔資訊

命令:

lsof -c sshd -a -d txt

輸出:

 

[root@localhost soft]# lsof -c sshd -a -d txt
COMMAND   PID USER  FD   TYPE DEVICE   SIZE    NODE NAME
sshd     2756 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
sshd    24155 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
sshd    24905 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
sshd    24937 root txt    REG    8,2 409488 1027867 /usr/sbin/sshd
[root@localhost soft]

[root@localhost soft]

 

 

實例25:列出被進程號為1234的進程所打開的所有IPV4 network files 

命令

lsof -i 4 -a -p 1234

實例26:列出目前連接主機peida.linux上埠為:202122255380相關的所有檔資訊,且每隔3秒不斷的執行lsof指令

命令:

lsof -i @peida.linux:20,21,22,25,53,80  -r  3

 轉自http://www.cnblogs.com/peida/archive/2013/02/26/2932972.html

arrow
arrow
    文章標籤
    linux command lsof
    全站熱搜

    痞客興 發表在 痞客邦 留言(0) 人氣()