Warum beschwert sich lsof über tracefs?

11

Bei jeder Ausführung wird lsofeine Warnung zum TraceFS ausgegeben:

$ 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)

(Dies ist unter Ubuntu 15.10, vollständig aktualisiert)

Ist es normal, dass TraceFS während des normalen Betriebs bereitgestellt wird?
Wenn ja, wie kann ich sagen, dass ich es lsofüberspringen soll?

Zilk
quelle

Antworten:

12

Die Antwort auf Ihre Frage finden Sie in den Dateiberechtigungen:

Versuchen:

$ 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
...

Daher dürfen normale Benutzer nicht darauf zugreifen, /sys/kernel/debug/tracingund es scheint keine Möglichkeit zu geben, lsofden Zugriff darauf zu vermeiden.

Wir könnten dann diskutieren, ob dies ein Fehler ist oder nicht, aber die Antwort auf Ihre Frage läuft darauf hinaus.

EnzoR
quelle
Was meinst du mit "Bug"? "lsof" muss mit "sudo" oder als "root" ausgeführt werden.
Rinzwind
1
lsof muss nicht als root ausgeführt werden. Wir können über seine Sicherheit diskutieren (siehe man lsof), aber es muss definitiv nicht nur mit Superuser-Zuschüssen ausgeführt werden. Es befindet sich in / usr / bin, nicht in / usr / sbin.
EnzoR
"Keine Möglichkeit, dies zu vermeiden" ist eine durchaus akzeptable Antwort. Außerdem scheint es, dass TraceFS ab Ubuntu 16.04 nicht mehr standardmäßig gemountet wird. Die Warnung beim Ausführen lsofals normaler Benutzer ist jetzt verschwunden.
Zilk
3
Ich bin am 16.04, es ist nicht verschwunden - immer noch ein Problem.
TenLeftFingers
@TenLeftFingers Es funktioniert in meinem aktuellen Kubuntu 16.04!
EnzoR
3

Ich hatte das gleiche Problem und diese Antwort half mir, das Problem ein wenig besser zu verstehen.

Ich habe herausgefunden, dass eine Möglichkeit, die lästige Warnung zu entfernen, darin besteht, Debugfs umzumischen

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

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

Wenn Sie jetzt laufen, lsofgibt es keine Warnung.

Damko
quelle
2
das ist wirklich der Grund, warum ich gekommen bin, um zu suchen. Es ist mir egal, warum der Fehler auftritt. Ich möchte wirklich nur, dass es weggeht. Danke damko!
Cjac
umount: /sys/kernel/debug: target is busy.
Msangel
2

Das Problem ist, dass Sie keine Berechtigung zum Zugriff auf das debugfs-Verzeichnis haben. Das Verzeichnis tracefs wurde erstellt, damit Benutzer das Ablaufverfolgungsverzeichnis direkt unter / sys / kernel / tracing bereitstellen können und Debugfs nicht aktivieren müssen. Aus Gründen der Abwärtskompatibilität werden beim Mounten des debugfs-Verzeichnisses tracefs automatisch im Verzeichnis "tracing" von debugfs gemountet.

Wenn Sie jetzt lsof ausführen, werden die Datei / proc / filesystems sowie / proc / mounts angezeigt. Es sieht, dass tracefs unter / sys / kernel / debug / tracing gemountet ist, und versucht daher, es zu statisieren. Da / sys / kernel / debug nicht zulässt, dass Nicht-Root-Benutzer darin sehen, wird leider die Fehlermeldung angezeigt, wenn Sie versuchen, das Verzeichnis "tracing" in / sys / kernel / debug anzugeben. Wenn Sie das debugfs-Verzeichnis aushängen, wird die Warnung ausgeblendet.

Nevets
quelle
0

Die Warnung wird an stderr geschrieben. Sie können dies jederzeit einfach nach / dev / null umleiten:

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

Prost,

QuickPrototype
quelle