Linux 计算机中的每个对象都被视为一个文件。这些文件组织在目录中。当您的计算机运行时,它会打开多个文件和目录,供不同的进程使用。您可以使用 lsof 命令列出这些打开的文件和目录。
在本教程中,我们将通过示例学习如何在 Linux 中使用 lsof 命令。
目录
(资料图)
先决条件lsof 命令句法如何使用 Linux Lsof 命令Lsof 选项Linux Lsof 命令示例列出所有打开的文件列出特定用户打开的文件列出进程打开的文件按文件名过滤打开的文件列出目录打开的所有文件列出由网络协议打开的文件列出在特定端口上运行的进程使用的文件列出由 IPv4 和 IPv6 打开的文件Linux Lsof 命令头结论主要分享低代码、微服务、容器化、SAAS、系统架构方面的的内容,希望大家点赞,评论,关注。
lsof 命令代表list open files,用于列出所有打开的文件和目录。这个命令可以帮助你找出哪些文件被各个进程打开,用户的进程列表,以及监听特定端口的进程列表。您还可以使用此命令来调试当文件被其他进程使用时导致的磁盘卸载错误。
lsof 命令不仅列出常规文件,还列出共享库、块特殊文件、常规管道、命名管道、字符特殊文件、UNIX 域、Internet 套接字、文件系统挂载点和磁盘文件。使用 lsof 命令及其选项或 grep 命令过滤掉结果。
lsof 命令需要 root 或 sudo 访问权限,因为它列出的大多数进程或设备都属于 root。
默认情况下,所有主要的 Linux 发行版都会自动安装 lsof 命令。但是,如果它在您的发行版中不可用,那么您需要先安装命令来尝试这些示例。
这是 lsof 命令的基本语法:
lsof [option] [username]
lsof 命令可以以不同的方式使用,有或没有附加选项。不带选项使用时,它会列出数百个当前打开的文件。这些选项可帮助您缩小搜索结果的范围。例如,将目录作为选项传递,以列出从目录打开的所有文件以及打开这些文件的进程。
如果您以普通用户而不是 root 用户身份运行 lsof 命令,那么您将看到几个“权限被拒绝”错误,因为许多系统文件和进程仅限于 root 用户。
lsof 命令提供了许多选项来过滤掉文件列表。下表描述了一些最常用的 lsof 选项:
选项 | 描述 |
^ | 用于列出除指定的用户、PID 和 UID 之外的所有由用户、PID 和 UID 打开的文件的否定选项。 |
-u | 列出指定用户打开的文件。 |
-c | 列出指定进程打开的文件。 |
-p | 列出由指定进程 ID 打开的文件。 |
+D | 列出特定目录打开的文件。 |
-i | 列出由网络连接、协议和端口打开的文件。 |
lsof 命令提供了各种选项来在列出打开的文件时缩小搜索结果的范围。以下 Linux lsof 命令示例将向您展示该命令的一些最常见用例。
使用不带任何选项的 lsof 命令列出 Linux 计算机上所有打开的文件:
lsof
lsof 输出通常很长,您可以使用 lsof | more 一次显示一个屏幕输出,使其更具可读性。
多个用户可以在给定时间访问一台 Linux 计算机。每个用户都有不同的文件和设备要求。要列出特定用户打开的文件,请键入:
lsof -u tom
您还可以使用 lsof 在单个命令中显示多个用户的输出,例如:
lsof -u username1, username2
或者,您可以列出除指定用户之外的所有用户打开的所有文件。例如,要显示所有未由 root 用户打开的文件,请键入:
lsof -u^root
Linux 进程可能一次使用多个文件来完成其操作。以下命令可帮助您列出特定进程使用的打开文件:
lsof -c network
您还可以使用 PID 或进程标识号,而不是进程名称来列出由特定进程 ID 打开的文件:
lsof -p 11
要在单个命令中列出多个进程 ID 的打开文件,请键入:
lsof -p PID1, PID2, PID3
使用文件名作为参数列出所有打开指定文件的进程:
lsof /var/log
要列出由特定目录打开的所有文件,请将目录名称作为 lsof 的参数提供:
sudo lsof +D /var/log
Linux 支持多个网络连接以连接到不同的应用程序和设备。我们可以使用该-i选项列出特定网络协议使用的所有文件。
例如,使用以下命令列出 UDP 协议文件:
lsof -i UDP
同样,我们可以使用lsof -i TCP列出所有 TCP 协议文件。
一些 Linux 应用程序和进程需要特定的端口来建立连接。要列出在端口 631 上运行的进程使用的所有打开文件,请键入:
sudo lsof -i :631
我们还可以列出多个端口号,例如,lsof –i :22,443或者指定一个 TCP 端口范围以及网络协议,例如lsof -i TCP:1-44653.
以下示例向您展示了打开的 IPv4 网络连接文件:
sudo lsof -i 4
要列出打开的 IPv6 文件,请键入:
sudo lsof -i 6
lsof 命令的输出以表格形式组织,以帮助您更好地了解正在使用它们的文件和进程。下表列出并描述了 lsof 命令头:
标题 | 描述 |
COMMAND | 打开文件或目录的命令。 |
PID | 进程的进程标识符。 |
TID | 用于标识线程的线程或任务标识符。 |
TASKCMD | 任务命令的名称。仅当指定条目是任务时才显示此字段。 |
USER | 拥有文件和进程的用户帐户的名称。 |
FD | 用于指示文件描述符类型的文件描述符文本字符串或数字。最常见的文件描述符类型是 cwd(当前工作目录)、rtd(根目录)、mem(内存映射文件)、txt(程序文本)和 mmap(内存映射设备)。 |
TYPE | 文件类型,包括DIR(目录)、REG(常规文件)、CHR(字符特殊文件)、Netlink(网络连接文件)和FIFO(先进先出)。 |
DEVICE | 设备标识号。 |
SIZE/OFF | 以字节表示的文件大小和偏移量。 |
NODE | 文件的节点号。 |
NAME | 文件的挂载点和文件系统名称。 |
在本教程中,我们学习了如何使用 lsof ,此命令带有多个选项,需要在平时的工作中多加练习。
主要分享低代码、微服务、容器化、SAAS、系统架构方面的的内容,希望大家点赞,评论,关注。