¿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.
privileges
lsof
fuse
jmunsch
fuente
fuente
lsof
(sin el|
y grep)?lsof
genera 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.can't stat...
es otro problema. Supongo que el verdadero problema es elNo such file or directory
error que está recibiendo. Esto puede sonar idiota, pero ¿existe la ubicación / home / bob / Desktop?Respuestas:
FUSE y sus derechos de acceso
lsof
de 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
). Inclusoroot
no puedo acceder a él. Para anular esta restricción, es posible utilizar las opciones de montajeallow_root
yallow_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 lasstat()
llamadas en ellos utilizando la-e
opción (o simplemente puede ignorar la advertencia):Comprobación de ciertos archivos por lsof
Está utilizando
lsof
para obtener información sobre todos los procesos que se ejecutan en su sistema y solo entonces filtra el resultado completo utilizandogrep
. Si desea verificar solo ciertos archivos y los procesos relacionados, use la-f
opció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.Solución general
Para excluir todos los sistemas de archivos montados en los que
stat()
falla, puede ejecutar algo como esto (enbash
):O para estar seguro de usar
stat()
(test -e
podría implementarse de una manera diferente):fuente
lsof
siempre 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 llamarstat
a 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.
fuente