Чому 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пропустити його?

Відповіді:


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 не потрібно запускати як root. Ми можемо обговорити питання про її безпеку (див. Man lsof), але це, безумовно, не потрібно проводити лише з грантами суперпользователя. Він сидить у / usr / bin не в / usr / sbin.
EnzoR

"Ніякого способу цього не уникнути" - цілком прийнятна відповідь. Крім того, схоже, що TraceFS більше не встановлюється за замовчуванням Ubuntu 16.04; попередження при запуску lsofяк звичайний користувач зникла.
Зільк

3
Я 16.04, він не зник - все ще проблема.
TenLeftFingers

@TenLeftFingers Працює в моїй сучасній Kubuntu 16.04!
EnzoR

3

У мене була така ж проблема, і ця відповідь допомогла мені зрозуміти проблему трохи краще.

Я з'ясував, що один із способів усунути набридливе попередження - це придумати налагодження

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

Проблема полягає в тому, що у вас немає дозволу на доступ до каталогу налагоджень. Каталог tracefs був створений, щоб люди могли монтувати каталог відстеження безпосередньо в / sys / kernel / tracing і не вимагати включення налагодження. Але для зворотної сумісності, під час монтажу каталогу налагоджень, воно автоматично монтує сліди у каталог «відстеження» налагодження.

Тепер, коли ви виконуєте lsof, він переглядає файл / proc / fileystems, а також / proc / mounts. Він бачить, що tracefs встановлюється в / sys / kernel / debug / tracing, і тому намагається його встановити. На жаль, через те, що / sys / kernel / debug не дозволяють користувачам некореневого режиму бачити всередині нього, ви отримуєте повідомлення про помилку при спробі встановити каталог "трасування" зсередини / sys / kernel / debug. Якщо ви відключите каталог налагоджень, попередження відключиться.


0

Попередження написано на stderr. Ви завжди можете просто перенаправити це на / dev / null:

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

Ура,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.