Linux查看进程打开的文件(lsof)

Linux查看进程打开的文件(lsof)教程

Linux 中的 lsof 命令用于根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof(list open files)是一个列出当前系统打开文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过 lsof 工具能够查看这个列表对系统监测以及排错将是很有帮助的。

Linux查看进程打开的文件(lsof)

功能

用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 需要访问核心内存和各种文件,所以需要 root 用户执行。

语法

lsof [options] file

参数

参数 描述
options lsof 命令使用的参数。
file 需要查看的文件。

lsof命令常用参数

选项 含义
-a 列出打开文件存在的进程。
-c<进程名> 列出指定进程所打开的文件。
-g 列出 GID 号进程详情。
-d<文件号> 列出占用该文件号的进程。
+d<目录> 列出目录下被打开的文件。
+D<目录> 递归列出目录下被打开的文件。
-n<目录> 列出使用 NFS 的文件。
-i<条件> 列出符合条件的进程。
-p<进程号> 列出指定进程号所打开的文件。
-u 列出 UID 号进程详情。

Linux lsof命令常用实例

实例

实例 描述
lsof 显示进程信息。
lsof file 查看谁正在使用某个文件,也就是说查找某个文件相关的进程。
lsof -u username 列出某个用户打开的文件信息。
lsof -c mysql 列出某个程序进程所打开的文件信息。
lsof -c mysql -c apache 列出多个进程多个打开的文件信息。
lsof -u test -c mysql 列出某个用户以及某个进程所打开的文件信息。
lsof -p 1 通过某个进程号显示该进行打开的文件。
lsof -p 1,2,3 列出多个进程号对应的文件信息。
lsof -i 列出所有的网络连接。
lsof -i udp 列出所有 udp 网络连接信息。
lsof -i tcp 列出所有 tcp 网络连接信息。
lsof -i :3306 列出谁在使用某个端口。
lsof -i udp:55 列出谁在使用某个特定的 udp 端口。
lsof -i tcp:80 特定的 tcp 端口。

显示进程信息

语法

lsof

案例

我们使用 lsof 命令,显示进程的信息,具体命令如下:

lsof | more

运行后,终端输出如下:

21_Linux lsof命令详解.png

我们看到,我们使用了 lsof 命令,显示了所有进程信息。

显示进程使用的文件

语法

lsof file

案例

我们使用 lsof 命令,显示进程的信息,具体命令如下:

lsof /bin/bash

运行后,终端输出如下:

22_Linux lsof命令详解.png

我们看到,我们使用了 lsof 命令,显示了进程在使用的文件。

显示某个用户在使用的文件

语法

lsof -u username

案例

我们使用 lsof 命令,显示某个用户正在使用的文件,具体命令如下:

lsof -u root | more

运行后,终端输出如下:

23_Linux lsof命令详解.png

我们看到,我们使用了 lsof 命令,显示了 root 用户打开的所有的文件。

显示某个进程打开的文件

语法

lsof -c mysql

案例

我们使用 lsof 命令,显示某个进程正在使用的文件,具体命令如下:

lsof -c mysql

运行后,终端输出如下:

24_Linux lsof命令详解.png

我们看到,我们使用了 lsof 命令,显示了 mysql 进程打开的所有的文件。

查看指定进程号打开的文件

语法

lsof -p pid

案例

我们使用 lsof 命令,查看某个进程号正在使用的文件,具体命令如下:

lsof -p 1556

运行后,终端输出如下:

25_Linux lsof命令详解.png

我们看到,我们使用了 lsof 命令,显示了 pid 为 1556 的进程打开的所有的文件。

查看所有的网络连接

语法

lsof -i

案例

我们使用 lsof 命令,可以查看所有的网络连接,具体命令如下:

lsof -i

运行后,终端输出如下:

26_Linux lsof命令详解.png

我们看到,我们使用了 lsof 命令,显示了所有的网络连接。

查看端口占用

语法

lsof -i :port

案例

我们使用 lsof 命令,可以查看端口占用,具体命令如下:

lsof -i :3306

运行后,终端输出如下:

27_Linux lsof命令详解.png

我们看到,我们使用了 lsof 命令,显示了谁在使用 3306 端口。

Linux查看进程打开的文件(lsof)总结

Linux 中的 lsof 命令用于根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof(list open files)是一个列出当前系统打开文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。