📜  Linux 中的 lsof 命令及示例

📅  最后修改于: 2022-05-13 01:57:27.811000             🧑  作者: Mango

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