Pourquoi lsof se plaint-il de tracefs?

11

Chaque exécution de lsofémet un avertissement concernant 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)

(Ceci est sur Ubuntu 15.10, entièrement mis à jour)

Est-il normal que TraceFS soit monté pendant le fonctionnement normal?
Si oui, comment puis-je dire lsofde l'ignorer?

Zilk
la source

Réponses:

12

La réponse à votre question se trouve dans les autorisations de fichier:

essayer:

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

Ainsi, les utilisateurs normaux ne sont pas autorisés à accéder /sys/kernel/debug/tracinget il semble qu'il n'y ait aucun moyen de demander lsofd'éviter d'y accéder.

Nous pourrions alors discuter s'il s'agit d'un bug ou non, mais la réponse à votre question se résume à ceci.

EnzoR
la source
Que voulez-vous dire par "bug"? "lsof" doit être exécuté avec "sudo" ou en tant que "root".
Rinzwind
1
lsof n'a pas besoin d'être exécuté en tant que root. Nous pouvons discuter de sa sécurité (voir man lsof) mais il n'est certainement pas nécessaire de l'exécuter uniquement avec des autorisations de superutilisateur. Il se trouve dans / usr / bin et non dans / usr / sbin.
EnzoR
"Aucun moyen de l'éviter" est une réponse parfaitement acceptable. En outre, il semble que TraceFS ne soit plus monté par défaut à partir d'Ubuntu 16.04; l'avertissement lors de l'exécution en lsoftant qu'utilisateur normal a maintenant disparu.
Zilk
3
Je suis le 16.04, il n'a pas disparu - toujours un problème.
TenLeftFingers
@TenLeftFingers Cela fonctionne dans mon Kubuntu 16.04 à jour!
EnzoR
3

J'ai eu le même problème et cette réponse m'a aidé à mieux comprendre le problème.

J'ai découvert qu'une façon de supprimer l'avertissement ennuyeux est de démonter les debugfs

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

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

Si vous exécutez maintenant, lsofil n'y a aucun avertissement.

damko
la source
2
c'est vraiment pourquoi je suis venu chercher. Je me fiche de savoir pourquoi l'erreur apparaît. Je veux vraiment que ça disparaisse. Merci damko!
cjac
umount: /sys/kernel/debug: target is busy.
msangel
2

Le problème est que vous n'êtes pas autorisé à accéder au répertoire debugfs. Le répertoire tracefs a été créé pour permettre aux utilisateurs de monter le répertoire de traçage directement dans / sys / kernel / tracing et ne nécessite pas d'activer debugfs. Mais pour des raisons de compatibilité descendante, lors du montage du répertoire debugfs, il monterait automatiquement tracefs dans le répertoire "tracing" de debugfs.

Maintenant, lorsque vous effectuez lsof, il regarde le fichier / proc / filesystems ainsi que / proc / mounts. Il voit que tracefs est monté dans / sys / kernel / debug / tracing, et essaie donc de le stat. Malheureusement, parce que / sys / kernel / debug ne permet pas aux utilisateurs non root de voir l'intérieur, vous obtenez le message d'erreur lorsque vous essayez de statuer le répertoire "tracing" depuis / sys / kernel / debug. Si vous démontez le répertoire debugfs, l'avertissement disparaîtra.

nevets
la source
0

L'avertissement est écrit sur stderr. Vous pouvez toujours simplement rediriger ceci vers / dev / null:

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

À votre santé,

QuickPrototype
la source