Linux lsof 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux lsof 命令。

1、命令简介

lsof:用于显示当前系统打开的文件、套接字等资源的命令。

2、命令语法

lsof [ -?abChlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-e s ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g[s] ] [ -i [i] ] 
[ -k k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ][ -o [o] ] [ -p s ] [ +|-r [t[m]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] 
[ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]

3、命令描述

一个打开的文件可以是常规文件、目录、块特殊文件、字符特殊文件、执行中的文本引用、库、流或网络文件(Internet 套接字、NFS 文件或UNIX 域套接字)。可以通过路径选择特定文件或文件系统中的所有文件。lsof不会生成格式化显示,而是会生成可以由其他程序解析的输出。除了生成单个输出列表外,lsof还可以运行在重复模式下。在重复模式下,它将生成输出,延迟一段时间,然后重复执行输出操作,直到收到中断或退出信号停止。

4、命令选项

选项

描述

-? -h

这两个等效的选项选择一个使用(帮助)输出列表。

当lsof检测到所提供的选项中的错误时,

它将显示这个输出的缩写形式,

然后显示解释每个错误的消息。 。

-a

此选项导致列表选择选项被AND,

如上所述。

-A A

此选项在配置为通过动态模块实现AFS内核代码的系统上可用,

允许lsof用户将A指定为可能找到动态模块的内核地址的备用名称列表文件。

-b

此选项导致lsof避免可能会阻塞的内核函数 - lstat,readlink和stat。

-cc

此选项选择执行以字符c开头的命令的进程的文件列表。

可以使用多个-c选项来指定多个命令。

它们在参与AND选项选择之前

被连接在一个单一的ORed集合中。

+c w

此选项定义与进程关联的UNIX命令的UNIX命令的UNIX命令的UNIX命令的前缀的最大数量,

该前缀将在COMMAND列中打印出来。

-C

此选项禁用了内核名称缓存的路径名称的组成部分的比例。有关更多信息,

请参见名称缓存的缓存部分。

d + s

此选项告诉lsof搜索目录s的所有打开实例,

以及它包含的文件和目录的第一级。

此选项不会进入根目录树s,

并且不会在其中跟随符号链接。

选项+ D D可用于请求对深度的目录树D的搜索

,目录D到根目录。

-d s

此选项选择其描述符在所有s中存在的文件列表,

逗号分隔 - 例如,"1.3"或"6,

cwd,2"。(集合中不应有任何空格。)

-D+D

此选项告诉lsof搜索目录D的所有打开实例,

以及它包含的所有文件和目录,

直到其最大深度。目录D内的符号链接被忽略,

即不被跟随。

-D D

此选项强制lsof使用文件缓存设备。

使用此选项可能被禁止。

+

-f [CfgGn]

-F f

此选项指定一个字符列表f,

用于选择要用另一个程序处理的字段,

并终止每个输出字段的字符。

每个字段被指定为在f中产生一个单独的字符。

-g [s]

此选项选择其编号与所有s中存在的进程数的IDentification进程组(组ID)的文件列表,

例如“123”或“123,456”。

(集合中不应有空格。)

-i [i]

此选项选择其Internet地址

与使用i指定的地址匹配的文件列表。

如果未指定地址,

则此选项选择所有文件

和Internet网络x.25(HP-UX)的列表。

-l

此选项防止将用户ID转换为登录。

当研究用户名不正常或速度太慢时,

也会使用它。

+

-L [L]

-m m

此选项指定内核内存文件c,

而不是/ dev / kmem或/ dev / mem - 例如,

崩溃后的内存转储文件。

+

-M

-not

此选项防止将网络号(小数位)转换为网络文件的主机名。

禁止转换可以加速lsof。

寻找主机名不正常时也很有用。

-NOT

此选项选择NFS文件的列表。

-o

此选项告诉lsof始终在文件中显示位置(偏移量)。

它导致将输出列SIZE / OFF(大小/位置)

替换为OFFSET。注意:在某些UNIX方言中,

lsof无法从其内核数据源获得关于文件位置的准确

或一致信息,有时仅适用于某些类型的文件读取(例如,套接字文件)。

有关位置的更多信息,

请参见lsof常见问题解答(FAQ)部分

(FAQ给出了其位置)。

o o

此选项设置在传递到"0x ..."形式之前,

在文件中的位置的"0t"后要显示的小数位数(o)。

对于o的值为零(无限制),

lsof会使用"0t"形式来进行所有位置输出。

-O

此选项告诉lsof避免使用它

用于避免被一些内核操作阻塞的策略 - 即d。

-p s

此选项选择其编号

在所有逗号分隔的s中存在的进程的文件列表 -

例如,"123"或"123,456"。

多个进程ID编号在一个集合中通过二进制

OR组合在一起,然后参与选择和二进制选项。

-P

此选项防止将端口号转换为网络文件的端口名。

禁用转换可以稍微加速lsof。

在查找主机名不正常时,它也很有用。

+

-r [t]

-R

此选项告诉lsof在PPID列中列出父进程

(父进程ID编号,PPID)的ID编号。

-s

此选项告诉lsof始终显示文件大小。

这导致将输出列SIZE / OFF SIZE替换。

如果文件没有大小,将不会显示任何内容。

-S [T]

此选项为内核函数 - lstat readlink和stat -

指定了一个可选的超时值,

否则可能会导致死锁。

t的最小值为二;默认值为十五;

如果未指定值,则使用默认值。

-T [T]

此选项控制TCP / TPI的信息报告,

也由netstat(1)报告,

其后是网络地址。在正常输出中,

信息出现在括号中,

每个项除状态外都由关键字标识。

-t

此选项指定lsof应生成仅包含进程标识符

和无标题的简洁输出 - 例如,

以便输出可以管道传递到kill。

此选项选择-w。

-u s

此选项选择其名称或

用户ID在所有逗号分隔的s中存在的用户的文件列表

- 例如"abe"或"548,root"。

多个登录和用户ID编号在一个集合中

通过二进制OR组合在一起,

然后参与选择和二进制选项。

-U

此选项选择UNIX域套接字文件的列表。

-v

此选项选择包含lsof信息版本的列表

,包括:修订号;建造日期;

建造者的身份和建造位置;

所使用的编译器的名称;如果可用,

编译器版本号;

用于构建二进制lsof的编译器选项和充电器;

以及系统信息,

通常离开选项-a uname的选项。

-V

此选项指导lsof指出它被要求列出但未找到的项目

- 命令名称,文件名称,

地址或Internet文件,登录名称,

NFS文件,PID,PGID和UID。

当其他选项与二进制AND选项相关联时,

lsof可能不会报告它未能找到搜索项目的情况,

当与AND相关的选项

阻止本地化搜索项的打开文件列表时。

+|-W

授权(+)或禁用(-)抑制警告消息。

构建器lsof可以选择禁用或启用默认警告消息。

默认的警告信息状态显示在选项-h或-?.

可以在警告消息已经启用时禁用它们,

或者在警告消息已经启用时激活它们。

选项-t选择选项-w。

-X

这是一个方言特定的选项。

5、使用示例

1)列出所有打开的文件

