Linux 中的 lsof 命令及示例
Linux/Unix 将一切视为文件并维护文件夹。所以“文件或文件”在 Linux/Unix 中非常重要。在 Linux/Unix 系统中工作时,可能有多个文件和文件夹正在使用,其中一些可见,一些不可见。
lsof命令代表打开文件列表。此命令提供已打开文件的列表。基本上,它提供信息以找出由哪个进程打开的文件。一口气列出输出控制台中所有打开的文件。它不仅可以列出常见的常规文件,还可以列出目录、块特殊文件、共享库、字符特殊文件、常规管道、命名管道、互联网套接字、UNIX 域套接字等等。它可以与 grep 命令结合使用,可以进行高级搜索和列表。
句法:
$lsof [option][user name]
示例选项:
- 列出所有打开的文件:此命令列出系统中任何进程打开的所有文件。
~$ lsof
在这里,您会看到打开的文件的详细信息。进程 ID、与进程关联的用户、FD(文件描述符)、文件大小一起提供有关命令打开的文件的详细信息、进程 ID、用户、其大小等。
- FD代表文件描述符。
- cwd :当前工作目录。
- txt : 文本文件。
- mem : 内存文件。
- mmap :内存映射设备。
- 列出用户打开的所有文件:一个系统有多个用户,每个用户都有不同的要求,因此他们使用文件和设备。要查找特定用户打开的文件列表,此命令很有用。
句法:
lsof -u username
在上图中,使用命令lsof -u ubuntu列出了 ubuntu 用户打开的所有文件。除此之外,我们可以在这里看到文件的类型,它们是:
- DIR:目录
- REG:普通文件
- CHR:字符特殊文件
- 列出除特定用户外所有人打开的所有文件:借助此命令,您可以列出所有进程和所有用户打开的所有文件。但是当我们想要查找除特定用户之外的所有用户打开的文件列表时,我们可以使用:
句法:
lsof -u ^root
在给定的图中,我们可以观察到 root 用户没有打开任何文件。
- 列出特定进程打开的所有文件:此命令可以列出特定进程打开的所有文件。 -c后跟进程名称可以找出由命令中指定的特定进程打开的所有文件。
句法:
lsof -c Mysql
在这里,您可以观察到 Mysql 进程打开的文件及其描述。另一个例子是apache进程打开的文件:
- 列出由特定进程打开的所有打开文件:每个文件都与某个进程 ID 相关联。一个特定的进程可以打开许多文件。通过使用 lsof -p 进程 ID,可以检查由特定进程打开的文件。
句法:
lsof -p process ID
- 所有其他PID打开的文件:如上图命令列出了特定进程ID打开的文件。以同样的方式,您可以使用以下命令选项来查找未由特定进程 ID 打开的文件列表。
句法:
lsof -p ^process ID
- 列出父进程 ID:系统中运行着大量进程,并且它们已打开文件供其使用。一个进程可能有多个子进程,这个进程也可以称为父进程。要找出父进程 Id 打开的文件列表,lsof 命令与选项-R 一起使用。
句法:
$lsof -R
- 目录打开的文件:列出特定目录打开的文件。系统中有文件,也有目录。因此,一个目录可以打开多个文件以及常规文件。
句法:
$lsof -D directory path
- 通过网络连接打开的文件:我们的电脑/系统可以通过各种网络连接,这有助于各种目的。众所周知,在Linux中一切都是文件,因此我们甚至可以检查系统中某些网络连接打开的文件。
句法:
$lsof -i
在图中,我们可以看到 TCP 网络打开的文件。以同样的方式,我们可以检查UDP等。
注意:要了解有关 lsof 命令的更多详细信息,您可以查看手册页,如下所示:
$ man lsof