简解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
运行结果:

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
运行结果:

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