lsof: ADVERTENCIA: no se puede stat () fuse.gvfsd-fuse file system

25

¿Qué está pasando exactamente aquí?

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.
jmunsch
fuente
¿Recibe esta advertencia cuando emite solo lsof(sin el |y grep)?
Sree
La misma advertencia se produce en ambos sentidos, pero solo lsofgenera una gran lista de los archivos abiertos. Creo que es un problema secundario. Pensé que tal vez el archivo se mantuvo abierto por un proceso y esa podría haber sido la razón por la cual root no pudo mover el archivo, pero ese no parece ser el caso. De ahí la confusión.
jmunsch
1
Sí, parece que can't stat...es otro problema. Supongo que el verdadero problema es el No such file or directoryerror que está recibiendo. Esto puede sonar idiota, pero ¿existe la ubicación / home / bob / Desktop?
Sree

Respuestas:

30

FUSE y sus derechos de acceso

lsofde forma predeterminada, verifica todos los sistemas de archivos montados, incluido FUSE , sistemas de archivos implementados en el espacio del usuario que tienen derechos de acceso especiales en Linux.

Como puede ver en esta respuesta en Preguntar a Ubuntu, un sistema de archivos GVFS montado (caso especial de FUSE) normalmente es accesible solo para el usuario que lo montó (el propietario de gvfsd-fuse). Incluso rootno puedo acceder a él. Para anular esta restricción, es posible utilizar las opciones de montaje allow_rooty allow_other. La opción también debe estar habilitada en el demonio FUSE que se describe, por ejemplo, en esta respuesta ... pero en su caso no necesita (y no debe) cambiar los derechos de acceso.

Excluyendo sistemas de archivos de lsof

En su caso lsof, no necesita verificar los sistemas de archivos GVFS para que pueda excluir las stat()llamadas en ellos utilizando la -eopción (o simplemente puede ignorar la advertencia):

lsof -e /run/user/1000/gvfs

Comprobación de ciertos archivos por lsof

Está utilizando lsofpara obtener información sobre todos los procesos que se ejecutan en su sistema y solo entonces filtra el resultado completo utilizando grep. Si desea verificar solo ciertos archivos y los procesos relacionados, use la -fopción sin un valor que lo siga directamente y luego especifique una lista de archivos después del separador "fin de opciones" --. Esto será considerablemente más rápido.

lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv

Solución general

Para excluir todos los sistemas de archivos montados en los que stat()falla, puede ejecutar algo como esto (en bash):

x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv

O para estar seguro de usar stat()( test -epodría implementarse de una manera diferente):

x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done
pabouk
fuente
11

lsofsiempre trata de obtener información básica sobre todos los sistemas de archivos, incluso si los argumentos implican que no habrá ningún resultado de un sistema de archivos en particular. Si no puede acceder a un sistema de archivos (específicamente, para llamar stata su punto de montaje, como dice el mensaje), se queja.

Como root, normalmente tendría permiso para acceder a los sistemas de archivos. Sin embargo, debido al funcionamiento interno de FUSE , la raíz no tiene automáticamente todas las potencias en un sistema de archivos FUSE. Esta no es una característica de seguridad (la raíz puede convertirse en el usuario propietario del sistema de archivos y obtener acceso de esa manera), es una limitación técnica.

GVFS-FUSE es una interfaz FUSE para GVFS , que es un mecanismo que permite a las aplicaciones Gnome acceder a los sistemas de archivos virtuales implementados por los complementos de Gnome: GVFS otorga a las aplicaciones que no son Gnome acceso a estos sistemas de archivos virtuales a través de la interfaz del sistema de archivos regular.

Gilles 'SO- deja de ser malvado'
fuente