如何查看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 用户的问题sudo
,sudoers
需要识别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
alias
for lsof
,但它要么非常通用。
即,该用户可以看到整个lsof
输出或非常具体的输出,因为该用户只能看到其他用户的lsof -u user
输出。
答案3
我假设你以 root 身份运行/可以以 root 身份使用 sudo lsof:
lsof -u www-data