# lsof
COMMAND    PID  TID            USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1                 root  cwd       DIR              252,0     4096          2 /
init         1                 root  rtd       DIR              252,0     4096          2 /
init         1                 root  txt       REG              252,0   265848         54 /sbin/init
init         1                 root  mem       REG              252,0    47712     393444 /lib/x86_64-linux-gnu/libnss_files-2.19.so
init         1                 root  mem       REG              252,0    47760     393448 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
init         1                 root  mem       REG              252,0    97296     393438 /lib/x86_64-linux-gnu/libnsl-2.19.so
init         1                 root  mem       REG              252,0    39824     393440 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
init         1                 root  mem       REG              252,0    14664     393401 /lib/x86_64-linux-gnu/libdl-2.19.so
init         1                 root  mem       REG              252,0   252032     393460 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
init         1                 root  mem       REG              252,0   141574     393475 /lib/x86_64-linux-gnu/libpthread-2.19.so
init         1                 root  mem       REG              252,0  1840928     393385 /lib/x86_64-linux-gnu/libc-2.19.so
init         1                 root  mem       REG              252,0    31792     393481 /lib/x86_64-linux-gnu/librt-2.19.so
init         1                 root  mem       REG              252,0    43464     393417 /lib/x86_64-linux-gnu/libjson-c.so.2.0.0
init         1                 root  mem       REG              252,0   134296     393483 /lib/x86_64-linux-gnu/libselinux.so.1
...

kworker/0    5                 root  cwd       DIR              252,0     4096          2 /
kworker/0    5                 root  rtd       DIR              252,0     4096          2 /
kworker/0    5                 root  txt   unknown                                        /proc/5/exe

更多...

2)列出特定用户打开的文件

