如何在Linux中使用lsof命令

时间:2020-02-23 14:40:05  来源:igfitidea点击:

lsof命令的工作是在系统中"列出打开的文件"。
打开的文件不一定表示pdf或者文本文件,它包括后台进程使用的磁盘文件或者管道。

该命令是操作系统调试器和系统管理员的便捷工具。

即使lsof命令是预装的Linux实用程序,如果您未安装apt,则Ubuntu/Debian用户也可以使用apt安装:

sudo apt install lsof

其他Linux用户可以通过其标准安装命令后跟lsof进行安装。

让我们快速转到lsof命令的用法:

列出系统中所有打开的文件

通过运行不带任何选项的lsof命令,我们可以列出系统中所有打开的文件。
这样做将用大量数据冲洗终端。
因此,建议使用" less"命令来限制任何命令抛出的数据

sudo lsof | less

所有打开文件的列表

通过按" ENTER"或者向下箭头键,我们可以导航到列表的底部。

输出中的每个文件都提供有关其类型和用法的重要信息。

  • COMMAND –与负责打开文件的进程关联的Linux命令。

  • PID –保存文件的进程的进程ID。

  • TID –相应进程的线程ID。

  • USER –管理进程的Linux用户。

  • FD –进程用于与文件关联的文件描述符。
    cwd –当前工作目录

  • rtd –根目录

  • txt –文本程序,例如一些代码

  • mem –内存映射文件

  • TYPE –文件的类型REG –常规文件

  • DIR –目录

  • CHR –字符文件

  • LINK –符号链接文件

  • DEVICE –与文件相关的设备号。

  • SIZE/OFF –文件大小或者其偏移量(以字节为单位)。

  • NODE –索引节点号。

  • NAME –文件名。

<p><span style="color:#526973" class="has-inline-color">Note: Some information like inode or device number might be redacted if the command is not run using root permissions.</p>

我们可以从手册页中了解有关输出的更多信息,可以通过运行man lsof从终端访问手册页。

使用lsof命令列出特定用户的所有打开文件

lsof命令支持许多选项,这些选项可用于过滤打开的文件。
其中之一是-u选项,用于显示特定用户的打开文件。

sudo lsof -u <USER_NAME> | less

特定于用户的打开文件

第三列基于负责打开文件的用户。
与基本输出类似,终端上挤满了毫无意义的数据,因此建议使用" less"命令。

列出特定目录中的打开文件

文件存在于目录中,因此我们可以将打开的文件提取到特定目录中非常简单。

lsof +D <DIR_NAME>

在文档中打开文件

在上图中,我们在"文档"文件夹中列出了当前打开的文件。
打开的文件是常规的C++文件。

使用lsof命令列出特定文件系统中的打开文件

lsof命令可以列出特定文件系统中的打开文件,而不是单个目录。
这是通过在" lsof"命令之后放置文件系统名称来实现的。

lsof <FILE_SYSTEM>

在/proc文件系统中打开文件

在上图中,我们在/proc文件系统中显示打开的文件。

按特定进程列出打开的文件

使用进程ID,我们可以过滤打开的文件。
这可以在-p选项的帮助下完成。

lsof -p <PID>

Open files for Sublime-Text process

终端的以上代码片段显示了PID为3404的进程的打开文件列表。

<p><span style="color:#526973" class="has-inline-color">Note: The caret symbol <code>(^) is used to negate the parameters in the <code>lsof command. For instance <code>lsof -p ^3404, displays the list of open files for all PIDs except 3404. </p>

列出打开的网络文件

Linux存储一系列网络文件,用于存储IP地址或者网络接口配置。
这些打开的文件可以用-i标志过滤掉。

lsof -i 

打开网络文件

这些文件具有某些特征,例如网络协议的类型。
可以使用特定参数进一步过滤打开的文件,例如:

  • ‘4’– IPv4的网络文件
  • ‘6’– IPv6的网络文件
  • " TCP"-TCP的网络文件
  • ‘UDP’– UDP的网络文件
  • " TCP:25" – TCP的网络文件,端口号25
  • ‘TCP:1-25’– TCP的网络文件,端口号为1到25

例如:

lsof -i 6

Open network files for IPv6

使用lsof命令根据命令搜索打开的文件

在系统中有成千上万个打开的文件的情况下,似乎不可能线性搜索特定命令。
因此,lsof命令具有-c选项以根据命令过滤掉打开的文件。

lsof -c <COMMAND>