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