# lsof -u ubuntu
COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
sshd    1427 ubuntu  cwd    DIR              252,0     4096      2 /
sshd    1427 ubuntu  rtd    DIR              252,0     4096      2 /
sshd    1427 ubuntu  txt    REG              252,0   766784 800542 /usr/sbin/sshd
sshd    1427 ubuntu  mem    REG              252,0    14464 393517 /lib/x86_64-linux-gnu/security/pam_env.so
sshd    1427 ubuntu  mem    REG              252,0    22896 393526 /lib/x86_64-linux-gnu/security/pam_limits.so
sshd    1427 ubuntu  mem    REG              252,0    10320 393530 /lib/x86_64-linux-gnu/security/pam_mail.so
sshd    1427 ubuntu  mem    REG              252,0    10344 393532 /lib/x86_64-linux-gnu/security/pam_motd.so
sshd    1427 ubuntu  mem    REG              252,0    14592 393455 /lib/x86_64-linux-gnu/libpam_misc.so.0.82.0
sshd    1427 ubuntu  mem    REG              252,0    38920 393435 /lib/x86_64-linux-gnu/libnih-dbus.so.1.0.0
sshd    1427 ubuntu  mem    REG              252,0    96280 393437 /lib/x86_64-linux-gnu/libnih.so.1.0.0
sshd    1427 ubuntu  mem    REG              252,0   108480 393390 /lib/x86_64-linux-gnu/libcgmanager.so.0.0.0
sshd    1427 ubuntu  mem    REG              252,0    42864 398327 /lib/x86_64-linux-gnu/security/pam_systemd.so
sshd    1427 ubuntu  mem    REG              252,0    10376 393550 /lib/x86_64-linux-gnu/security/pam_umask.so
sshd    1427 ubuntu  mem    REG              252,0    10288 393524 /lib/x86_64-linux-gnu/security/pam_keyinit.so
sshd    1427 ubuntu  mem    REG              252,0    10344 393529 /lib/x86_64-linux-gnu/security/pam_loginuid.so
sshd    1427 ubuntu  mem    REG              252,0    18752 393540 /lib/x86_64-linux-gnu/security/pam_selinux.so
sshd    1427 ubuntu  mem    REG              252,0    10272 393534 /lib/x86_64-linux-gnu/security/pam_nologin.so
sshd    1427 ubuntu  mem    REG              252,0    18952 393388 /lib/x86_64-linux-gnu/libcap.so.2.24
sshd    1427 ubuntu  mem    REG              252,0    10376 393513 /lib/x86_64-linux-gnu/security/pam_cap.so
sshd    1427 ubuntu  mem    REG              252,0     6112 393535 /lib/x86_64-linux-gnu/security/pam_permit.so
sshd    1427 ubuntu  mem    REG              252,0     6024 393515 /lib/x86_64-linux-gnu/security/pam_deny.so
sshd    1427 ubuntu  mem    REG              252,0    60288 393551 /lib/x86_64-linux-gnu/security/pam_unix.so
sshd    1427 ubuntu  mem    REG              252,0    229

3)找到特定端口上运行的进程

# lsof -i TCP:22
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1053   root    3u  IPv4  13211      0t0  TCP *:ssh (LISTEN)
sshd    1053   root    4u  IPv6  13213      0t0  TCP *:ssh (LISTEN)
sshd    1377   root    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd    1427 ubuntu    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd    1840   root    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)
sshd    1930 ubuntu    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)

4)只列出IPv4和IPv6打开的文件

# lsof -i 4
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient  869            root    6u  IPv4  11754      0t0  UDP *:bootpc
dhclient  869            root   20u  IPv4  11700      0t0  UDP *:26374
sshd     1053            root    3u  IPv4  13211      0t0  TCP *:ssh (LISTEN)
dnsmasq  1372 libvirt-dnsmasq    4u  IPv4  13970      0t0  UDP *:bootps
dnsmasq  1372 libvirt-dnsmasq    6u  IPv4  13973      0t0  UDP 192.168.122.1:domain
dnsmasq  1372 libvirt-dnsmasq    7u  IPv4  13974      0t0  TCP 192.168.122.1:domain (LISTEN)
sshd     1377            root    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd     1427          ubuntu    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd     1840            root    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)
sshd     1930          ubuntu    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)

# lsof -i 6
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient  869 root   21u  IPv6  11701      0t0  UDP *:22830
sshd     1053 root    4u  IPv6  13213      0t0  TCP *:ssh (LISTEN)

5)列出TCP端口范围1 ~ 1024的打开文件

#  lsof -i TCP:1-1024
COMMAND  PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1053            root    3u  IPv4  13211      0t0  TCP *:ssh (LISTEN)
sshd    1053            root    4u  IPv6  13213      0t0  TCP *:ssh (LISTEN)
dnsmasq 1372 libvirt-dnsmasq    7u  IPv4  13974      0t0  TCP 192.168.122.1:domain (LISTEN)
sshd    1377            root    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd    1427          ubuntu    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd    1840            root    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)
sshd    1930          ubuntu    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)

6)用“^”字符排除用户

