如何在Linux中使用lsof命令
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>