Perché lsof si lamenta dei tracefs?


11

Ogni esecuzione di lsofun avviso su 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)

(Questo è su Ubuntu 15.10, completamente aggiornato)

È normale che TraceFS venga montato durante il normale funzionamento?
Se è così, come posso dire lsofdi saltarlo?

Risposte:


12

La risposta alla tua domanda è nelle autorizzazioni del file:

provare:

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

Pertanto, gli utenti normali non sono autorizzati ad accedere /sys/kernel/debug/tracinge sembra che non ci sia modo di chiedere lsofdi evitarne l'accesso.

Potremmo quindi discutere se si tratta di un bug o meno, ma la risposta alla tua domanda si riduce a questo.


Cosa intendi con "bug"? "lsof" deve essere eseguito con "sudo" o come "root".
Rinzwind,

1
Non è necessario eseguire lsof come root. Possiamo discutere della sua sicurezza (vedi man lsof) ma sicuramente non deve essere eseguito solo con sovvenzioni da superutente. Si trova in / usr / bin non in / usr / sbin.
EnzoR,

"Nessun modo per evitarlo" è una risposta perfettamente accettabile. Inoltre, sembra che TraceFS non sia più montato di default a partire da Ubuntu 16.04; l'avviso durante l'esecuzione lsofcome utente normale è ora scomparso.
Zilk,

3
Sono il 16.04, non è scomparso, ancora un problema.
TenLeftFingers

@TenLeftFingers Funziona nel mio aggiornato Kubuntu 16.04!
EnzoR,

3

Ho avuto lo stesso problema e questa risposta mi ha aiutato a capire meglio il problema.

Ho scoperto che un modo per rimuovere il fastidioso avviso è smontare debugfs

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

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

Se ora corri lsofnon c'è alcun avviso.


2
questo è davvero il motivo per cui sono venuto a cercare. Non mi interessa molto il motivo per cui viene visualizzato l'errore. Voglio solo che vada via. Grazie damko!
cjac,

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

2

Il problema è che non si dispone dell'autorizzazione per accedere alla directory di debugfs. La directory tracefs è stata creata per consentire alle persone di montare la directory di traccia direttamente su / sys / kernel / tracing e non è necessario abilitare il debugfs. Ma per compatibilità con le versioni precedenti, quando si monta la directory debugfs, monterebbe automaticamente tracefs nella directory "tracing" di debugfs.

Ora quando esegui lsof, guarda il file / proc / filesystems e / proc / mounts. Vede che tracefs è montato su / sys / kernel / debug / tracing, e quindi cerca di stat. Sfortunatamente, poiché / sys / kernel / debug non consente agli utenti non root di vedere al suo interno, viene visualizzato il messaggio di errore quando si tenta di stabilire la "traccia" della directory all'interno di / sys / kernel / debug. Se si smonta la directory di debugfs, l'avviso scompare.


0

L'avvertimento è scritto in stderr. Puoi sempre reindirizzare questo su / dev / null:

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

Saluti,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.