Linux 中的 lsof 命令用于根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
lsof(list open files)是一个列出当前系统打开文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过 lsof 工具能够查看这个列表对系统监测以及排错将是很有帮助的。
用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为 lsof 需要访问核心内存和各种文件,所以需要 root 用户执行。
lsof [options] file
参数 | 描述 |
---|---|
options | lsof 命令使用的参数。 |
file | 需要查看的文件。 |
选项 | 含义 |
---|---|
-a | 列出打开文件存在的进程。 |
-c<进程名> | 列出指定进程所打开的文件。 |
-g | 列出 GID 号进程详情。 |
-d<文件号> | 列出占用该文件号的进程。 |
+d<目录> | 列出目录下被打开的文件。 |
+D<目录> | 递归列出目录下被打开的文件。 |
-n<目录> | 列出使用 NFS 的文件。 |
-i<条件> | 列出符合条件的进程。 |
-p<进程号> | 列出指定进程号所打开的文件。 |
-u | 列出 UID 号进程详情。 |
实例 | 描述 |
---|---|
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
运行后,终端输出如下:
我们看到,我们使用了 lsof 命令,显示了所有进程信息。
lsof file
我们使用 lsof 命令,显示进程的信息,具体命令如下:
lsof /bin/bash
运行后,终端输出如下:
我们看到,我们使用了 lsof 命令,显示了进程在使用的文件。
lsof -u username
我们使用 lsof 命令,显示某个用户正在使用的文件,具体命令如下:
lsof -u root | more
运行后,终端输出如下:
我们看到,我们使用了 lsof 命令,显示了 root 用户打开的所有的文件。
lsof -c mysql
我们使用 lsof 命令,显示某个进程正在使用的文件,具体命令如下:
lsof -c mysql
运行后,终端输出如下:
我们看到,我们使用了 lsof 命令,显示了 mysql 进程打开的所有的文件。
lsof -p pid
我们使用 lsof 命令,查看某个进程号正在使用的文件,具体命令如下:
lsof -p 1556
运行后,终端输出如下:
我们看到,我们使用了 lsof 命令,显示了 pid 为 1556 的进程打开的所有的文件。
lsof -i
我们使用 lsof 命令,可以查看所有的网络连接,具体命令如下:
lsof -i
运行后,终端输出如下:
我们看到,我们使用了 lsof 命令,显示了所有的网络连接。
lsof -i :port
我们使用 lsof 命令,可以查看端口占用,具体命令如下:
lsof -i :3306
运行后,终端输出如下:
我们看到,我们使用了 lsof 命令,显示了谁在使用 3306 端口。
Linux 中的 lsof 命令用于根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。
lsof(list open files)是一个列出当前系统打开文件的工具。在 linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。