Dlaczego lsof narzeka na tracefy?


11

Każde wykonanie lsofwydaje ostrzeżenie o 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)

(To jest na Ubuntu 15.10, w pełni zaktualizowane)

Czy to normalne, że TraceFS jest montowany podczas normalnej pracy?
Jeśli tak, jak mogę lsofto pominąć?

Odpowiedzi:


12

Odpowiedź na twoje pytanie znajduje się w uprawnieniach do plików:

próbować:

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

Tak więc normalni użytkownicy nie mają dostępu /sys/kernel/debug/tracingi wydaje się, że nie ma sposobu, aby poprosić lsofo uniknięcie dostępu.

Możemy wtedy omówić, czy to błąd, czy nie, ale odpowiedź na to pytanie sprowadza się do tego.


Co masz na myśli mówiąc „błąd”? „lsof” musi zostać wykonane przy pomocy „sudo” lub jako „root”.
Rinzwind,

1
lsof nie musi być uruchamiany jako root. Możemy dyskutować o jego bezpieczeństwie (patrz man lsof), ale zdecydowanie nie musi być uruchamiany tylko z grantami superużytkowników. Znajduje się w / usr / bin, a nie w / usr / sbin.
EnzoR

„Nie ma sposobu, aby tego uniknąć” jest całkowicie akceptowalną odpowiedzią. Poza tym wydaje się, że TraceFS nie jest już domyślnie montowany od wersji Ubuntu 16.04; ostrzeżenie, gdy działa lsofjako zwykły użytkownik, zniknęło.
Zilk

3
Jestem 16.04, to nie zniknęło - wciąż problem.
TenLeftFingers

@TenLeftFingers Działa w moim aktualnym Kubuntu 16.04!
EnzoR

3

Miałem ten sam problem i ta odpowiedź pomogła mi lepiej zrozumieć problem.

Dowiedziałem się, że jednym ze sposobów usunięcia irytującego ostrzeżenia jest umount debugfs

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

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

Jeśli teraz biegniesz, lsofnie ma ostrzeżenia.


2
właśnie dlatego poszukałem. Nie obchodzi mnie tak bardzo, dlaczego pojawia się błąd. Naprawdę chcę tylko, żeby zniknęło. Dzięki damko!
cjac

umount: /sys/kernel/debug: target is busy.
msangel

2

Problem polega na tym, że nie masz uprawnień dostępu do katalogu debugfs. Katalog tracefs został stworzony, aby umożliwić montowanie katalogu śledzenia bezpośrednio w / sys / kernel / tracing i nie wymaga włączania debugfs. Ale dla kompatybilności wstecznej, podczas montowania katalogu debugfs, automatycznie montowałby tracefs w katalogu „śledzenia” debugfs.

Teraz, kiedy wykonujesz lsof, patrzy on na plik / proc / filesystems, jak również / proc / mounts. Widzi, że tracefs jest montowany w / sys / kernel / debug / tracing, i dlatego próbuje go stat. Niestety, ponieważ / sys / kernel / debug nie pozwoli użytkownikom innym niż root zobaczyć go w środku, pojawia się komunikat o błędzie podczas próby statycznej śledzenia katalogu z / sys / kernel / debug. Jeśli odmontujesz katalog debugfs, ostrzeżenie zniknie.


0

Ostrzeżenie jest napisane do stderr. Zawsze możesz po prostu przekierować to do / dev / null:

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

Twoje zdrowie,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.