Linux实用命令 lsof命令
1.命令简介
lsof(list open files)用于查看进程打开的文件,是十分方便的系统监测工具。因为 lsof 命令需要访问核心内存和各种系统文件,所以需要root
权限才可执行。
在 Linux 中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件,所以lsof
不仅可以查看进程打开的普通文件、目录,还可以查看进程监听的端口和socket
等相关的信息。进程打开的每一个文件,系统在后台都会为之分配一个文件描述符,无论这个文件的本质如何。该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口,因为应用程序打开的文件描述符列表提供了大量关于应用程序本身的信息,通过lsof
能够查看这个列表,对系统监测以及排错很有帮助。
lsof 查看的打开文件可以是:
普通文件
目录
字符或块设备文件
共享库
管道、命名管道
符号链接
网络文件(如 NFS file、网络 socket,Unix 域名 socket)
其它类型的文件,等等
2.命令格式
lsof [OPTIONS] [--] [NAMES]
在没有任何选项的情况下,lsof 列出所有属于活动进程的打开文件。
3.选项说明
-?, -h
显示帮助信息
-a
参数被视为逻辑与 AND,会影响全部的参数
-A A
在配置了 AFS 分布式网络文件系统的系统上可用,其 AFS 内核代码是通过动态模块实现的。通过 A 指定备用名称列表文件,在该文件中可以找到动态模块的内核地址
-b
避免 lsof 因调用可能阻塞的内核函数而产生阻塞,比如 lstat(2)、readlink(2) 和 stat(2) 等内核函数
-c C
显示出以字符或字符串 C 开头的命令程序开启的文件,如 lsof -c init。如果 C 以斜杠 / 开头和结尾,则斜杠之间的字符被解释为正则表达式。该选项可多次指定
+c W
指定 COMMAND 列的宽度,单位字符。默认为 9
-C
禁用从内核的名称缓存中报告任何路径名
-D D
指导 lsof 使用设备缓存文件。该选项的使用有时受到限制。-D 必须后面跟着一个函数字母,函数字母后面可以有一个路径名称。lsof 识别以下功能字母:
? 报告设备缓存文件路径
b 构建设备缓存文件
i 忽略设备缓存文件
r 读取设备缓存文件
u 读取并更新设备缓存文件
+D D
递归搜索目录 D。如显示在 /usr/local 及其子目录下被程序开启的文件:lsof +D /usr/local
+d D
非递归搜索目录 D。如显示在 /usr/local 下被程序开启的文件:lsof +d /usr/local
-d FD
指定文件描述符列表,可以采用逗号分隔,也可以指定范围。比如 1,2,3 或 1-3。如果前面包含尖号,表示排除。如显示 FD 为 4 的进程:lsof -d 4
+|-e S
豁免(exempt)路径名称为 S 的文件系统不受可能阻塞的内核函数调用的影响。+e 选项豁免 stat(2)、lstat(2) 和大多数 readlink(2) 内核函数调用。-e 选项只能豁免 stat(2) 和 lstat(2) 内核函数调用
+|-E
+E 指定使用端点信息显示 Linux 管道、Linux UNIX 套接字和 Linux 伪终端文件,并显示端点的文件。-E 则不显示端点的文件
-F LIST
指定字符列表 LIST,选择输出给另一程序处理的字段,各字段对应的字符见下文
+|-f [cfgGn]
f 本身澄清了路径名参数的解释方式。当后面跟着 c、f、g、G 或 n 时,它指定要启用(+)或抑制(-)内核文件结构信息。
c 文件结构使用计数(not Linux)
f 文件结构地址(not Linux)
g 文件标志缩写(Linux 2.6.22 及更高版本)
G 十六进制文件标志(Linux 2.6.22 及更高版本)
n 文件结构节点地址(not Linux)
-g [PGID