每次执行都会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
跳过它?
答案1
您的问题的答案在文件权限中:
尝试:
$ 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
避免访问。
然后我们可以讨论这是否是一个错误,但你的问题的答案归结为这一点。
答案2
我也遇到了同样的问题,回答帮助我更好地理解了这个问题。
我发现消除烦人的警告的一种方法是卸载 debugfs
mount | grep debugfs
none on /sys/kernel/debug type debugfs (rw,_netdev)
sudo umount $(mount | grep debugfs | awk '{print $3}')
如果您现在运行,lsof
则不会有任何警告。
答案3
问题是您没有权限访问 debugfs 目录。创建 tracefs 目录是为了允许人们直接在 /sys/kernel/tracing 上挂载跟踪目录,而无需启用 debugfs。但为了向后兼容,在挂载 debugfs 目录时,它会自动在 debugfs 的“跟踪”目录中挂载 tracefs。
现在,当您执行 lsof 时,它会查看 /proc/filesystems 文件以及 /proc/mounts。它看到 tracefs 已挂载在 /sys/kernel/debug/tracing 上,因此尝试对其进行统计。不幸的是,由于 /sys/kernel/debug 不允许非 root 用户查看其内部,因此当您尝试从 /sys/kernel/debug 内部统计目录“tracing”时会收到错误消息。如果您卸载 debugfs 目录,警告将消失。
答案4
警告将写入 stderr。您始终可以将其重定向到 /dev/null:
lsof <any-file> 2>/dev/null
干杯,