FUSE e seus direitos de acesso
lsof
por padrão verifica todos os sistemas de arquivos montados, incluindo FUSE - sistemas de arquivos implementados no espaço do usuário que têm acesso especial direitos no Linux.
Como você pode ver nesta resposta no Ask Ubuntu , um GVFS (caso especial do FUSE) é normalmente acessível apenas ao usuário que o montou (o proprietário de gvfsd-fuse
). Mesmo root
não pode acessá-lo. Para substituir essa restrição, é possível usar as opções de montagem allow_root
e allow_other
. A opção também deve estar ativada no daemon do FUSE, que é descrito, por exemplo, nesta resposta ... mas no seu caso você não precisa (e não deve) alterar os direitos de acesso.
Excluindo sistemas de arquivos de lsof
No seu caso lsof
não precisa verificar os sistemas de arquivos GVFS para que você possa excluir as chamadas stat()
sobre eles usando a opção -e
(ou você pode simplesmente ignorar a advertência):
lsof -e /run/user/1000/gvfs
Verificando certos arquivos por lsof
Você está usando lsof
para obter informações sobre todos os processos em execução em seu sistema e somente depois filtra a saída completa usando grep
. Se você quiser verificar apenas determinados arquivos e os processos relacionados, use a opção -f
sem um valor diretamente seguindo-o, em seguida, especifique uma lista de arquivos após o separador "fim de opções" --
. Isso será consideravelmente mais rápido.
lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv
Solução geral
Para excluir todos os sistemas de arquivos montados nos quais stat()
falha, é possível executar algo assim (em bash
):
x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv
Ou para ter certeza de usar stat()
( test -e
poderia ser implementado de uma maneira diferente):
x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done