lsof为什么抱怨tracefs?


11

每次执行都会lsof发出有关TraceFS的警告:

$ lsof any-file
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.

$ mount | grep trace
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)

(这是在Ubuntu 15.10上,已完全更新)

在正常运行期间安装TraceFS是否正常?
如果是这样,我如何告诉我lsof跳过它?

Answers:


12

您的问题的答案在文件许可权中:

尝试:

$ ls -l /sys/kernel/debug/tracing
ls: cannot access '/sys/kernel/debug/tracing': Permission denied
$ ls -l /sys/kernel
total 0
...
drwx------  31 root root    0 2016-06-15 11:06:47 debug
...

因此,普通用户是不允许访问的/sys/kernel/debug/tracing,似乎没有办法要求lsof避免访问它。

然后,我们可以讨论这是否是错误,但是您问题的答案可以归结为这一点。


您是什么意思“虫子”?“ lsof”需要使用“ sudo”或作为“ root”执行。
Rinzwind

1
lsof不需要以超级用户身份运行。我们可以讨论它的安全性(请参阅man lsof),但是绝对不需要仅通过超级用户授权来运行它。它位于/ usr / bin中,而不位于/ usr / sbin中。
EnzoR

“没有办法避免”是一个完全可以接受的答案。此外,似乎从Ubuntu 16.04开始默认不再挂载TraceFS。lsof以普通用户身份运行时的警告现已消失。
Zilk

3
我在16.04上,它还没有消失-仍然是一个问题。
TenLeftFingers

@TenLeftFingers它正在我最新的Kubuntu 16.04中运行!
EnzoR

3

我遇到了同样的问题,这个答案帮助我更好地理解了这个问题。

我发现消除烦人警告的一种方法是卸载debugfs

mount | grep debugfs 
none on /sys/kernel/debug type debugfs (rw,_netdev)

sudo umount $(mount | grep debugfs | awk '{print $3}')

如果现在运行lsof,则没有警告。


2
这就是为什么我来找。我不太在乎为什么会出现错误。我真的只是希望它消失。谢谢damko!
cjac

umount: /sys/kernel/debug: target is busy.
msangel

2

问题是您没有访问debugfs目录的权限。创建tracefs目录是为了使人们可以直接在/ sys / kernel / tracing上安装跟踪目录,而无需启用debugfs。但是为了向后兼容,在装入debugfs目录时,它将自动在tracefs的“跟踪”目录中装入tracefs。

现在,当您执行lsof时,它会查看/ proc / filesystems文件以及/ proc / mounts。它看到tracefs挂载在/ sys / kernel / debug / tracing,因此尝试对其进行统计。不幸的是,由于/ sys / kernel / debug不会让非root用户看到它的内部,因此当您尝试从/ sys / kernel / debug中统计目录“跟踪”时,会收到错误消息。如果卸载debugfs目录,警告将消失。


0

该警告将写入stderr。您始终可以将其重定向到/ dev / null:

lsof <any-file> 2>/dev/null

干杯,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.