Por que lsof reclama de tracefs?

11

Toda execução de lsofum aviso sobre o TraceFS emite:

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

(Este é o Ubuntu 15.10, totalmente atualizado)

É normal que o TraceFS seja montado durante a operação normal?
Se sim, como posso dizer lsofpara ignorá-lo?

Zilk
fonte

Respostas:

12

A resposta para sua pergunta está nas permissões de arquivo:

tentar:

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

Portanto, usuários normais não têm permissão para acessar /sys/kernel/debug/tracinge parece não haver maneira de pedir lsofpara evitar acessá-lo.

Poderíamos então discutir se isso é um bug ou não, mas a resposta para sua pergunta se resume a isso.

EnzoR
fonte
O que você quer dizer com "bug"? "lsof" precisa ser executado com "sudo" ou como "root".
Rinzwind
11
lsof não precisa ser executado como root. Podemos discutir sobre sua segurança (consulte man lsof), mas definitivamente não precisa ser executado apenas com concessões de superusuário. Ele fica em / usr / bin e não em / usr / sbin.
EnzoR
"Não há como evitá-lo" é uma resposta perfeitamente aceitável. Além disso, parece que o TraceFS não é mais montado por padrão a partir do Ubuntu 16.04; o aviso ao executar lsofcomo um usuário normal agora desapareceu.
Zilk
3
Estou no 16.04, não desapareceu - ainda é um problema.
TenLeftFingers
@TenLeftFingers Está funcionando no meu Kubuntu 16.04 atualizado!
EnzoR
3

Eu tive o mesmo problema e esta resposta me ajudou a entender um pouco melhor o problema.

Eu descobri que uma maneira de remover o aviso irritante é desmontar debugfs

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

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

Se você executar agora, lsofnão há aviso.

damko
fonte
2
foi por isso que eu vim procurar. Eu não me importo muito porque o erro está aparecendo. Eu realmente só quero que vá embora. Obrigado damko!
cjac
umount: /sys/kernel/debug: target is busy.
msangel
2

O problema é que você não tem permissão para acessar o diretório debugfs. O diretório tracefs foi criado para permitir que as pessoas montem o diretório de rastreamento diretamente em / sys / kernel / tracing e não requerem a ativação de debugfs. Mas, para compatibilidade com versões anteriores, ao montar o diretório debugfs, ele montaria automaticamente os tracefs no diretório "rastreio" dos debugfs.

Agora, quando você executa lsof, ele olha para o arquivo / proc / filesystems e para / proc / mounts. Ele vê que o tracefs está montado em / sys / kernel / debug / tracing e, portanto, tenta fazer o stat. Infelizmente, como o / sys / kernel / debug não permite que usuários não-root vejam dentro dele, você recebe a mensagem de erro ao tentar declarar o diretório "rastreio" de / sys / kernel / debug. Se você desmontar o diretório debugfs, o aviso desaparecerá.

nevets
fonte
0

O aviso é gravado em stderr. Você sempre pode redirecionar isso para o / dev / null:

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

Felicidades,

QuickPrototype
fonte