如何使用 lsof 跟踪文件生命周期?

如何使用 lsof 跟踪文件生命周期?

我已阅读文章https://tailscale.com/blog/case-of-spiky-file-descriptors/作者调查了打开文件描述符数量的异常情况。他说他使用打开文件快照来lsof跟踪文件的生命周期:

01:12:17.24    tailcontr 142810 ubuntu  273u     IPv6   5725049    0t0     TCP 172.31.10.244:https->1.2.3.4:57666 (ESTABLISHED)
01:13:32.17    tailcontr 142810 ubuntu  273u     IPv6   5725049    0t0     TCP 172.31.10.244:https->1.2.3.4:57666 (CLOSE_WAIT)
01:14:03.22    tailcontr 142810 ubuntu  273u     sock       0,8    0t0 5725049 protocol: TCPv6
01:16:53.93    (socket is removed)

如上例所示,应该使用哪些标志来跟踪文件的生命周期?

PS:我想研究 TCPv6 连接中的类似问题。据lsof -u <user>我所知,有很多文件如下所示:

01:14:03.22    tailcontr 142810 ubuntu  273u     sock       0,8    0t0 5725049 protocol: TCPv6

我想了解这些联系是在哪里建立的。

答案1

在你的情况下,lsof这不是一个合适的工具。最好激活auditd并配置它来跟踪文件的创建和删除。/etc/audit.rules你可以添加类似

-w /path/to/file -p war -k fileops
-a always,exit -F dir=/path/to/ -S unlink -S unlinkat -S rename -S renameat  -k fileops

这将监视读取、写入、附加文件操作。以及在创建文件的目录中删除(取消链接)操作。

稍后可以通过 keyname 过滤记录fileops

相关内容