简解lsof命令

lsof(List Open Files)是一个用于查看和显示正在使用的文件列表的命令。它可以显示打开文件的进程、打开文件的类型以及打开文件的权限等信息。

通过这个命令,可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof是运维常用的命令之一。

lsof命令的一些常见用法:

列出所有打开的文件:lsof 这会列出系统中当前打开的所有文件的信息。

列出特定进程打开的文件:lsof -p <pid> 这会列出指定进程<pid>打开的所有文件的信息。

列出特定用户打开的文件:lsof -u <username>这会列出指定用户<username>打开的所有文件的信息。

列出某个目录下打开的文件:lsof <directory>这会列出指定目录<directory>下所有打开的文件的信息。

列出某个网络端口被使用的进程:lsof -i :<port> 这会列出使用指定网络端口<port>的所有进程的信息。

列出已删除但仍被使用的文件:lsof -d <del> 这会列出已删除但仍有进程在使用的文件的信息。

注意上述命令中

  • <pid>是指进程ID,
  • <username>是指用户名,
  • <directory>是指目录路径,
  • <filetype>是指文件类型,
  • <port>是指网络端口,
  • <del>是指已删除标记。

一些使用lsof命令的实例:

1. 列出所有打开的文件

lsof

下图是一个没有添加任何参数运行lsof命令的结果,因为演示的机器有数万条记录,不方便截屏,利用管道加head命令,指显示了头10条信息出来。

没有加参数 输出的内容每列的名称含义如下: - COMMAND:命令,进程的名称 - PID:进程号 - USER:进程的所有者 - FD:文件描述符 - TYPE:文件类型,REG为普通文件,DIR为目录 - DEVICE:指定磁盘的名称。 - SIZE/OFF:文件的大小 - NODE:索引节点。 - Name:文件名称。

2. 列出系统中当前打开的所有文件的信息。

列出某个特定进程打开的文件

lsof -p <pid>

例如:要列出进程ID为123的进程打开的文件,可以使用以下命令:

lsof -p 123

运行结果:

查找进程ID为123的内容

3. 列出某个特定用户打开的文件

lsof -u <username>

例如,要列出用户名为"john"的用户打开的文件,可以使用以下命令:

lsof -u sean

运行结果:

查找指定用户

4. 列出某个目录下打开的文件

lsof <directory>

例如,要列出"/home/sean"目录下打开的文件,可以使用以下命令:

lsof /home/sean

运行结果:

查找指定目录

5. 列出某个网络端口被使用的进程

lsof -i :<port>

例如,要列出使用端口号22的进程,可以使用以下命令:

lsof -i :22

运行结果:

查看指定端口

6. 列出已删除但仍被使用的文件

lsof -d deleted

运行结果:

删除但正运行

这会列出系统中已删除但仍有进程在使用的文件的信息。