O que exatamente está acontecendo aqui?
root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec 4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
privileges
lsof
fuse
jmunsch
fonte
fonte
lsof
(sem o|
e grep)?lsof
gera uma grande lista dos arquivos abertos. Eu acho que é uma questão paralela. Eu pensei que talvez o arquivo tenha sido mantido aberto por um processo e talvez esse tenha sido o motivo pelo qual o root não conseguiu mover o arquivo, mas esse não parece ser o caso. Daí a confusão.can't stat...
é outro problema. Presumo que o verdadeiro problema é oNo such file or directory
erro que você está recebendo. Isso pode parecer idiota, mas a localização / home / bob / Desktop existe?Respostas:
FUSE e seus direitos de acesso
lsof
por padrão, verifica todos os sistemas de arquivos montados, incluindo sistemas de arquivos FUSE implementados no espaço do usuário que possuem direitos de acesso especiais no Linux.Como você pode ver nesta resposta em Pergunte ao Ubuntu, um sistema de arquivos GVFS montado (caso especial do FUSE) normalmente é acessível apenas ao usuário que o montou (o proprietário
gvfsd-fuse
). Mesmoroot
não pode acessá-lo. Para substituir essa restrição, é possível usar as opções de montagemallow_root
eallow_other
. A opção também deve ser ativada no daemon do FUSE, 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 é necessário verificar os sistemas de arquivos GVFS para que você possa excluir asstat()
chamadas usando a-e
opção (ou simplesmente ignorar o aviso):Verificando certos arquivos por lsof
Você está usando
lsof
para obter informações sobre todos os processos em execução no sistema e só então filtrar a saída completa usandogrep
. Se você deseja verificar apenas certos arquivos e os processos relacionados, use a-f
opção sem um valor diretamente a seguir, especifique uma lista de arquivos após o separador "fim das opções"--
. Isso será consideravelmente mais rápido.Solução geral
Para excluir todos os sistemas de arquivos montados nos quais
stat()
falha, você pode executar algo como isto (embash
):Ou, certifique-se de usar
stat()
(test -e
pode ser implementado de uma maneira diferente):fonte
lsof
sempre tenta obter algumas informações básicas sobre todos os sistemas de arquivos, mesmo se os argumentos implicarem que nenhum resultado virá de um sistema de arquivos específico. Se não conseguir acessar um sistema de arquivos (especificamente, para chamarstat
no seu ponto de montagem, como diz a mensagem), ele reclama.Como root, você normalmente teria permissão para acessar sistemas de arquivos. No entanto, devido ao funcionamento interno do FUSE , o root não possui automaticamente todos os poderes em um sistema de arquivos do FUSE. Este não é um recurso de segurança (o root pode se tornar o usuário proprietário do sistema de arquivos e obter acesso dessa maneira), é uma limitação técnica.
O GVFS-FUSE é uma interface do FUSE para o GVFS , que é um mecanismo que permite aos aplicativos Gnome acessar sistemas de arquivos virtuais implementados pelos plug-ins do Gnome: O GVFS concede aos aplicativos não-Gnome acesso a esses sistemas de arquivos virtuais por meio da interface regular do sistema de arquivos.
fonte