lsof 用于查找其他用户打开的文件

lsof 用于查找其他用户打开的文件

如何查看lsof特定目录中以及其他用户打开的文件列表()?

我可以这样做lsof +D /path,但这只显示当前用户的文件。

有什么方法可以查看其他用户是否打开了目录中的文件?

答案1

由于我最近也有类似的问题,所以我也想在这里分享我的发现。此外,假设用户是,root并且如其他答案中所述。

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

lsof +D /var/log/

将显示所有用户打开的文件。

指定用户

lsof -u ${USER} +D /var/log/

将显示来自用户或特定目录内的所有文件(...并且独立于用户)。

这是因为并且如所述man lsof

由于它们代表排除,因此它们无需进行 OR 或 AND 运算即可应用,并且在应用任何其他选择标准之前生效。

-a 选项可用于对选择进行 AND 运算。例如,指定 -a、-U 和 -ufoo 会生成仅属于用户“foo”所拥有的进程的 UNIX 套接字文件的列表。

列出用户打开的文件以及特定目录中的文件

lsof -u ${USER} -a +D /var/log/ 

然后可以列出非用户且在特定目录内的打开的文件。

lsof -u ^${USER} -a +D /var/log/ 

这种方法对于网络连接也非常有效。例如,如果对非 root 运行进程打开的所有 TCP 或 UDP 连接感兴趣

lsof -u ^root -P -i TCP -i UDP

为了解决非 root 用户的问题sudosudoers需要识别sudo呼叫用户

列出特定目录中所有打开的文件以及用户打开的文件

sudo lsof -u $(who | cut -d " " -f 1) -a +D /usr/lib/

否则它将显示打开的文件或目录内的文件并且与用户无关。

列出特定目录中所有未被提及的用户打开的文件

sudo lsof -u ^$(who | cut -d " " -f 1) +D /usr/lib/

答案2

除非您以 root 身份执行此操作,否则无法做到。

如果您愿意,您可以设置一个sudo aliasfor lsof,但它要么非常通用。

即,该用户可以看到整个lsof输出或非常具体的输出,因为该用户只能看到其他用户的lsof -u user输出。

答案3

我假设你以 root 身份运行/可以以 root 身份使用 sudo lsof:

lsof -u www-data

相关内容