Почему lsof жалуется на следы?

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чтобы пропустить это?

Zilk
источник

Ответы:

12

Ответ на ваш вопрос находится в файле permissions:

пытаться:

$ 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 не нужно запускать с правами root. Мы можем обсудить его безопасность (см. Man lsof), но его не обязательно запускать только с правами суперпользователя. Он находится в / usr / bin, а не в / usr / sbin.
EnzoR
«Нет способа избежать этого» - вполне приемлемый ответ. Кроме того, похоже, что TraceFS больше не монтируется по умолчанию с Ubuntu 16.04; предупреждение при работе lsofот имени обычного пользователя теперь исчезло.
Жилк
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
это действительно то, почему я пришел посмотреть. Мне все равно, почему появляется ошибка. Я действительно хочу, чтобы это ушло. Спасибо, черт возьми!
cjac
umount: /sys/kernel/debug: target is busy.
msangel
2

Проблема в том, что у вас нет прав доступа к каталогу debugfs. Каталог tracefs был создан, чтобы позволить людям монтировать каталог трассировки непосредственно в / sys / kernel / tracing и не требовать включения debugfs. Но для обратной совместимости при монтировании каталога debugfs он автоматически монтирует tracefs в каталоге «tracing» debugfs.

Теперь, когда вы выполняете lsof, он просматривает файл / proc / filesystems, а также / proc / mounts. Он видит, что tracefs монтируется в / sys / kernel / debug / tracing, и таким образом пытается его определить. К сожалению, из-за того, что / sys / kernel / debug не позволяет пользователям без полномочий root просматривать его, вы получаете сообщение об ошибке при попытке определить «трассировку» каталога из / sys / kernel / debug. Если вы отключите каталог debugfs, предупреждение исчезнет.

nevets
источник
0

Предупреждение написано в stderr. Вы всегда можете просто перенаправить это в / dev / null:

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

Ура,

QuickPrototype
источник