lsof命令-查看进程打开的文件

249 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

一、命令详解

1.1【功能说明】

lsof是list open files的缩写,也就是列举系统中已经被打开的文件,通过lsof命令,就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

1.2 【语法格式】

[root@7bfe451a2fe1 /]# lsof -h
lsof [option]

-i语法格式

lsof -i [46] [protocol][@hostname][:service|port]

1.3 【选项说明】

  • -c <进程名> 显示指定的进程名所打开的文件
  • -p <进程号> 显示指定的进程号所打开的文件
  • -i 通过监听指定的协议、端口和主机等信息,显示符号条件的进程信息
  • -u 显示指定用户使用的文件
  • -U 仅列出Unix like系统的socket文件类型
  • -u 后面接username,列出该使用者相关程序所打开的文件
  • +d 后面接目录,即找出某个目录下面已经被打开的文件
  • -a

二、使用范例

2.1 列出目前系统上面所有已经被打开的文件与设备

lsof

2.2 根据文件找进程

[root@7bfe451a2fe1 ~]# lsof /var/log/message
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
tail     71 root    3r   REG   0,64        0 403308 /var/log/message

如果想知道某个特定的文件在由哪个进程使用,就可以通过上面的命令知道,/var/log/message文件在由tail命令在使用,下面说明每列的具体含义:

  • COMMAND 命令,进程的名称
  • PID 进程号
  • USER 进程的所有者
  • FD 文件描述符
  • TYPE 文件类型,REG为普通文件
  • DEVICE 磁盘的名称
  • SIZE/OFF 文件的大小
  • NODE 索引节点
  • NAME 文件名称

2.3 根据进程名找文件

[root@7bfe451a2fe1 ~]# lsof -c tail
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
tail     74 root  cwd    DIR   0,64     4096 403288 /
tail     74 root  rtd    DIR   0,64     4096 403288 /
tail     74 root  txt    REG   0,64    70880 142681 /usr/bin/tail
tail     74 root  mem    REG  254,1          142681 /usr/bin/tail (path dev=0,64)
tail     74 root  mem    REG  254,1          395950 /usr/lib64/libc-2.17.so (path dev=0,64)
tail     74 root  mem    REG  254,1          395926 /usr/lib64/ld-2.17.so (path dev=0,64)
tail     74 root    0u   CHR  136,2      0t0      5 /dev/pts/2
tail     74 root    1u   CHR  136,2      0t0      5 /dev/pts/2
tail     74 root    2u   CHR  136,2      0t0      5 /dev/pts/2
tail     74 root    3r   REG   0,64       11 403308 /var/log/message

2.4 根据进程号找文件

[root@7bfe451a2fe1 ~]# lsof -p 74
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
tail     74 root  cwd    DIR   0,64     4096 403288 /
tail     74 root  rtd    DIR   0,64     4096 403288 /
tail     74 root  txt    REG   0,64    70880 142681 /usr/bin/tail
tail     74 root  mem    REG  254,1          142681 /usr/bin/tail (path dev=0,64)
tail     74 root  mem    REG  254,1          395950 /usr/lib64/libc-2.17.so (path dev=0,64)
tail     74 root  mem    REG  254,1          395926 /usr/lib64/ld-2.17.so (path dev=0,64)
tail     74 root    0u   CHR  136,2      0t0      5 /dev/pts/2
tail     74 root    1u   CHR  136,2      0t0      5 /dev/pts/2
tail     74 root    2u   CHR  136,2      0t0      5 /dev/pts/2
tail     74 root    3r   REG   0,64       11 403308 /var/log/message

2.5 根据协议、端口、主机找进程

lsof -i :22
lsof -i tcp
lsof -i tcp:22

2.6 根据用户找文件

lsof -u root

三、扩展知识

3.1 其他相关指令

查询已打开文件或已执行程序打开的文件,还可以用fuser、pidof等指令

四、命令总结

  • 2022/12/5 今天用户测试,组织的效率不高,测试收获不大