lsof 工具介绍<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

   lsof ,它 对应于 “list open files” (列出打开的文件)。

挺不错的一个工具, 通过查看打开的文件,了解更多关于系统的信息。了解应用程序打开了哪些文件或者哪个应用程序打开了特定的文件,作为系统管理员,这将使得您能够作出更好的决策。

lsof lsof 的全称是 list open files ),此工具可以用来查看正在运行中的进程打开了哪些文件、目录和套接字;是系统监测工具之一。在服务器管理中,我们还是常用到这个工具的。

 

lsof 的示例输出

[root@localhost /]# lsof | more

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    27036    160856 /sbin/init

init         1    root  mem    REG        8,2   103044    160173 /lib/ld-2.3.2.so

init         1    root  mem    REG        8,2  1531064    176174 /lib/tls/libc-2.3.2.so

init         1    root   10u  FIFO        8,2              71826 /dev/initctl

。。。。。。

每行显示一个打开的文件,除非另外指定,否则将显示所有进程打开的所有文件。

COMMAND  表示进程的名称

PID  进程标识符 (PID)

USER  所有者名称

Device SIZE/OFF Node Name 列涉及到文件本身的信息

FD Type 列的含义最为模糊,它们提供了关于文件如何使用的更多信息。   

FD  FD 列表示文件描述符,应用程序通过文件描述符识别该文件   FD 三种不同的值。 cwd 值表示应用程序的当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改。 txt 类型的文件是程序代码,如应用程序二进制文件本身或共享库,再比如本示例的列表中显示的 init 程序。最后,数值表示应用程序的文件描述符,这是打开该文件时返回的一个整数。

TYPE  Type 列提供了关于文件格式的更多描述   Type 列则比较直观。根据具体操作系统的不同,您会发现将文件和目录称为 REG DIR (在 Solaris 中,称为 VREG VDIR )。其他可能的取值为 CHR BLK ,分别表示字符和块设备;或者 UNIX FIFO IPv4 ,分别表示 UNIX 域套接字、先进先出 (FIFO) 队列和网际协议 (IP) 套接字。

DEVICE   表示指定磁盘的名称

SIZE   文件的大小

NODE   索引节点(文件在磁盘上的标识)

NAME   该文件的确切名称

 

/proc 目录

/proc 是一个目录,其中包含了反映内核和进程树的各种文件。这些文件和目录并不存在于磁盘中,因此当您对这些文件进行读取和写入时,实际上是在从操作系统本身获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,所以 /proc/1234 中包含的是 PID 1234 的进程的信息。

/proc 目录的每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。 lsof 实用程序使用该信息和其他关于内核内部状态的信息来产生其输出。

 

 

Lsof用法列表:

1) lsof abc.txt 显示开启文件 abc.txt 的进程

2) lsof -i :22 知道 22 端口现在运行什么程序

3) lsof -c nsd 显示 nsd 进程现在打开的文件

4) lsof -g gid 显示归属 gid 的进程情况

5) lsof +d /usr/local/ 显示 /usr/local 目录下被进程开启的文件

6) lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长

7) lsof -d 4 显示使用 fd 4 的进程

8) lsof -i [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 --> 端口号 ( 可以不只一个 )

例子 : TCP:25 - TCP and port 25

@1.2.3.4 - Internet IPv4 host address 1.2.3.4

[email]tcp@ohaha.ks.edu.tw[/email]:ftp - TCP protocol host:ohaha.ks.edu.tw service name:ftp

9) lsof -n 不将 IP 转换为 hostname ,缺省是不加上 -n 参数

例子 : lsof -i [email]tcp@ohaha.ks.edu.tw[/email]:ftp -n

10) lsof -p 12 看进程号为 12 的进程打开了哪些文件

11) lsof +|-r [t] 控制 lsof 不断重复执行,缺省是 15s 刷新

-r lsof 会永远不断的执行,直到收到中断信号

+r lsof 会一直执行,直到没有档案被显示

例子:不断查看目前 ftp 连接的情况: lsof -i [email]tcp@ohaha.ks.edu.tw[/email]:ftp -r

12) lsof -s 列出打开文件的大小,如果没有大小,则留下空白

13) lsof -u username UID ,列出打开的文件

-a  它表示当所有的参数都为真时,才显示这个文件

-p  它限制仅输出 PID 为多少的进程

 

 

常用的用法解释:

查看某个文件被哪些进程在读写

lsof 文件名

 

查看某个进程打开了哪些文件

lsof c 进程名

lsof p 进程号

 

Lsof 文件系统名称
查找打开,但是不能连接的文件
一个进程打开一个文件, 然后将其设为 unlinked 状态, 则此文件资源仍能被进程使用, 但是其访问路径已经被删除了. 因此, 使用ls不能将其列出. 只有当进程结束时, 才能释放文件占用的资源;查找unlinked 文件, 选项 +L,

 

列出打开文件的连接数
lsof +L
指定连接数的上限
$lsof +L1
同时指定文件系统, 则需要使用 -a(AND) 选项
lsof -a +L1 /home

 

查看谁令mount的分区无法卸载
lsof <file_system_name>

 

查看网络服务
lsof –i

 

查看某个网络连接
lsof [email]-i@aaa.bbb.ccc[/email]
lsof [email]-iTCP@aaa.bbb.ccc[/email]:ftp-data *指定协议*
lsof -i4 *指定IP版本*
lsof -i6

 

查找针对某个命令打开的文件
使用命令的PID
lsof -p <PID>

 

使用命令名称
lsof -c <first_characters_of_command_name_that_interest_you>
lsof -c sendmail

 

查看谁在使用设备文件
lsof /dev/hda6

 

查看某个用户的操作
lsof -u UID
lsof -u 用户名
lsof -u ^用户名  ^取反的意思