#  lsof -i -u^root
COMMAND  PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dnsmasq 1372 libvirt-dnsmasq    4u  IPv4  13970      0t0  UDP *:bootps
dnsmasq 1372 libvirt-dnsmasq    6u  IPv4  13973      0t0  UDP 192.168.122.1:domain
dnsmasq 1372 libvirt-dnsmasq    7u  IPv4  13974      0t0  TCP 192.168.122.1:domain (LISTEN)
sshd    1427          ubuntu    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd    1930          ubuntu    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)

7)找出所属文件和命令

#  lsof -i -u user1
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient  869            root    6u  IPv4  11754      0t0  UDP *:bootpc
dhclient  869            root   20u  IPv4  11700      0t0  UDP *:26374
dhclient  869            root   21u  IPv6  11701      0t0  UDP *:22830
sshd     1053            root    3u  IPv4  13211      0t0  TCP *:ssh (LISTEN)
sshd     1053            root    4u  IPv6  13213      0t0  TCP *:ssh (LISTEN)
dnsmasq  1372 libvirt-dnsmasq    4u  IPv4  13970      0t0  UDP *:bootps
dnsmasq  1372 libvirt-dnsmasq    6u  IPv4  13973      0t0  UDP 192.168.122.1:domain
dnsmasq  1372 libvirt-dnsmasq    7u  IPv4  13974      0t0  TCP 192.168.122.1:domain (LISTEN)
sshd     1377            root    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd     1427          ubuntu    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd     1840            root    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)
sshd     1930          ubuntu    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)

8)列出所有网络连接

# lsof -i
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
dhclient  869            root    6u  IPv4  11754      0t0  UDP *:bootpc
dhclient  869            root   20u  IPv4  11700      0t0  UDP *:26374
dhclient  869            root   21u  IPv6  11701      0t0  UDP *:22830
sshd     1053            root    3u  IPv4  13211      0t0  TCP *:ssh (LISTEN)
sshd     1053            root    4u  IPv6  13213      0t0  TCP *:ssh (LISTEN)
dnsmasq  1372 libvirt-dnsmasq    4u  IPv4  13970      0t0  UDP *:bootps
dnsmasq  1372 libvirt-dnsmasq    6u  IPv4  13973      0t0  UDP 192.168.122.1:domain
dnsmasq  1372 libvirt-dnsmasq    7u  IPv4  13974      0t0  TCP 192.168.122.1:domain (LISTEN)
sshd     1377            root    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd     1427          ubuntu    3u  IPv4  13987      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:63725 (ESTABLISHED)
sshd     1840            root    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)
sshd     1930          ubuntu    3u  IPv4  14871      0t0  TCP testserver.tutorailspoint.com:ssh->192.168.134.1:53307 (ESTABLISHED)

9)列出打开特定文件的进程

#  lsof /var/log/syslog
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF  NODE NAME
rsyslogd 687 syslog    1w   REG  252,0  1812935 11325 /var/log/syslog

10)列出一个目录下打开的文件

# lsof +D /var/log/
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init        1   root   14w   REG  252,0      733  11346 /var/log/upstart/systemd-logind.log
rsyslogd  687 syslog    1w   REG  252,0  1813034  11325 /var/log/syslog
rsyslogd  687 syslog    2w   REG  252,0  1694014  11335 /var/log/kern.log
rsyslogd  687 syslog    4w   REG  252,0    39603  11870 /var/log/auth.log
libvirtd 1171   root    4w   REG  252,0        0 135812 /var/log/libvirt/libvirtd.log

11)根据进程名列出打开的文件

# lsof -c ssh -c init
COMMAND  PID   USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
init       1   root  cwd    DIR              252,0     4096      2 /
init       1   root  rtd    DIR              252,0     4096      2 /
init       1   root  txt    REG              252,0   265848     54 /sbin/init
init       1   root  mem    REG              252,0    47712 393444 /lib/x86_64-linux-gnu/libnss_files-2.19.so
init       1   root  mem    REG              252,0    47760 393448 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
init       1   root  mem    REG              252,0    97296 393438 /lib/x86_64-linux-gnu/libnsl-2.19.so
init       1   root  mem    REG              252,0    39824 393440 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
init       1   root  mem    REG              252,0    14664 393401 /lib/x86_64-linux-gnu/libdl-2.19.so
init       1   root  mem    REG              252,0   252032 393460 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
init       1   root  mem    REG              252,0   141574 393475 /lib/x86_64-linux-gnu/libpthread-2.19.so
init       1   root  mem    REG              252,0  1840928 393385 /lib/x86_64-linux-gnu/libc-2.19.so
init       1   root  mem    REG              252,0    31792 393481 /lib/x86_64-linux-gnu/librt-2.19.so
init       1   root  mem    REG              252,0    43464 393417 /lib/x86_64-linux-gnu/libjson-c.so.2.0.0

推荐阅读
cjavapy编程之路首页