LSOF(8)系统管理员手册LSOF(8)
目录
SYNOPSIS 概要 3
DESCRIPTION 描述 3
OPTIONS 选项 4
-a 5
-A A 5
-b 5
-c c 6
+c w 6
-C 6
+d s 6
-d s 7
+D D 7
-D D 7
+|-e s 8
+|-E 9
+|-f [cfgGn] 9
-F f 10
-g [s] 11
-i [i] 11
-K k 12
-k k 13
-l 13
+|-L [l] 13
+|-m m 13
+|-M 14
-n 15
-N 15
-o 15
-o o 15
-O 15
-p s 16
-P 16
+|-r [t[m
-R 17
-s [p:s] 17
-S [t] 18
-T [t] 18
-t 19
-u s 20
-U 20
-v 20
-V 20
+|-w 20
-x [fl] 21
-X 21
Linux: 22
Solaris 10及更高版本: 22
-Z [Z] 23
-- 23
names 23
SECURITY 安全 25
OUTPUT 输出 26
PID 进程号 27
TID 线程号 27
TASKCMD 任务名称 27
ZONE 区域 27
SECURITY-CONTEXT 安全上下文 27
PPID 父进程号 27
PGID 进程组 27
USER 用户 28
FD 文件描述符 28
TYPE 文件类型 29
FILE-ADDR 文件地址 31
FCT 文件引用计数 31
FILE-FLAG 文件标志 31
NODE-ID 节点ID 34
DEVICE 设备 34
SIZE, SIZE/OFF, or OFFSET 大小/偏移量 34
NLINK 文件链接计数 35
NODE 文件节点号 35
NAME 名称 35
OUTPUT FOR OTHER PROGRAMS 其他计划的输出 37
BLOCKS AND TIMEOUTS 块和超时 40
AVOIDING KERNEL BLOCKS 避免内核块 40
ALTERNATE DEVICE NUMBERS 备用设备编号 41
KERNEL NAME CACHE 41
DEVICE CACHE FILE 设备缓存文件 43
LSOF允许影响设备缓存文件访问 44
来自 -D选项的设备缓存文件路径 45
来自环境变量的设备缓存路径 45
系统广泛的设备缓存路径 46
个人设备缓存路径 (默认) 46
修改过的个人设备缓存路径 47
DIAGNOSTICS 诊断 47
EXAMPLES 例子 48
BUGS 50
ENVIRONMENT 环境 51
FAQ 常问问题 51
FILES 51
AUTHORS 作者 51
DISTRIBUTION 52
SEE ALSO 52
NAME 名称
lsof - 列出打开的文件
SYNOPSIS 概要
lsof [ - ?abChlnNOPRtUvVX] [-AA] [-cc] [+cc] [+|-dd] [+|-DD] [+|-es] [+|-E] [+|-f [cfgGn] ] [-F [f]] [-g [s]] [-i [i]] [-kk] [-K k] [+|-L [l]] [+|-mm] [+| - M] [-o [o]] [-ps] [+|-r [t [m
DESCRIPTION 描述
Lsof修订版4.91在其标准输出文件中列出了有关由以下UNIX方言的进程打开的文件的信息:
•Apple Darwin 9和Mac OS X 10. [567]
·基于AMD64的系统的FreeBSD 8 [234],9.0和1 [012] .0
•适用于基于x86的系统的Linux 2.1.72及更高版本
•Solaris 9,10和11
(有关如何获取最新的lsof修订版的信息,请参阅本手册页的"分发"部分。)
打开的文件可以是常规文件,目录,块特殊文件,字符特殊文件,执行文本引用,库,流或网络文件(Internet套接字,NFS文件或UNIX域套接字)。可以通过路径选择文件或文件系统中的所有文件。
lsof将生成可由其他程序解析的输出,而不是格式化的显示。有关详细信息,请参阅-F,选项说明和其他程序的输出部分。
除了生成单个输出列表外,lsof还将以重复模式运行。在重复模式下,它将产生输出,延迟,然后重复输出操作,直到中断或退出信号停止。有关详细信息,请参阅+|-r [t [m
OPTIONS 选项
在没有任何选项的情况下,lsof列出属于所有活动进程的所有打开文件。
如果指定了任何列表请求选项,则必须特别请求其他列表请求- 例如,如果为UNIX套接字文件列表指定了-U,则除非也指定了-N,否则不会列出NFS文件;或者,如果使用-u选项指定了用户列表,则不会列出属于不在列表中的用户的UNIX域套接字文件,除非还指定了-U选项。
通常,列出具体声明的选项是ORed - 即,指定不带地址的-i选项,-ufoo选项生成属于用户"foo"所拥有的进程的所有网络文件或文件的列表。例外情况是:
1)使用-u选项指定的'^'(否定)登录名或用户ID(UID);
2)使用-p选项指定的'^'(否定)进程ID(PID);
3)使用-g选项指定的'^'(否定)进程组ID(PGID);
4)使用-c选项指定的'^'(否定)命令;
5)('^')否定TCP或UDP协议状态名称,使用-s [p:s]选项指定。
由于它们代表排除,因此它们在没有ORing或ANDing的情况下应用,并在应用任何其他选择标准之前生效。
-a选项可用于AND选择。例如,指定-a,-U和-ufoo会生成仅包含属于用户"foo"拥有的进程的UNIX套接字文件的列表。
注意:-a选项会导致所有列表选择选项进行AND运算;它不能用于通过将选定选项对置于它们之间来对其进行AND运算,即使它的位置是可接受的。无论放置-a,它都会导致所有选择选项的AND运算。
相同选择集的项目- 命令名称,文件描述符,网络地址,进程标识符,用户标识符,区域名称,安全上下文- 在单个ORed集合中连接,并在结果参与ANDing之前应用。
因此,例如,指定[email protected],-i @ ccc.ddd,-a和-ufff,ggg将选择属于登录''fff''或''ggg''的文件列表。并与主机aaa.bbb或ccc.ddd建立网络连接。
可以在单个前缀之后将选项组合在一起 - 例如,选项集''-a -b -C''可以表示为-abC。 但是,由于值在+ | -f,-F,-g,-i,+ | -L,-o,+ | -r,-s,-S,-T,-x和-z之后是可选的。 如果你没有任何价值,请注意以下字符不含糊。 例如,-Fn可能表示-F和-n选项,或者它可能表示-F选项后面的n字段标识符字符。 当可能出现歧义时,请使用“ - ”字符开始一个新选项 - 例如''-F -n''。 如果下一个选项是文件名,请使用'' - ''跟随可能不明确的选项 - 例如,'' - F - name''。
'+'或' - '前缀可以应用于一组选项。 不对每个前缀采用单独含义的选项(例如,-i)可以在任一前缀下分组。 因此,例如,''+ M -i''可以表示为''+ Mi'',并且该组表示与单独的选项相同。 当组中的一个或多个选项在不同的前缀下采用不同的含义时,请注意前缀分组 - 例如,+ | -M; ''-i''与''-i + M''的请求不同。 如有疑问,请使用带有适当前缀的单独选项。
-? -H
这两个等效选项选择使用(帮助)输出列表。当Lsof显示解释每个错误的消息后,它会在检测到提供给它的选项中的错误时显示此输出的缩写形式。(按照shell的要求逃避'?'字符。)
-a
导致列表选择选项为AND,如上所述。
-A A
在为AFS配置的系统上可用,其AFS内核代码是通过动态模块实现的。它允许lsof用户将A指定为备用名称列表文件,其中可以找到动态模块的内核地址。
有关动态模块,它们的符号以及它们如何影响lsof的更多信息,请参阅lsof FAQ(FAQ部分给出其位置。)。
-b
导致lsof避免可能阻塞的内核函数--lstat(2),readlink(2)和stat(2)。
有关使用此选项的信息,请参阅"块和超时"以及"避免内核块"部分。
-c c
为执行以c的字符开头的命令的进程选择文件列表。可以使用多个-c选项指定多个命令。在参与AND选项选择之前,它们连接在一个ORed集中。
如果c以"^"开头,则以下字符指定一个命令名称,其进程将被忽略(排除)。
如果c以斜杠('/')开头和结尾,则斜杠之间的字符将被解释为正则表达式。必须引用正则表达式中的Shell元字符以防止它们被shell解释。
结束斜杠后面可能跟这些修饰符:
b正则表达式是基本表达式。
I 忽略了字母的情况。
x正则表达式是扩展表达式(默认)。
有关基本和扩展正则表达式的更多信息,请参阅lsof FAQ(FAQ部分给出其位置。)。
首先测试简单的命令规范。如果该测试失败,则应用命令正则表达式。如果简单命令测试成功,则不进行命令正则表达式测试。当指定lsof的-V选项时,这可能导致"找不到正则表达式的命令:"消息。
+c w
定义由UNIX方言提供的与要在COMMAND列中打印的进程关联的UNIX命令的名称的最大初始字符数。(lsof默认值为9。)
请注意,许多UNIX方言不会在lsof获取命令名称的文件和结构中为lsof提供所有命令名称字符。方言常常限制这些来源中提供的字符数。
例如,Linux 2.4.27和Solaris 9都将命令名长度限制为16个字符。
如果w为零('0'),则将打印UNIX方言提供给lsof的所有命令字符。
如果w小于列标题的长度,''COMMAND'',它将被提升到该长度。
-C
禁用从内核名称缓存中报告任何路径名组件。有关更多信息,请参阅KERNEL NAME CACHE部分。
+d s
导致lsof搜索目录s的所有打开实例及其顶层包含的文件和目录。+d不下降目录树,以s为根。+D D选项可用于请求以目录D为根的完全下降目录树搜索。
除非还指定了-x或-x l选项,否则+d选项的处理不遵循s中的符号链接。除非还指定了-x或-x f选项,否则它也不会在s子目录上的文件系统挂载点上搜索打开的文件。
注意:此选项的用户权限将其限制为搜索用户有权使用system stat(2)函数检查的文件。
-d s
指定要从输出列表中排除或包含的文件描述符(FD)列表。文件描述符在逗号分隔集合s中指定- 例如,''cwd,1,3'',''^6,^2''。(集合中不应有空格。)
如果集合的所有条目都以"^"开头,则列表是排除列表。如果没有条目以"^"开头,则它是一个包含列表。不允许混合列表。
文件描述符编号范围可以在集合中,只要两个成员都不为空,两个成员都是数字,并且结尾成员大于起始成员- 例如,"0-7"或"3-10" "。如果范围具有"^"前缀,则可以指定范围用于排除- 例如,"^0-7"排除所有文件描述符0到7。
在参与AND选项选择之前,多个文件描述符编号在单个ORed集中连接。
当集合中有排除成员和包含成员时,lsof将它们报告为错误并以非零返回码退出。
有关文件描述符名称的更多信息,请参阅OUTPUT部分中的文件描述符(FD)输出值的说明。
+D D
导致lsof搜索目录D的所有打开实例及其包含的所有文件和目录到其完整深度。
除非还指定了-x或-x l选项,否则+D选项的处理不遵循D中的符号链接。除非还指定了-x或-x f选项,否则它也不会在D的子目录上的文件系统挂载点上搜索打开的文件。
注意:此选项的用户权限将其限制为搜索用户有权使用system stat(2)函数检查的文件。
进一步说明:lsof可能会缓慢处理此选项,并需要大量的动态内存来执行此操作。这是因为它必须下降整个目录树,以D为根,为每个文件和目录调用stat(2),构建它找到的所有文件的列表,并搜索该列表以查找与每个打开文件的匹配。当目录D很大时,这些步骤可能需要很长时间,因此请谨慎使用此选项。
-D D
指示lsof使用设备缓存文件。有时限制使用此选项。有关此选项的更多信息,请参阅DEVICE CACHE FILE部分及其后面的部分。
-D后面必须跟一个功能字母;功能字母可以可选地后跟路径名。Lsof识别这些函数字母:
? - 报告设备缓存文件路径
b - 构建设备缓存文件
i - 忽略设备缓存文件
r - 读取设备缓存文件
u - 读取并更新设备缓存文件
b,r和u函数以及路径名称有时会受到限制。当这些功能受到限制时,它们不会出现在-h或- 附带的-D选项的描述中。选项输出。有关这些功能及其受限制的详细信息,请参阅"设备高速缓存文件"部分及其后面的部分。
的?函数报告lsof可用于设备高速缓存文件的只读和写入路径,其值lsof将在形成设备高速缓存文件路径时检查的任何环境变量的名称,以及个人设备高速缓存文件路径的格式。(按照shell的要求逃避'?'字符。)
可用时,b,r和u函数后面可能跟着设备缓存文件的路径。标准默认值是执行lsof的真实用户ID的主目录中的.lsof_hostname,但是在配置和编译lsof时可能已经更改了.lsof_hostname。(-h和- ?选项的输出显示当前的默认前缀- 例如,''.lsof''。)后缀hostname是gethostname(2)返回的主机名的第一个组件。
可用时,b函数指示lsof在默认路径或指定路径上构建新的设备缓存文件。
i函数指示lsof忽略默认设备缓存文件,并通过直接调用内核获取有关设备的信息。
r函数指示lsof在默认路径或指定路径上读取设备高速缓存,但阻止它在不存在或现有结构不正确时创建新的设备高速缓存文件。如果在没有路径名的情况下指定r函数,则会阻止lsof更新不正确或过时的设备缓存文件,或者在其位置创建新文件。在没有路径名参数的情况下指定r函数时,r函数始终可用;它可能会受到lsof进程权限的限制。
如果可用,u函数会指示lsof在默认或指定路径上读取设备缓存文件(如果可能),并在必要时重建它。当未指定-D选项时,这是默认的设备缓存文件功能。
+|-e s
免除路径名为s的文件系统遭受可能阻塞的内核函数调用。+e选项免除stat(2),lstat(2)和大多数readlink(2)内核函数调用。-e选项仅免除stat(2)和lstat(2)内核函数调用。可以使用单独的+|-e规范指定多个文件系统,并且每个文件系统可以具有免除或不允许的readlink(2)调用。
此选项目前仅适用于Linux。
注意:此选项很容易被误用于感兴趣的文件系统以外的其他选项,因为它使用路径名而不是更可靠的设备和inode编号。(设备和inode编号是通过可能阻塞的stat(2)内核调用获取的,因此不可用,但请参阅+|-mm选项作为提供设备编号的可能替代方法。)请谨慎使用此选项并完全使用指定要排除的文件系统的路径名。
当报告豁免文件系统上的打开文件时,可能无法获取所有信息。因此,某些信息列将为空白,字符"UNKN"作为TYPE列中的值的前缀,并且适用的免除选项将在括号中添加到NAME列的末尾。(某些设备编号信息可能通过+|-m m选项提供。)
+|-E
+E指定应显示Linux管道,Linux UNIX套接字和Linux伪终端文件以及端点信息,并且还应显示端点的文件。注意:UNIX套接字文件端点信息仅在-v输出的编译标志行包含HASUXSOCKEPT时可用,而psudoterminal端点信息仅在编译标志行包含HASPTYEPT时可用。
管道端点信息以"PID,cmd,FDmode"形式显示在NAME列中,其中PID是端点进程ID; cmd是端点进程命令; FD是端点文件的描述符;和mode是端点文件的访问模式。
伪终端信息在NAME列中显示为" - >/dev/ptsmin PID,cmd,FDmode"或"PID,cmd,FDmode"。第一种形式是主设备;第二,对于从属设备。min是奴隶设备的次要编号;和PID,cmd,FD和模式与管道端点信息相同。注意:只有当-V输出的编译标志行包含HASPTYEPT时,才能使用psudoterminal端点信息。
UNIX套接字文件端点信息以"'type = TYPE - > INO = INODE PID,cmd,FDmode''的形式显示在NAME列中,其中TYPE是套接字类型; INODE是连接套接字的索引节点号;和PID,cmd,FD和模式与管道端点信息相同。注意:只有当-v输出的编译标志行包含HASUXSOCKEPT时,才能使用UNIX套接字文件端点。
多次出现此信息可以出现在文件的NAME列中。
-E指出Linux管道和Linux UNIX套接字文件应该与端点信息一起显示,而不是端点的文件。
+|-f [cfgGn]
f本身阐明了如何解释路径名参数。当以任何组合跟随c,f,g,G或n时,它指定要启用("+")或禁止(" - ")内核文件结构信息的列表。
通常,如果路径名参数与mount(8)报告的挂载目录名匹配,或者它表示在挂载输出中命名并与挂载目录名关联的块设备,则将其视为文件系统名称。
如果指定了+f,则所有路径名参数都将被视为文件系统名称,如果没有,则lsof会报告。例如,当文件系统名称(挂载设备)不是块设备时,这可能很有用。
对于某些CD-ROM文件系统会发生这种情况。
当-f由其自身指定时,所有路径名参数将被视为简单文件。因此,例如,'-f - /''参数指示lsof搜索带有'/'路径名的打开文件,而不是'/'(根)文件系统中的所有打开文件。
请注意确保+f和-f正确终止,并且后面没有可能作为参数的字符(例如,文件或文件系统名称)。例如,在这些示例中使用+f和-f之后的" - "。
$ lsof +f - /文件/系统/名称
$ lsof -f - /file/name
使用+f [cfgGn]选项形式请求的来自内核文件结构的信息列表通常被禁止,并且对于某些方言而言不是全部或部分可用的- 例如,基于/proc的Linux内核2.6.22以下。
当f的前缀是加号("+")时,这些字符请求文件结构信息:
c文件结构使用次数(不是Linux)
f文件结构地址(不是Linux)
g文件标志缩写(Linux 2.6.22及更高版本)
十六进制的G文件标志(Linux 2.6.22及更高版本)
n文件结构节点地址(不是Linux)
当前缀为负(" - ")时,相同的字符将禁用指示值的列表。
文件结构地址,使用计数,标志和节点地址可用于检测由子进程继承的更容易相同的文件以及由不同进程使用的相同文件。Lsof列输出可以通过保存值的输出列进行排序,并列出以标识相同的文件使用,或者lsof字段输出可以通过AWK或Perl后过滤器脚本或C程序进行解析。
-F f
指定一个字符列表f,用于选择要输出以供另一个程序处理的字段,以及终止每个输出字段的字符。要输出的每个字段都用f中的单个字符指定。
fieldterminator默认为NL,但可以更改为NUL(000)。有关字段标识字符和字段输出过程的说明,请参见"其他程序的输出"部分。
当字段选择字符列表为空时,选择所有标准字段(出于兼容性原因,除原始设备字段,安全上下文和区域字段外),并使用NL字段终止符。
当字段选择字符列表仅包含零("0")时,选择所有字段(出于兼容性原因除了原始设备字段),并使用NUL终结符字符。
必须使用f中的显式条目设置字段的其他组合及其关联的字段终止符字符,如"其他程序的输出"部分所述。
当字段选择字符标识lsof通常不列出的项目时- 例如,用-R选择的PPID - 字段字符的规范- 例如,'-FR'' - 也选择项目的列表。
当字段选择字符列表包含单个字符"?"时,lsof将显示字段标识字符的帮助列表。(按照shell的要求逃避'?'字符。)
-g [s]
排除或选择其可选进程组标识(PGID)编号在逗号分隔集合中的进程的文件列表- 例如,"123"或"123,^456"。(集合中不应有空格。)
以"^"(否定)开头的PGID编号表示排除。
在参与AND选项选择之前,多个PGID编号在单个ORed集合中连接。但是,PGID排除在没有ORing或ANDing的情况下应用,并在应用其他选择标准之前生效。
-g选项还启用PGID号的输出显示。如果指定没有设置PGID,那就完全了。
-i [i]
选择任何其Internet地址与i中指定的地址匹配的文件列表。如果未指定地址,则此选项将选择所有Internet和x.25(HP-UX)网络文件的列表。
如果指定-i4或-i6且没有以下地址,则仅显示指示的IP版本(IPv4或IPv6)的文件。(只有当方言支持IPv6时才能使用IPv6规范,如lsof的-h或- ?输出中的"[46]"和"IPv [46]"所示。)顺序指定-i4,然后是-i6与指定-i相同,反之亦然。在-i之后指定-i4或-i6与指定-i4或-i6本身相同。
可以使用多个-i选项指定多个地址(最多100个)。(端口号或服务名称范围计为一个地址。)它们在参与AND选项选择之前连接在一个ORed集中。
表单中指定了Internet地址(方括号中的项目是可选的。):
[46] [protocol] [@hostname|hostaddr] [:service|port]
where:
- 46指定适用于以下地址的IP版本,IPv4或IPv6。仅当UNIX方言支持IPv6时,才能指定"6"。如果既未指定'4'也未指定'6',则以下地址适用于所有IP版本。
- protocol是协议名称- TCP,UDP
- hostname是Internet主机名。除非指定了特定的IP版本,否则将选择与所有版本的主机名关联的打开网络文件。
- hostaddr是点状的数字Internet IPv4地址;如果UNIX方言支持IPv6,则用冒号形式的IPv6数字地址括在括号中。选择IP版本时,只能指定其数字地址。
- service是/etc/services名称- 例如,smtp或它们的列表。
- port是端口号或它们的列表。
仅当UNIX方言支持IPv6时,才可以使用IPv6选项。要查看方言是否支持IPv6,请运行lsof并指定-h或- ? (帮助)选项。如果显示的-i选项描述包含"[46]"和"IPv [46]",则支持IPv6。
如果使用-i 6将网络文件选择限制为IPv6,则可能无法指定IPv4主机名和地址。如果使用-i 4将网络文件选择限制为IPv4,则可能无法指定IPv6主机名和地址。当打开IPv4网络文件时地址映射在IPv6地址中,打开文件的类型将是IPv6,而不是IPv4,其显示将由"6"选择,而不是"4"。
必须至少提供一个地址组件--4,6,协议,主机名,hostaddr或服务。始终需要引用主机规范的"@"字符;和':'一样,引领端口规范。指定hostname或hostaddr。指定服务名称列表或端口号列表。如果指定了服务名称列表,则如果服务名称的TCP,UDP和UDPLITE端口号不同,则可能还需要指定协议。
使用任何情况- 较低或较高- 用于协议。
服务名称和端口号可以组合在一个列表中,其条目以逗号分隔,其数字范围条目用减号分隔。可能没有嵌入空格,并且所有服务名称必须属于指定的协议。由于服务名称可能包含嵌入的减号,因此范围的起始条目不能是服务名称;但它可以是端口号。
以下是一些示例地址:
-i6 - 仅限IPv6
TCP:25 - TCP和端口25
@1.2.3.4 - Internet IPv4主机地址1.2.3.4
@[3ffe:1ebc :: 1]:1234 - Internet IPv6主机地址3ffe:1ebc :: 1,端口1234
UDP:who - 服务端口的UDP
[email protected]:513 - TCP,端口513和主机名lsof.itap
tcp@foo:1-10,smtp,99 - TCP,端口1到10,服务名称smtp,端口99,主机名foo
tcp@bar:1-smtp - TCP,端口1到smtp,主机栏
:time - TCP,UDP或UDPLITE时间服务端口
-K k
在支持任务(线程)报告的方言上选择进程的任务(线程)列表。(如果帮助输出- 即-h或- ?选项的输出- 显示此选项,则方言支持任务(线程)报告。)
如果-K后跟一个值k,则它必须是"i"。这导致lsof忽略任务,特别是在默认情况下,list-everything情况下没有指定其他选项。
当-K和-a都在Linux上指定,并且主进程的任务由其他选项选择时,主进程也将被列为任务,但没有任务ID。(请参阅OUTPUT部分中TID列的说明。)
在FreeBSD版本支持线程的地方,所有线程都将列出其ID。
通常,线程和任务继承调用者的文件,但可能会关闭某些文件并打开其他文件,因此lsof总是会报告线程和任务的所有打开文件。
-k k
指定内核名称列表文件k,代替/vmunix,/mach等。-k在IBM RISC/System 6000上的AIX下不可用。
-l
禁止将用户ID号转换为登录名。当登录名查找工作不正确或缓慢时,它也很有用。
+|-L [l]
启用('+')或禁用(' - ')文件链接计数列表,它们可用- 例如,它们不适用于套接字或大多数FIFO和管道。
如果指定+L且没有以下编号,则将列出所有链接计数。指定-L(默认值)时,不会列出任何链接计数。
当+L后跟一个数字时,只列出链接数小于该数字的文件。(没有数字可以跟随-L。)"+L1"形式的规范将选择已经取消链接的打开文件。"。+aL1
对于其他链接计数比较,请使用字段输出(-F)和后处理脚本或程序。
+|-m m
指定备用内核内存文件或激活挂载表补充处理。
选项形式-m m指定内核存储器文件m,代替/dev/kmem或/dev/mem - 例如,故障转储文件。
选项形式+m请求将安装补充文件写入标准输出文件。所有其他选项都会被默默忽略。
每个已安装文件系统的安装补充文件中都会有一行,其中包含已安装的文件系统目录,后跟一个空格,后跟十六进制"0x"格式的设备编号- 例如,
/0x801
当无法通过stat(2)或lstat(2)获取文件系统时,Lsof可以使用mount补充文件来获取文件系统的设备号。
选项形式+m m将m标识为安装补充文件。
注意:+m和+m m选项不适用于所有支持的方言。检查lsof的-h或- 的输出?用于查看+m和+m m选项是否可用的选项。
+|-M
启用(+)或禁用( - )报告支持端口映射的本地TCP,UDP和UDPLITE端口的端口映射程序注册。(有关支持portmapper注册报告的位置的信息,请参阅此选项说明的最后一段。)
默认报告模式由lsof构建器使用方言的machine.h头文件中的HASPMAPENABLED #define设置; lsof在HASPMAPENABLED #define停用的情况下分发,因此默认情况下禁用端口映射器报告,并且必须使用+M进行请求。指定lsof的-h或- ?选项将报告默认模式。在已禁用时禁用端口映射程序注册或在已启用时启用它是可接受的。启用portmapper注册报告时,lsof会在端口号或服务名称后面的方括号中显示本地TCP,UDP或UDPLITE端口的端口映射器注册(如果有) - 例如,'':1234 [name]''或'' :名称[100083] ''。注册信息可以是名称或号码,这取决于注册程序在注册端口时提供给端口映射器的内容。
启用端口映射器注册报告时,当访问端口映射器变得拥塞或停止时,lsof可能会运行得稍微缓慢甚至被阻止。反转报告模式以确定portmapper注册报告是否正在减慢或阻止lsof。
出于端口映射器注册报告的目的,lsof将TCP,UDP或UDPLITE端口视为本地,如果:它在其包含的内核结构的本地部分中找到; 或者如果它位于其包含的内核结构的外部部分,并且本地和外部Internet地址相同; 或者如果它位于其包含的内核结构的外部部分,并且外部Internet地址是INADDR_LOOPBACK(127.0.0.1)。 当外部Internet地址位于与本地Internet地址不同的接口上时,此规则可能会使lsof忽略具有多个接口的计算机上的某些外部端口。
有关端口映射器注册报告问题的进一步讨论,请参阅常见问题解答(常见问题解答部分提供其位置)。
仅具有RPC头文件的方言支持Portmapper注册报告。(一些使用GlibC 2.14的Linux发行版没有它们。)当支持portmapper注册报告时,-h或- ?帮助输出将显示+|-M选项。
-n
禁止将网络号转换为网络文件的主机名。抑制转换可能会使lsof运行得更快。当主机名查找无法正常工作时,它也很有用。
-N
选择NFS文件列表。
-o
指示lsof始终显示文件偏移量。它会将SIZE/OFF输出列标题更改为OFFSET。注意:在某些UNIX方言中,lsof无法从其内核数据源获取准确或一致的文件偏移信息,有时仅用于特定类型的文件(例如,套接字文件)。请参阅lsof常见问题解答(FAQ部分给出其位置。)欲获得更多信息。
-o和-s选项是互斥的;它们不能同时指定。如果未指定,则lsof显示任何值- 大小或偏移量- 适用于文件类型。
-o o
在表单切换为"0x ..."之前,为文件偏移量定义在"0t"之后要打印的小数位数(o)。零值(无限制)指示lsof对所有偏移输出使用"0t"形式。
此选项不会指示lsof始终显示偏移量;指定-o(没有尾随数字)来做到这一点。-o o仅指定混合大小和偏移或仅偏移输出中"0t"之后的位数。因此,例如,要指示lsof始终以十进制数字计数10显示偏移量,请使用:
-o -o 10
要么
-oo10
"0t"后允许的默认位数通常为8,但lsof构建器可能已更改。请参阅-h或- 的输出中-o o选项的说明。确定效果中默认值的选项。
-O
指示lsof绕过它用来避免被某些内核操作阻塞的策略- 即在分叉的子进程中执行它们。有关可能阻止lsof的内核操作的更多信息,请参阅BLOCKS AND TIMEOUTS和避免KERNEL BLOCKS部分。
虽然使用此选项将减少lsof启动开销,但当内核不响应函数时,它也可能导致lsof挂起。谨慎使用此选项。
-p s
排除或选择其可选进程标识(PID)编号在逗号分隔集合s中的进程的文件列表- 例如,"123"或"123,^456"。(集合中不应有空格。)
以"^"(否定)开头的PID编号表示排除。
在参与AND选项选择之前,多个进程ID号在单个ORed集中连接。但是,在不使用ORing或ANDing的情况下应用PID排除,并在应用其他选择标准之前生效。
-P
禁止将端口号转换为网络文件的端口名称。抑制转换可能会使lsof运行得更快一些。当端口名称查找不正常时,它也很有用。
+|-r [t[m]]
将lsof置于重复模式。lsof列出了由其他选项选择的打开文件,延迟t秒(默认为15),然后重复列表,重复延迟和列出,直到由选项前缀定义的条件停止。
如果前缀是" - ",则重复模式是无止境的。Lsof必须以中断或退出信号终止。
如果前缀是"+",重复模式将结束第一个循环没有列出打开的文件- 当然,当lsof被中断或退出信号停止时。当重复模式因没有列出文件而结束时,如果列出了任何打开的文件,则进程退出代码将为零;一,如果没有列出的话。
Lsof标记每个列表的结尾:如果字段输出正在进行(-F,已指定选项),则默认标记为"m";否则默认标记为"========"。标记之后是NL字符。
可选的"m
重复模式减少了lsof启动开销,因此使用此模式比从shell脚本重复调用lsof更有效。
为了最有效地使用重复模式,请伴随+|-r指定其他lsof选项,因此内核内存访问量lsof将保持最小。在进程级别过滤的选项- 例如-c,-g,-p,-u - 是最有效的选择器。
当与字段输出(请参阅-F,选项说明)和监督awk或Perl脚本或C程序结合使用时,重复模式非常有用。
-R
指示lsof列出PPID列中的父进程标识号。
-s [p:s]
s单独指示lsof始终显示文件大小。它会将SIZE/OFF输出列标题更改为SIZE。如果文件没有大小,则不显示任何内容。
可选的-s p:s表单仅适用于选定的方言,并且仅在-h或- ?时可用。帮助输出列出它。
当可选表单可用时,s后面可以跟一个协议名称(p),TCP或UDP,冒号(':')和逗号分隔的协议状态名称列表,该选项会导致打开TCP和UDP文件如果他们的州名在"^"之前的列表中,则被排除在外;如果他们的姓名前面没有"^",则包括在内。
支持此选项的方言可能仅支持一种协议。指定不支持的协议时,将显示一条消息,指示协议的状态名称不可用。
定义包含列表时,只有列表中具有状态名称的网络文件才会出现在lsof输出中。因此,指定一个州名称意味着只列出具有该唯一州名称的网络文件。
大小写在协议或状态名称中并不重要,但可能没有空格,并且需要分隔协议名称(p)和状态名称列表的冒号(':')。
如果仅列出TCP和UDP文件,由指定的排除项和包含项控制,则也必须指定-i选项。如果仅列出单个协议的文件,请将其名称作为参数添加到-i选项。
例如,要仅列出具有TCP状态LISTEN的网络文件,请使用:
-iTCP -sTCP:LISTEN
或者,例如,要列出除Idle之外的所有UDP状态的网络文件,请使用:
-iUDP -sUDP:空闲
状态名称因UNIX方言而异,因此无法提供完整列表。一些常见的TCP状态名称是:CLOSED,IDLE,BOUND,LISTEN,ESTABLISHED,SYN_SENT,SYN_RCDV,ESTABLISHED,CLOSE_WAIT,FIN_WAIT1,CLOSING,LAST_ACK,FIN_WAIT_2和TIME_WAIT。两个常见的UDP状态名称是Unbound和Idle。
有关如何使用协议状态排除和包含的更多信息,请参阅lsof常见问题解答(常见问题解答部分给出其位置。),包括示例。
-o(没有后续的十进制数字计数)和-s选项(没有以下协议和状态名称列表)是互斥的;它们不能同时指定。如果两者都未指定,则lsof显示任何值- 大小或偏移量- 适用于文件类型。
由于某些类型的文件没有真正的大小- 套接字,FIFO,管道等- 如果可能的话,lsof显示其大小的内容量在其关联的内核缓冲区中。
-S [t]
指定内核函数的可选超时秒值- lstat(2),readlink(2)和stat(2) - 否则可能会死锁。t的最小值是2;默认值,十五;如果未指定任何值,则使用默认值。
有关详细信息,请参阅"块和超时"部分。
-T [t]
控制一些TCP/TPI信息的报告,也由netstat(1)报告,遵循网络地址。在正常输出中,信息显示在括号中,除了TCP或TPI状态名称之外的每个项目由关键字标识,后跟"=",由一个空格与其他项隔开:
QR = <读取队列长度>
QS = <发送队列长度>
SO = <套接字选项和值>
SS = <套接字状态>
TF =
WR = <窗口读取长度>
WW = <窗口写入长度>
并非所有UNIX方言都报告所有值。在项目名称和"="之后报告项目值(如果可用)。
当字段输出模式生效时(参见"其他程序输出"),每个项目都显示为带有"T"前导字符的字段。
-T没有以下关键字符禁用TCP/TPI信息报告。
-T具有以下字符选择特定TCP/TPI信息的报告:
f选择套接字选项,状态和值以及TCP标志和值的报告。
q选择队列长度报告。
s选择连接状态报告。
w选择窗口大小报告。
并非某些UNIX方言都启用了所有选择。可以为所有方言选择状态,并默认报告。-h或- ? -T选项的帮助输出将显示可以与UNIX方言一起使用的选项。
当-T用于选择信息时- 即,后跟一个或多个选择字符- 默认情况下禁用状态显示,并且必须在-T后面的字符中再次显式选择。(实际上,默认值等于-Ts。)例如,如果需要队列长度和状态,请使用-Tqs。
可以在方言的标题中以SO_,so_,SS_,TCP_和TF_之后的名称形式报告套接字选项,套接字状态,某些套接字值,TCP标志和一个TCP值(在UNIX方言中可用时)文件- 通常是
''SO =''在套接字选项和值之前; ''SS ='',套接字状态;和''TF ='',TCP标志和值。
如果一个标志或选项有一个值,则该值将跟随'='和名称- 例如,''SO = LINGER = 5'',''SO = QLIM = 5'',''TF = MSS = 512 ''。可能会报告以下七个值:
名称
报告 说明(通用符号)
KEEPALIVE 保持活力时间(SO_KEEPALIVE)
LINGER 逗留时间(SO_LINGER)
MSS 最大段大小(TCP_MAXSEG)
PQLEN 部分侦听队列连接
QLEN 建立了侦听队列连接
QLIM 建立了侦听队列限制
RCVBUF 接收缓冲区长度(SO_RCVBUF)
SNDBUF 发送缓冲区长度(SO_SNDBUF)
可以在"为什么不报告lsof报告套接字选项,套接字状态和TCP标志和值"的答案中找到有关特定UNIX方言可能显示的套接字选项和值,套接字状态以及TCP标志和值的详细信息。对于我的方言?''和''为什么lsof不报告我的方言的部分监听队列连接数?''问题在lsof FAQ中(FAQ部分给出了它的位置。)
-t
指定lsof应该只生成带有进程标识符的简洁输出而没有标题- 例如,以便输出可以通过管道传输来终止(1)。-t选择-w选项。
-u s
为登录名或用户ID号在逗号分隔集合中的用户选择文件列表- 例如,''abe''或''548,root''。(集合中不应有空格。)
在参与AND选项选择之前,多个登录名或用户ID号在单个ORed集中连接。
如果登录名或用户ID前面带有"^",则它变为否定- 即,将永远不会列出登录名或用户ID所拥有的进程的文件。否定的登录名或用户ID选择既不与其他选择进行AND运算也不进行OR运算;它在所有其他选择之前应用,并且绝对排除了进程文件的列表。例如,要指示lsof排除属于根进程的文件列表,请指定"-u ^root"或"-u ^0"。
-U
选择UNIX域套接字文件的列表。
-v
选择lsof版本信息列表,包括:版本号;当构造lsof二进制文件时;谁构建了二进制文件;用于构造lsof二进制文件的编译器的名称;当可用时编译器的版本号;用于构造lsof二进制文件的编译器和加载器标志;和系统信息,通常是uname -a选项的输出。
-V
指示lsof指示要求列出并找不到的项目- 命令名称,文件名,Internet地址或文件,登录名,NFS文件,PID,PGID和UID。
当其他选项与搜索选项进行AND运算或编译时选项限制某些文件的列表时,当ANDed选项或编译时选项阻止列出包含打开文件时,lsof可能无法报告找不到搜索项找到的搜索项目。
例如,''lsof -V -iTCP @ foobar -a -d 999''可能无法报告在''TCP @ foobar''找不到打开文件的失败,如果没有文件描述符编号,则可能不会列出任何文件。999.当在编译时定义HASSECURITY和HASNOSOCKSECURITY并且它们阻止列出打开的文件时,会出现类似的情况。
+|-w
启用(+)或禁用( - )抑制警告消息。
lsof构建器可以选择在默认情况下禁用或启用警告消息。默认警告消息状态在-h或- ?的输出中指示。选项。在已禁用警告消息时禁用警告消息或在已启用时启用警告消息是可接受的。
-t选项选择-w选项。
-x [fl]
可以伴随+d和+D选项指示其处理跨越扫描目录(+d)或目录树(+D)时遇到的符号链接和/或文件系统挂载点。
如果-x由其自身指定而没有以下参数,则启用符号链接和文件系统装入点的交叉处理。请注意,如果指定了-x而没有参数,则下一个参数必须以" - "或"+"开头。
可选的'f'参数启用文件系统挂载点交叉处理; 'l',符号链接交叉处理。
如果不提供+d或+D选项,则可能无法提供-x选项。
-X
这是一种特定于方言的选项。
AIX:
此IBM AIX RISC/System 6000选项请求报告已执行的文本文件和共享库引用。
警告:因为此选项使用内核readx()函数,所以它在繁忙的AIX系统上的使用可能会导致应用程序进程完全挂起,既不会被杀死也不会被停止。我从来没有见过这种情况或有过关于它发生的报告,但我认为它可能发生的可能性很小。
默认情况下,禁用readx()。在AIX 5L及更高版本上,lsof可能需要setuid-root权限才能执行此选项请求的操作。
lsof构建器可以指定-X选项限制为实际UID为root的进程。如果已经完成,-X选项将不会出现在-h或- ?中除非lsof进程的真实UID是root,否则帮助输出。默认的lsof分发允许任何UID指定-X,因此默认情况下它将出现在帮助输出中。
当禁用AIX readx()使用时,lsof可能无法报告所有文本和加载程序文件引用的信息,但它也可能避免加剧AIX内核目录搜索内核错误,称为过时段ID错误。
lsof或任何其他程序用来访问内核虚拟内存的某些部分的readx()函数可以触发Stale Segment ID错误。它可能导致内核的dir_search()函数错误地认为文件系统目录的内存中副本的一部分已归零。另一个与lsof不同的应用程序进程,要求内核搜索目录- 例如,通过使用open(2) - 可能导致dir_search()永远循环,从而挂起应用程序进程。
请参阅lsof FAQ(FAQ部分给出其位置。)和lsof发行版的00README文件,以更全面地描述Stale Segment ID错误,其APAR以及在编译lsof时定义readx()的方法。
Linux:
此Linux选项请求lsof跳过有关所有打开的TCP,UDP和UDPLITE IPv4和IPv6文件的信息报告。
当系统具有大量开放的TCP,UDP和UDPLITE文件时,此Linux选项最有用,在/proc/net/tcp *和/proc/net/udp *文件中处理其信息将使用lsof a很长一段时间,其报告不感兴趣。
只有当您确定要显示的信息与打开的TCP,UDP或UDPLITE套接字文件无关时,才小心使用此选项。
Solaris 10及更高版本:
此Solaris 10及更高版本选项请求报告已删除文件的缓存路径- 即使用rm(1)或unlink(2)删除。
缓存的路径后跟字符串"'(已删除)",表示已删除文件打开的路径。
因为对路径进行的干预更改- 即,使用mv(1)或重命名(2)重命名- 不会记录在缓存路径中,所以lsof报告的只是文件打开的路径,而不是它可能不同的最终路径。
-z [z]
指定如何处理Solaris 10和更高版本的区域信息。
如果没有以下参数- 例如,NO z - 该选项指定区域名称将在ZONE输出列中列出。
-z选项后面可以跟一个区域名称z。这会导致lsof仅列出该区域中进程的打开文件。可以指定多个-z z选项和参数对以形成命名区域的列表。将列出任何区域中任何进程的任何打开文件,具体取决于其他选项和参数指定的其他条件。
-Z [Z]
指定如何处理SELinux安全上下文。在正在运行的Linux内核中禁用SELinux时,它和'Z'字段输出字符支持被禁止。有关"Z"字段输出字符的更多信息,请参见OUTPUT FOR OTHER PROGRAMS。
如果没有以下参数- 例如,NO Z - 该选项指定安全上下文将在SECURITY-CONTEXT输出列中列出。
-Z选项后面可以跟一个通配符安全上下文名称Z.这会导致lsof仅列出该安全上下文中进程的打开文件。可以指定多个-Z Z选项和参数对以形成安全上下文列表。将列出任何安全上下文中任何进程的任何打开文件,但受其他选项和参数指定的其他条件的限制。注意,Z可以是A:B:C或*:B:C或A:B:*或*:*:C以匹配A:B:C上下文。
--
双减号选项是一个标记,表示键控选项的结束。例如,当第一个文件名以减号开头时,可以使用它。当最后一个键控选项的值缺失必须通过以下选项中存在减号以及文件名开头之前表示时,也可以使用它。
names
这些是要列出的特定文件的路径名。符号链接在使用前已解决。可以使用" - "选项将第一个名称与前面的选项分开。
如果名称是文件系统的挂载目录或文件系统的设备,则lsof将列出文件系统上打开的所有文件。要被视为文件系统,该名称必须与mount(8)输出中的已安装目录名称匹配,或者与与已安装目录名称关联的块设备的名称匹配。+|-f选项可用于强制lsof将名称视为文件系统标识符(+f)或简单文件(-f)。
如果name是不是文件系统的挂载目录名的目录的路径,则将其视为处理常规文件- 即,其列表仅限于将其作为文件或作为文件打开的进程特定于进程的目录,例如根目录或当前工作目录。要请求lsof在目录名称中查找打开的文件,请使用+d s和+D D选项。
如果名称是一系列多路复用文件的基本名称- 例如,AIX的/dev/pt [cs] - lsof将列出设备上打开的所有关联多路复用文件- 例如,/dev/pt [cs]/1,/dev/pt [cs]/2等
如果名称是UNIX域套接字名称,则lsof通常仅通过名称的字符搜索它- 完全按照指定的名称进行搜索并记录在内核套接字结构中。(有关Linux规则的例外情况,请参阅下一段。)指定相对路径- 例如./file - 代替文件的绝对路径- 例如/tmp/file - 将不起作用,因为lsof必须匹配您使用在内核UNIX域套接字结构中找到的字符指定的字符。
如果名称是Linux UNIX域套接字名称,则在一种情况下lsof能够通过其设备和inode编号搜索它,从而允许name为相对路径。这种情况要求绝对路径- 即以斜杠('/')开头的路径由创建套接字的进程使用,因此存储在/proc/net/unix文件中;并且它要求lsof能够通过成功的stat(2)系统调用获得/proc/net/unix和name中的绝对路径的设备和节点号。满足这些条件时,lsof将能够在名称中指定某个路径时搜索UNIX域套接字。因此,例如,如果路径是/dev/log,并且当工作目录是/dev时启动lsof搜索,则name可以是./log。
如果名称不是上述名称,则lsof将列出其设备和inode与指定路径名称匹配的任何打开文件。
如果还指定了-b选项,则可以安全指定的唯一名称是挂载表为其提供备用设备编号的文件系统。有关详细信息,请参阅"避免核心块和备用设备编号"部分。
在参与AND选项选择之前,多个文件名在单个ORed集中连接。
AFS
Lsof支持识别这些方言(和AFS版本)的AFS文件:
•AIX 4.1.4(AFS 3.4a)
•HP-UX 9.0.5(AFS 3.4a)
•Linux 1.2.13(AFS 3.3)
•Solaris 2. [56] (AFS 3.4a)
它可能识别这些方言的其他版本上的AFS文件,但尚未在那里进行测试。根据AFS的实现方式,lsof可能会识别其他方言中的AFS文件,或者可能难以识别支持的方言中的AFS文件。
当通过动态模块实现AFS内核支持时,Lsof可能无法识别支持的方言中AFS文件的所有方面,动态模块的地址未出现在内核的变量名称列表中。在这种情况下,lsof可能必须猜测AFS文件的标识,并且可能无法从内核获取计算AFS卷节点号所需的卷信息。当lsof无法计算卷节点编号时,它会在NODE列中报告为空白。
-A A选项在lsof的一些方言实现中可用,用于指定可以找到动态模块内核地址的名称列表文件。当此选项可用时,它将在lsof帮助输出中列出,以响应-h或- ?
有关动态模块及其符号以及它们如何影响lsof选项的更多信息,请参阅lsof FAQ(FAQ部分给出其位置。)。
由于AFS路径查找似乎不参与内核的名称缓存操作,因此lsof无法识别AFS文件的路径名组件。
SECURITY 安全
Lsof有三个可能引起安全问题的功能。首先,它的默认编译模式允许任何人用它列出所有打开的文件。其次,默认情况下,它会在执行lsof的真实用户ID的主目录中创建用户可读且用户可写的设备缓存文件。(编译lsof时,可能会禁用list-all-open-files和device cache功能。)第三,它的-k和-m选项命名备用内核名称列表或内存文件。
限制所有打开文件的列表由编译时HASSECURITY和HASNOSOCKSECURITY选项控制。定义HASSECURITY时,lsof将仅允许root用户列出所有打开的文件。非root用户可以仅列出具有与lsof进程的真实用户ID号(用户登录的用户ID号)相同的用户IDentification编号的进程的打开文件。
但是,如果同时定义了HASSECURITY和HASNOSOCKSECURITY,则任何人都可以列出打开的套接字文件,前提是它们是使用-i选项选择的。
如果未定义HASSECURITY,则任何人都可以列出所有打开的文件。
帮助输出,响应-h或- ?选项,给出HASSECURITY和HASNOSOCKSECURITY定义的状态。
有关在启用HASSECURITY和HASNOSOCKSECURITY选项的情况下构建lsof的信息,请参阅lsof发行版的00README文件的"安全性"部分。
用户可读和用户可写设备缓存文件的创建和使用由编译时HASDCACHE选项控制。有关其路径如何形成的详细信息,请参阅DEVICE CACHE FILE部分及其后面的部分。出于安全考虑,重要的是要注意在默认的lsof分发中,如果执行lsof的真实用户ID是root,则设备缓存文件将写入root的主目录- 例如/或/root。如果未定义HASDCACHE,则lsof不会写入或尝试读取设备缓存文件。
当定义HASDCACHE时,lsof帮助输出,响应-h,-D?或- ?选项,将提供设备缓存文件处理信息。如果未定义HASDCACHE,则-h或- ?输出将没有-D选项说明。
在您决定禁用设备缓存文件功能之前- 启用它可以通过减少检查/dev(或/devices)中所有节点的启动开销来提高lsof的性能- 请阅读lsof分发的00DCACHE文件中对它的讨论和常见问题解答(常见问题解答部分给出了它的位置。)
在怀疑时,您可以暂时禁用使用-Di选项的设备缓存文件。
当lsof用户使用-k和-m选项声明备用内核名称列表或内存文件时,lsof会检查用户是否有权使用access(2)读取它们。这是为了防止lsof模式可能赋予它的任何特殊功能,让它读取通常不能通过真实用户ID的权限访问的文件。
OUTPUT 输出
本节介绍每个打开文件的lsof列表信息。有关可由其他程序处理的输出的其他信息,请参阅"其他程序的输出"部分。
Lsof仅输出可打印(由isprint(3)声明)8位字符。不可打印的字符以三种形式之一打印:C'' \ [bfrnt]''形式;控制字符'^'形式(例如,''^@'');或十六进制的前导''\ x''形式(例如,''\ xab'')。空格在COMMAND列(''\ x20'')中不可打印,可在其他地方打印。
对于某些方言- 如果在方言的machine.h头文件中定义了HASSETLOCALE,则lsof将打印语言区域设置的扩展8位字符。必须为lsof进程提供语言区域设置环境变量(例如,LANG),其值表示已知的语言区域设置,其中扩展字符被认为是isprint(3)可打印的。否则lsof认为扩展字符不可打印,并根据上面所述的不可打印字符的规则打印它们。请参阅方言的setlocale(3)手册页,了解可用于代替LANG的其他环境变量的名称- 例如,LC_ALL,LC_CTYPE等。
当方言的machine.h头文件中定义了HASSETLOCALE和HASWIDECHAR时,以及在适当的环境变量中定义了合适的语言区域时,Lsof对语言的语言区域设置支持也包括宽字符- 例如UTF-8。lsof过程。如果iswprint(3)报告它们,则在这些条件下可以打印宽字符。如果未定义HASSETLOCALE,HASWIDECHAR和合适的语言区域设置,或者如果iswprint(3)报告不可打印的宽字符,则lsof认为宽字符不可打印,并根据其非规则打印其8位中的每一个- 可打印的字符,如上所述。
有关详细信息,请参阅lsof常见问题解答中的"语言区域设置支持"问题的答案(常见问题解答部分提供其位置。)。
Lsof每次运行时动态调整输出列的大小,保证每列的最小大小。它还保证每列与其前一列至少隔开一个空格。
COMMAND 命令名称
包含与进程关联的UNIX命令名称的前九个字符。如果为+c w选项指定了非零w值,则该列包含与该过程相关的UNIX命令名称的前w个字符,直到UNIX方言提供给lsof的字符数限制。(有关详细信息,请参阅+c w命令或lsof常见问题解答的说明。常见问题解答部分给出了它的位置。)
如果w小于列标题的长度,''COMMAND'',它将被提升到该长度。
如果为+c w选项指定了零值,则该列包含与该进程关联的UNIX命令名称的所有字符。
当指定命令名称描述符('c')时,内核在其结构中维护的所有命令名字符都显示在字段输出中。有关选择字段输出和相关命令名称描述符的信息,请参阅"其他命令的输出"部分。
PID 进程号
是进程的进程标识号。
TID 线程号
是任务(线程)标识号,如果方言支持任务(线程)报告并且正在列出任务(线程)。(如果帮助输出- 即-h或- ?选项的输出- 显示此选项,则方言支持任务(线程)报告。)
Linux中的空白TID列表示进程- 即非任务。
TASKCMD 任务名称
是任务命令名称。通常,这将与COMMAND列中指定的进程相同,但某些任务实现(例如,Linux)允许任务更改其命令名称。
TASKCMD列宽与COMMAND列的大小限制相同。
ZONE 区域
是Solaris 10和更高版本的区域名称。必须使用-z选项选择此列。
SECURITY-CONTEXT 安全上下文
是SELinux安全上下文。必须使用-Z选项选择此列。请注意,在正在运行的Linux内核中禁用SELinux时,将禁止-Z选项。
PPID 父进程号
是进程的父进程标识号。仅在指定-R选项时显示。
PGID 进程组
是与进程关联的进程组标识号。仅在指定-g选项时显示。
USER 用户
是进程所属用户的用户标识号或登录名,通常与ps(1)报告的相同。但是,在Linux上,USER是拥有/proc中目录的用户ID号或登录名,其中lsof查找有关该进程的信息。通常,这与ps(1)报告的值相同,但在进程更改其有效用户ID时可能会有所不同。(有关何时显示用户ID号或登录名的信息,请参阅-l选项说明。)
FD 文件描述符
是文件的文件描述符编号或:
cwd 当前工作目录;
Lnn 库引用(AIX);
err 错误的FD信息错误(参见NAME列);
jld jail目录(FreeBSD);
ltx 共享库文本(代码和数据);
Mxx 十六进制内存映射类型号xx。
m86 DOS合并映射文件;
mem 内存映射文件;
mmap 内存映射设备;
pd 父目录;
rtd 根目录;
tr 内核跟踪文件(OpenBSD);
txt 程序文本(代码和数据);
v86 VP/ix映射文件;
FD后跟其中一个字符,描述文件打开的模式:
r 用于读取访问;
w 用于写访问;
u 用于读写访问;
空格 未知模式且没有锁定字符;
' - ' 未知模式并锁定字符。
模式字符后跟一个锁定字符,描述应用于文件的锁定类型:
N 表示未知类型的Solaris NFS锁;
r 用于部分文件的读锁定;
R 表示整个文件的读锁定;
w 对文件的一部分进行写锁定;
W 表示整个文件的写锁定;
u 任何长度的读写锁;
U 表示未知类型的锁;
x 用于部分文件的SCO OpenServer Xenix锁;
X 用于整个文件上的SCO OpenServer Xenix锁;
空格 没有锁。
有关锁定信息字符的更多信息,请参见LOCKS部分。
FD列内容构成用于在后处理脚本中解析的单个字段。
TYPE 文件类型
是与文件关联的节点的类型- 例如,GDIR,GREG,VDIR,VREG等。
或"IPv4"用于IPv4套接字;
或者"IPv6"用于开放的IPv6网络文件- 即使其地址是IPv4,也映射在IPv6地址中;
或"ax25"用于Linux AX.25套接字;
或者"inet"用于Internet域套接字;
或"lla"用于HP-UX链路级访问文件;
或者''rte''用于AF_ROUTE套接字;
或"sock"用于未知域的套接字;
或UNIX'套接字的''unix'';
或者''x.25''用于HP-UX x.25套接字;
或者"BLK"用于块特殊文件;
或"CHR"用于字符特殊文件;
或''DEL''已删除的Linux映射文件;
或"DIR"用于目录;
或VDOOR文件的"DOOR";
或"FIFO"用于FIFO特殊文件;
或者''KQUEUE''用于BSD样式的内核事件队列文件;
或"LINK"用于符号链接文件;
或"MPB"用于多路复用块文件;
或"MPC"用于多路复用字符文件;
或者对于无法打开的Linux/proc/
或者'/PAS'用于/proc/as文件;
或/"PAXV"用于/proc/auxv文件;
或者'/PCRE'用于/proc/cred文件;
或/"PCTL"用于/proc控制文件;
或"PCUR"用于当前/proc过程;
或"PCWD"用于/proc当前工作目录;
或者'/PDIR''作为/proc目录;
或者'/PETY'用于/proc可执行类型(etype);
或者'/PFD''用于/proc文件描述符;
或/"PFDR"用于/proc文件描述符目录;
或者''PFIL''表示可执行文件/proc文件;
或者'/PFPR''用于/proc FP寄存器组;
或者'/PGD'用于/proc/pagedata文件;
或者'/PGID''用于/proc组通知程序文件;
或''PIPE''的"管道";
或''PLC''表示/proc/lwpctl文件;
或者'/PLDR''用于/proc/lpw目录;
或者'/PLDT''用于/proc/ldt文件;
或/proc/lpsinfo文件的''PLPI'';
或者'/PLST''用于/proc/lstatus文件;
或/"PLU"用于/proc/lusage文件;
或/"PLWG"用于/proc/gwindows文件;
或/"PLWI"用于/proc/lwpsinfo文件;
或者'/PLWS''用于/proc/lwpstatus文件;
或者'/PLWU''用于/proc/lwpusage文件;
或者'/PLWX''用于/proc/xregs文件;
或者'/PMAP''用于/proc映射文件(map);
或者'/PMEM''用于/proc内存映像文件;
或者'/PNTF''用于/proc进程通知程序文件;
或者'/POBJ'用于/proc/object文件;
或者'/PODR'用于/proc/object目录;
或"POLP"用于旧格式/proc轻量级处理文件;
或"POPF"用于旧格式/proc PID文件;
或"POPG"用于旧格式/proc页面数据文件;
或SYSV命名管道的"PORT";
或者'/PREG''用于/proc寄存器文件;
或者'/PRMP''用于/proc/rmap文件;
或者'/PRTD''用于/proc根目录;
或者'/PSGA''用于/proc/sigact文件;
或者'/PSIN''用于/proc/psinfo文件;
或者'/PSTA'用于/proc状态文件;
或"PSXSEM"用于POSIX信号量文件;
或"PSXSHM"用于POSIX共享内存文件;
或者"/PTS"用于/dev/pts文件;
或者'/PUSG'用于/proc/usage文件;
或者'/PW''用于/proc/watch文件;
或者'/PXMP''用于/proc/xmap文件;
或"REG"用于常规文件;
或"SMT"用于共享内存传输文件;
或"STSO"用于流套接字;
或"UNNM"用于未命名的类型文件;
或"XNAM"用于未知类型的OpenServer Xenix特殊文件;
或"XSEM"用于OpenServer Xenix信号量文件;
或"XSD"用于OpenServer Xenix共享数据文件;
如果相应的名称未知,则为四个类型数字八位字节。
FILE-ADDR 文件地址
当f指定为+f时,包含内核文件结构地址;
FCT 文件引用计数
包含c指定为+f时内核文件结构中的文件引用计数;
FILE-FLAG 文件标志
当g或G被指定为+f时,该字段包含内核文件结构的f_flag [s]成员的内容和内核的每进程打开文件标志(如果可用); 'G'使它们以十六进制显示; 'g',作为简称;可以显示两个列表,其中的条目以逗号分隔,列表以分号(";")分隔;第一个列表可能包含下表中f_flag [s]值的简写名称:
•AIO 异步I / O(例如,FAIO)
•AP 附加
•ASYN 异步I / O(例如,FASYNC)
•BAS 块,测试和设置正在使用中
•BKIU 如果在使用中阻止
•BL 使用块偏移
•BSK 块搜索
•CA copy避免
•CIO 并发I / O.
•CLON 克隆
•CLRD CL阅读
•CR 创建
•DF 推迟
•DFI 推迟IND
•DFLU 数据刷新
•DIR 直接
•DLY 延迟
•DOCL 做克隆
•DSYN 仅数据完整性
•DTY 必须是目录
•EVO 仅限活动
•EX 为exec开放
•EXCL 独家开放
•FSYN 同步写入
•GCDF 在unp_gc()期间延迟(AIX)
•GCMK unp_gc()期间的标记(AIX)
•GTTY 通过/dev/tty访问
•HUP HUP正在进行中
•KERN 内核
•KIOC 内核发布的ioctl
•LCK 锁定
•LG 大文件
•MBLK 流消息块
•MK 标志
•MNT 安装
•MSYN 多路复用同步
•NATM 不更新atime
•NB 非阻塞I / O.
•NBDR 没有BDRM检查
•NBIO SYSV无阻塞I / O.
•NBF n缓冲有效
•NC 没有缓存
•ND 没有延迟
•NDSY 无数据同步
•NET 网络
•NFLK 不遵循链接
•NMFS NM文件系统
•NOTO 禁用后台停止
•NSH 没有分享
•NTTY 没有控制TTY
•OLRM OLR镜像
•PAIO POSIX异步I / O.
•PP POSIX管道
•R 读
•RC 文件和记录锁定缓存
•REV 被撤销
•RSH 共享读取
•RSYN 读同步
•RW 读写访问权限
•SL 共享锁
•SNAP 熟快照
•SOCK 插座
•SQSH Sequent共享集打开
•SQSV Sequent SVM设置为打开
•SQR Sequent在打开时设置修复
•SQS1 Sequent完全共享打开
•SQS2 Sequent部分共享打开
•STPI 停止I / O.
•SWR 同步读取
•SYN 写入时的文件完整性
•TCPM 避免TCP冲突
•TR 截断
•W 写
•WKUP 并行I / O同步
•WTG 并行I / O同步
•VH vhangup待定
•VTXT 虚拟文本
•XL 独家锁
这个名称列表来自方言头文件
第二个列表(分号后)可能包含此表中内核每进程打开文件标志的简写名称:
ALLC 分配
BR 已读取该文件
BHUP 活动由SIGHUP停止
BW 文件已经写好了
CLSG 关闭
CX close-on-exec(参见fcntl(F_SETFD))
LCK 已应用锁定
MP 内存映射
OPIP 未决 - 正在进行中
RSVW 保留等待
SHMT UF_FSHMAT集(AIX)
USE 使用中(多线程)
NODE-ID 节点ID
(或某些方言的INODE-ADDR)当n被指定为+f时,包含文件节点的唯一标识符(通常是内核vnode或inode地址,但偶尔也会是设备和节点号的串联);
DEVICE 设备
包含设备编号,以逗号分隔,用于特殊字符,块特殊,常规,目录或NFS文件;
或"内存"用于Tru64 UNIX下的内存文件系统节点;
或Solaris套接字流的私有数据区的地址;
或标识文件的内核引用地址(例如,内核引用地址可用于FIFO)。
或Linux AX.25套接字设备的基本地址或设备名称。
通常只显示Tru64 UNIX内核地址的低三十二位。
SIZE, SIZE/OFF, or OFFSET 大小/偏移量
是文件的大小或文件偏移量(以字节为单位)。仅当该列可用时,才会在此列中显示该值。Lsof显示任何值- 大小或偏移量- 适用于文件类型和lsof的版本。
在某些UNIX方言中,lsof无法从其内核数据源获取准确或一致的文件偏移信息,有时仅用于特定类型的文件(例如,套接字文件)。在其他情况下,文件没有真正的大小- 例如,套接字,FIFO,管道- 所以lsof显示它们的大小,它在内核缓冲区描述符中找到的内容量(例如,套接字缓冲区大小计数或TCP/IP窗口大小。)请参阅lsof常见问题解答(FAQ部分给出其位置。)更多信息。
文件大小以十进制显示;如果偏移量包含8位或更少,则偏移量通常以十进制显示,带有前导"0t";十六进制,如果长度超过8位,则带有前导"0x"。(有关8可能默认为某个其他值的信息,请参阅-o o选项说明。)
因此,当列可包含大小和偏移量(即,其标题为SIZE/OFF)时,前导"0t"和"0x"标识偏移量。
如果指定了-o选项,则lsof始终显示文件偏移量(如果没有可用的偏移量,则不显示任何内容)并标记OFFSET列。如上所述,偏移始终以"0t"或"0x"开始。
lsof用户可以使用-o o选项控制从"0t"到"0x"的切换。有关更多信息,请参阅其说明。
如果指定了-s选项,则lsof始终显示文件大小(如果没有可用大小,则不显示任何内容)并标记列SIZE。-o和-s选项是互斥的;它们不能同时指定。
对于没有固定大小的文件- 例如,不驻留在磁盘设备上- 如果文件在定义文件的内核结构中可用,则lsof将显示有关文件当前大小或位置的适当信息。
NLINK 文件链接计数
包含指定+L时的文件链接计数;
NODE 文件节点号
是本地文件的节点号;
或服务器主机中NFS文件的inode编号;
或Internet协议类型- 例如,''TCP'';
或"STR"作为流;
或者''CCITT''用于HP-UX x.25插槽;
或Linux AX.25套接字设备的IRQ或inode编号。
NAME 名称
是文件所在的挂载点和文件系统的名称;
或者名称选项中指定的文件的名称(在解析任何符号链接之后);
或特殊字符或块特殊设备的名称;
或网络文件的本地和远程Internet地址;本地主机名或IP号后面跟冒号(':'),端口,'' - >''和两部分远程地址; IP地址可以报告为数字或名称,具体取决于+|-M,-n和-P选项;冒号分隔的IPv6号码用方括号括起来; IPv4 INADDR_ANY和IPv6 IN6_IS_ADDR_UNSPECIFIED地址以及零端口号由星号('*')表示; UDP目标地址之后可以是自上一个数据包发送到目的地以来经过的时间量; TCP,UDP和UDPLITE远程地址后面可能跟着括号中的TCP/TPI信息- 状态(例如,''(ESTABLISHED)'',''(未绑定)''),队列大小和窗口大小(并非所有方言) - 以类似于netstat(1)报告的方式;有关状态,队列大小和窗口大小的更多信息,请参阅OUTPUT FOR OTHER PROGRAMS中的-T选项说明或TCP/TPI字段的说明;
或UNIX域套接字的地址或名称,可能包括流克隆设备名称,文件系统对象的路径名,本地和外部内核地址,套接字对信息以及绑定的vnode地址;
或NFS文件的本地和远程安装点名称;
或"STR",后跟流名称;
或流字符设备名称,后跟" - >"和流名称或流模块名称列表,用" - >"分隔;
或者''STR:''后跟SCO OpenServer流设备和模块名称,用' - >'分隔;
或系统目录名称,'' - '',以及lsof的路径名的许多组件可以在内核的名称缓存中找到所选方言(有关更多信息,请参阅内核名称缓存部分。);
或者''PIPE->'',后跟Solaris内核管道目标地址;
或者''COMMON:'',后跟vnode设备信息结构的设备名,用于Solaris公共vnode;
或地址族,后跟斜杠("/"),后跟十四个以逗号分隔的非互联网原始套接字地址字节;
或HP-UX x.25本地地址,后跟虚拟连接号(如果有),后跟远程地址(如果有);
或"'(死)''用于解除关联的Tru64 UNIX文件- 通常是已用TIOCNOTTY ioctl标记并由守护进程关闭的终端文件;
或者''rd =
或者'/clone n:/dev/event''用于/dev/event设备的SCO OpenServer文件克隆,其中n是文件的次设备号;
或者''(socketpair:n)''用于Solaris 2.6,8,9或10 UNIX域套接字,由socketpair(3N)网络函数创建;
或者"没有PCB"用于没有与之关联的协议块的套接字文件,如果已经禁用了套接字上的发送,则可选地后面跟着'',CANTSENDMORE',或者如果接收到,则接收'',CANTRCVMORE''套接字已被禁用(例如,通过shutdown(2)功能);
或者以
或者''dgram''或''stream''用于UnixWare 7.1.1及以上类型的内核UNIX域套接字,后跟冒号(':')和本地路径名(如果可用),后跟'' - >''和十六进制的远程路径名或内核套接字地址(如果可用);
或者Linux SCTP套接字的关联值,关联索引,端点值,本地地址,本地端口,远程地址和远程端口;
或''protocol:''后跟Linux套接字的协议属性。
对于支持''namefs''文件系统的方言,允许使用fattach(3C)将一个文件附加到另一个文件,lsof将向NAME添加''(FA:
对于打开的Solaris 10文件,Lsof可以在NAME列中添加两个括号注释:如果lsof认为可疑准确度的路径名称为''(?)'';如果指定了-X选项并且lsof检测到打开文件的路径名已被删除,则"'(已删除)''。有关这些NAME列添加的更多信息,请参阅lsof常见问题解答(常见问题解答部分给出其位置。)。
LOCKS 锁
Lsof无法在单个字符中充分报告各种UNIX方言文件锁。它在单个字符中报告的内容是它在内核中找到的信息与报告格式的限制之间的折衷。
此外,当进程在文件上保存多个字节级锁时,lsof仅报告它遇到的第一个锁的状态。如果它是字节级锁定,则锁定字符将以小写形式报告- 即"r","w"或"x" - 而不是报告为完整文件锁定的大写等效项。
通常lsof只能报告本地进程对本地文件持有的锁。当本地进程在远程安装(例如,NFS)文件上设置锁定时,远程服务器主机通常记录锁定状态。Solaris是一个例外- 在2.3的某些补丁级别,在2.4以上的所有版本中,Solaris内核记录有关本地结构中远程锁的信息。
Lsof在报告某些UNIX方言的锁时遇到问题。有关详细信息,请参阅本手册页的BUGS部分或lsof FAQ(常见问题解答部分给出其位置。)。
OUTPUT FOR OTHER PROGRAMS 其他计划的输出
当指定-F选项时,lsof生成适合于由另一个程序处理的输出- 例如,awk或Perl脚本或C程序。
每个信息单元在一个字段中输出,该字段用前导字符标识并由NL(012)终止(如果指定了0(零)字段标识符字符则为NUL(000)。)该字段的数据如下在字段识别字符之后立即延伸到字段终止符。
可以将字段输出视为进程和文件集。进程集以标识符为"p"的字段开始(对于进程标识符(PID))。它会延伸到下一个PID字段的开头或进程的第一个文件集的开头,以先到者为准。进程集中包括标识命令的字段,进程组标识(PGID)编号,任务(线程)ID(TID)以及用户标识(UID)编号或登录名。
文件集以标识符为"f"的字段开头(对于文件描述符)。接下来是描述文件访问模式,锁定状态,类型,设备,大小,偏移量,inode,协议,名称和流模块名称的行。它会延伸到下一个文件或进程集的开头,以先到者为准。
当使用0(零)字段标识符字符选择NUL(000)字段终止符时,lsof以NL(012)字符结束每个进程和文件集。
Lsof总是产生一个字段,即PID("p")字段。可以在-F选项后面的字段标识符字符列表中可选地声明所有其他字段。当字段选择字符标识lsof通常不列出的项目时- 例如,用-R选择的PPID - 字段字符的规范- 例如,'-FR'' - 也选择项目的列表。
完全可以选择一组不容易被解析的字段- 例如,如果未选择字段描述符字段,则可能难以识别文件集。为了帮助您避免这种困难,lsof支持-F选项;它使用NL终结符选择所有字段的输出(-F0选项对选择具有NUL终结符的所有字段的输出)。出于兼容性原因,-F和-F0都不选择原始设备字段。
这些是lsof将产生的领域。首先列出的单个字符是字段标识符。
a:文件访问模式
c:进程命令名称(proc或用户结构中的所有字符)
C:文件结构共享计数
d:文件的设备字符代码
D:文件的主要/次要设备号(0x <十六进制>)
f:文件描述符(始终选中)
F:文件结构地址(0x <十六进制>)
G:文件flaGs(0x <十六进制>;如果+ fg后跟名称)
g:进程组ID
i:文件的inode编号
K:tasK ID
k:链接数
l:文件的锁定状态
L:进程登录名
m:重复输出之间的标记
M:任务comMand名称
n:文件名,注释,Internet地址
N:节点标识符(ox <十六进制>
o:文件的偏移量(十进制)
p:进程ID(始终选中)
P:协议名称
r:原始设备号(0x <十六进制>)
R:父进程ID
s:文件大小(十进制)
S:文件的流识别
t:文件的类型
T:由前缀标识的TCP / TPI信息('='是前缀的一部分):
QR = <读取队列大小>
QS = <发送队列大小>
SO = <套接字选项和值>(并非所有方言)
SS = <套接字状态>(不是所有方言)
ST = <连接状态>
TF =
WR = <窗口读取大小>(不是所有方言)
WW = <窗口写入大小>(并非所有方言)
(不报告所有受支持的UNIX方言的TCP / TPI信息。-T选项的-h或 - ?help输出将显示可以请求的TCP / TPI报告。)
u:处理用户ID
z:Solaris 10和更高版本的区域名称
Z:SELinux安全上下文(禁用SELinux时禁止)
0:使用NUL字段终止符代替NL
1-9:特定于方言的字段标识符(-F?的输出标识要在特定于方言的字段中找到的信息。)
您可以通过指定-F来获取有关这些字符及其描述的在线帮助信息。选项对。(按照shell的要求转义'?'字符。)有关字段内容的更多信息,请参见OUTPUT部分。
例如,''-F pcfn''将用NL字段选择进程ID('p'),命令名('c'),文件描述符('f')和文件名('n')字段终结者角色; ''-F pcfn0''用NUL(000)字段终结符字符选择相同的输出。
Lsof不会为每个进程或文件集生成所有字段,只会生成可用的字段。某些字段是互斥的:文件设备字符和文件主要/次要设备号;文件inode编号和协议名称;文件名和流识别;文件大小和偏移量。这些互斥集合中的一个或另一个成员将出现在字段输出中,但不会出现在两者中。
通常,lsof以NL(012)字符结束每个字段。可以指定0(零)字段标识符字符以将字段终止符字符改变为NUL(000)。例如,使用xargs(1)或使用其引用机制可能不容易处理字段输出中的字符范围的程序,NUL终止符可能更容易处理。当使用NUL字段终止符时,lsof以NL(012)结束每个进程和文件集。
生成可以处理lsof字段输出的程序的三个辅助工具包含在lsof发行版中。第一个是C头文件lsof_fields.h,它包含字段标识字符的符号,用于将它们存储在表中的索引,以及可以编译成程序的解释字符串。Lsof使用此头文件。
辅助工具是一组处理字段输出的示例脚本,用awk,Perl 4和Perl 5编写。它们位于lsof发行版的scripts子目录中。
第三个帮助是用于lsof测试套件的C库。测试套件用C语言编写,并使用字段输出来验证lsof的正确操作。该库可以在lsof发行版的tests/LTlib.c文件中找到。该库使用急救,即lsof_fields.h头文件。
BLOCKS AND TIMEOUTS 块和超时
Lsof可以被它使用的一些内核函数阻塞--lstat(2),readlink(2)和stat(2)。这些函数在内核中停滞,例如,当挂载的NFS文件系统所在的主机变得不可访问时。
Lsof试图用计时器和子进程来破坏这些块,但这些技术并不完全可靠。当lsof确实设法打破一个块时,它将报告中断并显示错误消息。可以使用-t和-w选项抑制消息。
可以使用-h或- ?显示默认超时值。选项,可以使用-S [t]选项进行更改。t的最小值是2秒,但是你应该避免使用较小的值,因为系统响应速度慢会导致短暂的超时意外到期,并且可能会在产生任何输出之前停止lsof。
当lsof在访问已挂载的文件系统信息期间必须打破一个块时,它通常会继续,尽管可用于显示有关打开文件的信息较少。
当使用可能通过指定-O选项阻止的内核函数时,也可以指示Lsof以避免计时器和子进程的保护。虽然这将允许lsof以较少的开销启动,但它会将lsof完全暴露给可能阻止它的内核情况。谨慎使用此选项。
AVOIDING KERNEL BLOCKS 避免内核块
您可以使用-b选项告诉lsof避免使用会阻塞的内核函数。一些注意事项适用。
首先,使用此选项通常要求系统提供备用设备编号,以代替lsof通常使用lstat(2)和stat(2)内核函数获得的设备编号。有关备用设备编号的详细信息,请参阅"备用设备编号"部分。
其次,除非它们是文件系统名称,否则不能为lsof指定名称。这是因为lsof需要知道lsof选项中列出的文件的设备和inode数量,而-b选项阻止lsof获取它们。此外,由于lsof仅具有用于具有替换的文件系统的设备编号,因此其在文件系统上定位文件的能力完全取决于替换的可用性和准确性。如果没有可用的替代项,或者它们不正确,lsof将无法在指定的文件系统上找到文件。
第三,如果lsof从系统的挂载表中获取的文件系统目录的名称是符号链接,则lsof将无法解析链接。这是因为-b选项导致lsof避免使用它来解析符号链接的内核readlink(2)函数。
最后,使用-b选项会导致lsof在需要使用-b选项指示它避免的内核函数时发出警告消息。您可以通过指定-w选项来禁止显示这些消息,但如果这样做,您将看不到警告消息中报告的备用设备号。
ALTERNATE DEVICE NUMBERS 备用设备编号
在某些方言中,当lsof因为无法通过lstat(2)和stat(2)内核函数获取有关已安装文件系统的信息而破坏块时,或者因为您指定了-b选项时,lsof可以获得一些系统挂载表中所需的信息- 设备编号和可能的文件系统类型。如果可能,lsof将报告它获得的设备号。(您可以通过指定-w选项来禁止报告。)
如果您的挂载表支持包含选项字段的/etc/mtab或/etc/mnttab文件,则可以通过为其选项中没有挂载点的挂载点添加"dev = xxxx"字段来协助此过程字符串。注意:您必须能够编辑该文件- 即,某些挂载表(如最近的Solaris/etc/mnttab或Linux/proc/mounts)是只读的,无法修改。
如果您的方言支持,您也可以使用+m和+m m选项提供设备编号。检查lsof的-h或- 的输出?用于查看+m和+m m选项是否可用的选项。
字段的"xxxx"部分是文件系统设备号的十六进制值。(请参阅lstat(2)和stat(2)函数输出的st_dev字段以获取文件系统的相应值。)以下是Sun Solaris 2.6/etc/mnttab中通过NFS远程安装的文件系统的示例:
nfs ignore,noquota,dev = 2a40001
在mount表文件中包含''dev = xxxx''条目是有利的,特别是对于从远程NFS服务器安装的文件系统。当远程服务器崩溃并且您想通过在其中一个客户端上运行lsof来识别其用户时,lsof可能无法从文件系统的lstat(2)和stat(2)函数获得输出。如果它可以从挂载表中获取文件系统的设备号,则它将能够显示在崩溃的NFS服务器上打开的文件。
某些不使用ASCII/etc/mtab或/etc/mnttab文件作为挂载表的方言仍可在其内部挂载表中提供备用设备编号。这包括AIX,Apple Darwin,FreeBSD,NetBSD,OpenBSD和Tru64 UNIX。
Lsof知道如何获取这些方言的替代设备号,并在阻止文件系统lstat(2)或stat(2)的尝试时使用它。
如果您不确定您的方言是否从其挂载表中为文件系统提供备用设备号,请使用此lsof咒语来查看它是否报告任何备用设备号:
lsof -b
查找标准错误文件警告消息,开始"假设"dev = xxxx"来自......"。
KERNEL NAME CACHE
对于大多数文件系统类型(不包括AFS),Lsof能够检查内核的名称缓存或使用其他内核工具(例如,Tru64 UNIX下的ADVFS 4.x tag_to_path()函数),并提取最近使用的路径名组件从中。(AFS文件系统路径查找不使用内核的名称缓存;某些Solaris VxFS文件系统操作显然也不使用它。)
Lsof报告它在NAME列中找到的完整路径。如果lsof无法报告路径中的所有组件,它会在NAME列中报告文件系统名称,后跟一个空格,两个" - "字符,另一个空格以及它所在的名称组件,由'/分隔'性格。
当lsof以重复模式运行时- 即,在指定了-r选项的情况下- 它可以报告同一文件的路径名称组件的程度可能因周期而异。这是因为其他正在运行的进程可能导致内核从其名称缓存中删除条目并将其替换为其他条目。
Lsof使用内核名称缓存来标识文件的路径可能导致它在某些情况下报告不正确的组件。当内核名称缓存使用设备和节点号作为密钥(例如,SCO OpenServer)并且重用快速变化的文件系统上的密钥时,可能发生这种情况。如果UNIX方言的内核在取消链接时没有清除文件的名称缓存条目,则lsof可能会在缓存中找到对错误条目的引用。lsof FAQ(FAQ部分给出了它的位置。)有关于这种情况的更多信息。
Lsof可以报告这些方言的路径名称组件:
FreeBSD的
HP-UX
Linux的
NetBSD的
下一步
OpenBSD系统
OPENSTEP
SCO OpenServer
SCO|Caldera UnixWare
的Solaris
Tru64 UNIX
Lsof无法报告这些方言的路径名称组件:
AIX
如果您想知道为什么lsof无法报告某些方言的路径名称组件,请参阅lsof常见问题解答(常见问题解答部分给出了它的位置。)
DEVICE CACHE FILE 设备缓存文件
使用stat(2)函数检查/dev(或/devices)节点树的所有成员可能非常耗时。更重要的是,lsof需要的信息- 设备号,inode号和路径- 很少改变。
因此,lsof通常维护缓存/dev(或/devices)信息的ASCII文本文件(例外:基于/proc的Linux lsof,不需要它。)构建lsof的本地系统管理员可以控制设备缓存文件的方式形成路径,从这些选项中选择:
-D选项的路径;
来自环境变量的路径;
全系统路径;
个人路径(默认);
个人路径,由环境变量修改。
请教-h,-D的输出? , 要么-?有关当前设备缓存支持状态的帮助选项。帮助输出列出了对当前lsof调用有效的默认读取模式设备缓存文件路径。-D?选项输出列出只读和写入设备高速缓存文件路径,任何适用环境变量的名称以及个人设备高速缓存路径格式。
Lsof可以检测到当前设备高速缓存文件已被完整性检查意外或恶意修改,包括计算和验证文件内容上的16位循环冗余校验(CRC)和。当lsof检测到文件出错时,它会发出警告并尝试删除当前缓存文件并创建新副本,但仅限于该进程可以合法写入的路径。
lsof进程可能尝试读取设备缓存文件的路径可能与它可以合法写入的路径不同。因此,当lsof感知到它需要更新设备缓存文件时,它可以选择不同的路径来从读取不正确或过时版本的路径写入它。
如果可用,-Dr选项将禁止写入新的设备缓存文件。(在没有路径名参数的情况下指定它时始终可用。)
将新设备添加到系统时,可能需要重新创建设备缓存文件。由于lsof将设备缓存文件的mtime与/dev(或/devices)目录的mtime和ctime进行比较,因此通常会检测到已添加新设备;在这种情况下,lsof会发出警告消息并尝试重建设备缓存文件。
每当lsof写入设备缓存文件时,它将其所有权设置为执行进程的实际UID,并将其权限模式设置为0600,这限制了其对文件所有者的读取和写入。
LSOF允许影响设备缓存文件访问
lsof可执行文件的两个权限会影响其访问设备缓存文件的能力。安装lsof时,权限由本地系统管理员设置。
第一个也是罕见的权限是setuid-root。它在执行lsof时生效;它的有效UID是root,而它的真实(即登录用户的UID)则不是。lsof发行版建议这些方言的版本运行setuid-root。
HP-UX 11.11和11.23
Linux的
第二个和更常见的权限是setgid。当lsof进程的有效组标识号(GID)设置为可以访问内核存储器设备的一个时,它就会生效- 例如,''kmem'',''sys''或''system''。
具有setgid权限的lsof进程通常在访问内核内存设备后放弃权限。当它这样做时,lsof可以允许更自由的设备缓存路径形成。lsof发行版建议这些方言的版本运行setgid并允许放弃setgid权限。
AIX 5. [12]和5.3-ML1
Apple Darwin 7.x Power Macintosh系统
FreeBSD 4.x,4.1x,5.x和[6789] .x用于基于x86的系统
基于Alpha,AMD64和Sparc64的系统的FreeBSD 5.x,[6789] .x和1 [012] .8
HP-UX 11.00
基于Alpha,x86和SPARC的系统的NetBSD 1. [456],2.x和3.x.
NEXTSTEP 3. [13]对于NEXTSTEP架构
OpenBSD 2. [89] 3. [0-9]用于基于x86的系统
OPENSTEP 4.x
适用于基于x86的系统的SCO OpenServer Release 5.0.6
SCO |适用于基于x86的系统的Caldera UnixWare 7.1.4
Solaris 2.6,8,9和10
Tru64 UNIX 5.1
(注意:对于AIX 5L及更高版本的lsof,如果使用其-X选项,则需要setuid-root权限。)
这些方言的Lsof不支持设备缓存,因此赋予可执行文件的权限不适用于设备缓存文件。
Linux的
来自-D选项的设备缓存文件路径
-D选项提供有限的方法来指定设备缓存文件路径。它的?函数将报告lsof将使用的只读和写入设备缓存文件路径。
当-D b,r和u函数可用时,您可以使用它们来请求在特定位置构建缓存文件(b [path]);读但不重建(r [路径]);或阅读和重建(你[路径])。b,r和u函数在某些条件下受到限制。当lsof进程是setuid-root时,它们受到限制。使用r函数指定的路径始终是只读的,即使它可用。
当lsof进程运行setgid并且lsof没有放弃setgid权限时,b,r和u函数也受到限制。(有关通常不放弃其setgid权限的实现列表,请参阅影响设备缓存文件访问权限的LSOF权限。)
另外一个-D函数i(用于忽略)始终可用。
如果可用,b函数告诉lsof使用stat(2)函数从内核读取设备信息,并在指定的路径上构建设备缓存文件。
如果可用,r函数告诉lsof读取设备缓存文件,但不更新它。当路径参数伴随-Dr时,它会命名设备缓存文件路径。如果在没有路径名参数的情况下指定r函数,则r函数始终可用。如果lsof未运行setuid-root并且放弃其setgid权限,则r函数可能附带路径名参数。
如果可用,u函数告诉lsof尝试读取和使用设备缓存文件。如果它无法读取文件,或者它发现文件内容不正确或过时,它将从内核读取信息,并尝试写入设备缓存文件的更新版本,但仅限于它考虑的路径合法的lsof进程有效和真正的UID。
来自环境变量的设备缓存路径
Lsof设备缓存文件的第二选择是LSOFDEVCACHE环境变量的内容。如果lsof进程是setuid-root,或者进程的真实UID是root,则它避免了这种选择。
另一个限制适用于从LSOFDEVCACHE环境变量获取的设备缓存文件路径:如果lsof进程未放弃其setgid权限,则lsof将不会将设备缓存文件写入路径。(有关不放弃其setgid权限的实现的信息,请参阅影响设备缓存文件访问权限的LSOF权限。)
本地系统管理员可以在构建lsof时禁用LSOFDEVCACHE环境变量的使用或更改其名称。请教-D的输出?用于环境变量的名称。
系统广泛的设备缓存路径
在构建lsof时,本地系统管理员可以选择拥有系统范围的设备缓存文件。当系统启动或/dev或/devices的内容发生变化时,该文件通常由特殊的系统管理程序构成。如果已定义,则是lsof的第三个设备缓存文件路径选择。
您可以通过检查lsof help选项输出(即-h或- 的输出)来判断系统范围的设备缓存文件对本地安装是否有效。选项。
默认情况下,Lsof永远不会写入系统范围的设备缓存文件路径。必须在根拥有的过程中使用-D函数显式命名。写入文件后,该过程必须将其权限模式更改为0644(所有者读取和所有者写入,组读取和其他读取)。
个人设备缓存路径(默认)
lsof发行版的默认设备缓存文件路径是记录在执行lsof的真实UID的主目录中的路径。添加到主目录的是.lsof_hostname形式的第二个路径组件。
这是lsof的第四个设备缓存文件路径选择,通常是默认设置。如果在构建lsof时定义了系统范围的设备缓存文件路径,则当lsof无法找到系统范围的设备缓存文件时,将应用此第四个选项。这是lsof在读取设备缓存文件时使用两个路径的唯一时间。
第二个组件的主机名部分是执行主机的基本名称,由gethostname(2)返回。基本名称定义为第一个"。"之前的字符。在gethostname(2)输出中,或者如果它不包含"。",则输出所有gethostname(2)。
设备高速缓存文件属于用户ID,并且仅由用户ID可读和写入- 即,其模式是0600.执行lsof的给定主机上的每个不同的真实用户ID具有不同的设备高速缓存文件。路径的主机名部分区分NFS挂载的主目录中的设备高速缓存文件,其中设备高速缓存文件是从几个不同的主机写入的。
此方法形成的个人设备缓存文件路径表示lsof将尝试读取的设备缓存文件,如果不存在或者其内容不正确或过时,将尝试写入。
没有路径名参数的-Dr选项将禁止写入新的设备缓存文件。
-D?选项将列出用于构造个人设备缓存文件的格式规范。格式规范中使用的转换在lsof发行版的00DCACHE文件中描述。
修改过的个人设备缓存路径
如果在构建lsof时由本地系统管理员定义此选项,则可以使用LSOFPERSDCPATH环境变量内容来添加个人设备缓存文件路径的组件。
LSOFPERSDCPATH变量内容插入到本地系统管理员标记的位置的路径中,并在方言的machine.h头文件的HASPERSDC格式规范中进行"%p"转换。(它位于默认lsof发行版中的主目录之后。)
因此,例如,如果LSOFPERSDCPATH包含"LSOF",则主目录为"/Homes/abe",主机名为"lsof.itap.purdue.edu",HASPERSDC格式为默认值('%h /%p.lsof_%L''),修改后的个人设备缓存文件路径为:
/Homes/abe/LSOF/.lsof_vic
当lsof进程是setuid-root或进程的实际UID是root时,将忽略LSOFPERSDCPATH环境变量。
如果lsof进程未放弃setgid权限,则Lsof将不会写入已修改的个人设备缓存文件路径。(有关通常不放弃其setgid权限的实现列表,请参阅影响设备缓存文件访问权限的LSOF权限。)
例如,如果要通过使用LSOFPERSDCPATH环境变量来命名它来创建个人设备缓存文件路径的子目录,并且lsof没有放弃其setgid权限,则必须允许lsof创建设备缓存文件在标准的个人路径上,使用shell命令将它们移动到子目录中。
本地系统管理员可以:在构建lsof时禁用此选项;将环境变量的名称从LSOFPERSDCPATH更改为其他名称;更改HASPERSDC格式以在其他位置包含个人路径组件;或完全排除个人路径组件。请教-D的输出?环境变量名称和HASPERSDC格式规范的选项。
DIAGNOSTICS 诊断
使用标准错误文件上的消息标识错误。
如果检测到任何错误,Lsof返回一(1),包括无法找到命令名称,文件名,Internet地址或文件,登录名,NFS文件,PID,PGID或要求列出的UID。如果指定了-V选项,则lsof将指示未能列出的搜索项。
如果未检测到错误,并且能够列出有关所有指定搜索参数的一些信息,则返回零(0)。
当lsof无法打开对/dev(或/devices)或其某个子目录的访问权限,或者使用stat(2)获取其中文件的信息时,它会发出警告消息并继续。lsof将在/dev(或/devices)中发出有关无法访问的文件的警告消息,在其帮助输出中显示- 请求-h或> B - ?选项- 使用消息:
启用了无法访问/dev警告。
可以使用-w选项抑制警告消息。当通过WARNDEVACCESS定义的设置编译lsof时,系统管理员也可能已禁止它。在这种情况下,帮助选项的输出将包含以下消息:
无法访问/dev警告被禁用。
lsof创建工作设备缓存文件后,无法访问的设备警告消息通常会消失。
EXAMPLES 例子
有关更全面的示例,请参阅lsof发行版的00QUICKSTART文件。
要列出所有打开的文件,请使用:
lsof的
要列出所有打开的Internet,x.25(HP-UX)和UNIX域文件,请使用:
lsof -i -U
要列出PID为1234的进程正在使用的所有打开的IPv4网络文件,请使用:
lsof -i 4 -a -p 1234
假设UNIX方言支持IPv6,要仅列出打开的IPv6网络文件,请使用:
lsof -i 6
要在主机wonderland.cc.purdue.edu的端口513,514或515上使用任何协议列出所有文件,请使用:
lsof -i @ wonderland.cc.purdue.edu:513-515
要在mace.cc.purdue.edu的任何端口上使用任何协议列出所有文件(cc.purdue.edu是默认域),请使用:
lsof -i @mace
要列出登录名"abe",或用户ID 1234,或进程456,进程123或进程789的所有打开文件,请使用:
lsof -p 456,123,789 -u 1234,abe
要列出设备/dev/hd4上的所有打开文件,请使用:
lsof/dev/hd4
要查找打开/u/abe/foo的进程,请使用:
lsof/u/abe/foo
要将SIGHUP发送到打开/u/abe/bar的进程,请使用:
kill -HUP'lsof -t/u/abe/bar'
要查找任何打开的文件,包括名为/dev/log的打开的UNIX域套接字文件,请使用:
lsof/dev/log
要在名为/nfs/mount/point且服务器不可访问的NFS文件系统上查找具有打开文件的进程,并假设您的挂载表提供/nfs/mount/point的设备编号,请使用:
lsof -b/nfs/mount/point
要在禁用警告消息的情况下执行上述搜索,请使用:
lsof -bw/nfs/mount/point
要忽略设备缓存文件,请使用:
lsof -Di
要为每个进程获取PID和命令名称字段输出,文件描述符,文件设备编号和每个进程的每个文件的文件inode编号,请使用:
lsof -FpcfDi
要列出每10秒执行登录ID"abe"的lsof命令的每个进程的描述符1和3的文件,请使用:
lsof -c lsof -a -d 1 -d 3 -u abe -r10
要列出运行命令的进程的当前工作目录,该命令长度正好为四个字符且在字符3中具有"o"或"O",请使用-c c选项的此正则表达式形式:
lsof -c /^..o.$/i -a -d cwd
要通过其关联的数字点形式地址查找IP版本4套接字文件,请使用:
lsof [email protected]
要通过关联的数字冒号形式地址查找IP版本6套接字文件(当UNIX方言支持IPv6时),请使用:
lsof -i @ [0:1:2:3:4:5:6:7]
要通过关联的数字冒号形式地址查找IP版本6套接字文件(当UNIX方言支持IPv6时),其中包含一连串的零- 例如,回送地址- 使用:
lsof -i @ [:: 1]
要获得包含当前时间的重复模式标记线,请使用:
lsof -rm ====%T ====
要向前一个标记行添加空格,请使用:
lsof -r"m ====%T ===="
BUGS
由于lsof在搜索打开文件时读取内核内存,因此内核内存的快速更改可能会产生不可预测的结果。
当文件具有多个记录锁时,锁状态字符(在文件描述符之后)是从第一个锁结构的测试派生的,而不是来自可能由多个锁结构描述的各个记录锁的任何组合。
除非使用root set-UID权限安装,否则Lsof无法按名称搜索具有限制访问权限的文件。否则,它仅限于搜索其用户或其set-GID组(如果有)具有访问权限的文件。
原始套接字的目标地址的显示(例如,用于ping)取决于UNIX操作系统。有些方言将目标地址存储在原始套接字的协议控制块中,有些则没有。
Lsof不能总是以与ls(1)相同的方式表示Solaris设备号。例如,lstat(2)和stat(2)函数为安装CD-ROM文件的目录(通常为/cdrom)报告的主设备号和次设备号与它为其报告的设备号不同。安装CD-ROM文件的设备(通常为/dev/sr0)。(Lsof报告目录号码。)
对/proc文件系统的支持仅适用于BSD和Tru64 UNIX方言,Linux和从SYSV R4派生的方言- 例如FreeBSD,NetBSD,OpenBSD,Solaris,UnixWare。
某些/proc文件项- 设备号,inode号和文件大小- 在某些方言中不可用。在/proc文件系统中搜索文件可能需要指定完整路径名。
没有为Linux进程显示文本(txt)文件描述符。除当前工作目录,根目录和数字文件描述符之外的文件的所有条目都标记为mem描述符。
Lsof无法按名称搜索Tru64 UNIX命名管道,因为它们的内核实现lstat(2)会为命名管道返回不正确的设备编号。
由于对内核数据的访问不足或内核数据中的错误,Lsof无法在HP-UX 9.01,10.20和11.00锁上完全或正确报告。有关详细信息,请参阅lsof常见问题解答(常见问题解答部分提供其位置。)。
AIX SMT文件类型是一种制作。它由AIX /usr/include/sys/file.h头文件中未定义类型(15)的文件结构组成。创建此类文件结构的一种方法是运行X客户端,并将DISPLAY变量设置为":0.0:"。
基于/proc的Linux lsof不支持+|-f [cfgGn]选项,因为它不从内核内存中读取内核结构。
ENVIRONMENT 环境
Lsof可以访问这些环境变量。
LANG定义语言区域设置。请参阅setlocale(3)以获取可用于代替LANG的其他变量的名称- 例如,LC_ALL,LC_TYPE等。
LSOFDEVCACHE定义设备缓存文件的路径。有关详细信息,请参阅环境变量中的DEVICE CACHE PATH。
LSOFPERSDCPATH定义修改的个人设备缓存文件路径的中间组件。有关详细信息,请参阅"修改过的个人设备缓存路径"部分。
FAQ 常问问题
可以在lsof发行版的00FAQ文件中找到常见问题及其答案(常见问题解答)。
该文件也可以通过pub/tools/unix/lsofFAQ中lsof.itap.purdue.edu的匿名ftp获得。URL是:
ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
FILES
/dev/kmem内核虚拟内存设备
/dev/mem物理内存设备
/dev/swap系统分页设备
.lsof_hostname lsof的设备缓存文件(后缀,主机名,是gethostname(2)返回的主机名的第一个组件。)
AUTHORS 作者
Lsof由普渡大学的Victor A.Abell
DISTRIBUTION
lsof的最新发布可通过主机lsof.itap.purdue.edu的匿名ftp获得。您可以在pub/tools/unix/lsof目录中找到lsof发行版。
您也可以使用以下URL:
ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof
Lsof也在其他地方被镜像。当您访问lsof.itap.purdue.edu并更改为其pub/tools/unix/lsof目录时,您将获得一些镜像站点的列表。pub/tools/unix/lsof目录还在其镜像文件中包含更完整的列表。谨慎使用镜像- 并非所有镜像都具有最新的lsof修订版。
lsof.itap.purdue.edu上提供了一些预编译的Lsof可执行文件,但不鼓励使用它们- 最好从源代码构建自己的可执行文件。如果您认为必须使用预编译的可执行文件,请阅读pub/tools/unix/lsof/binaries子目录的README文件和分发的00 *文件中出现的注意事项。
有关lsof发行版的更多信息,请参见其README.lsof_
SEE ALSO
并非所有以下手册页都存在于已移植lsof的每个UNIX方言中。
access(2),awk(1),crash(1),fattach(3C),ff(1),fstat(8),fuser(1),gethostname(2),isprint(3),kill(1), localtime(3),lstat(2),modload(8),mount(8),netstat(1),ofiles(8L),perl(1),ps(1),readlink(2),setlocale(3), stat(2),strftime(3),time(2),uname(1)。
修订版4.91 LSOF(8)