lsof: AVERTISSEMENT: impossible de stat () fuse.gvfsd-fuse système de fichiers

25

Que se passe-t-il exactement ici?

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
la source
Recevez-vous cet avertissement lorsque vous émettez uniquement lsof(sans |et grep)?
Sree
Le même avertissement se produit dans les deux cas, mais lsofgénère simplement une grande liste des fichiers ouverts. Je pense que c'est un problème secondaire. J'ai pensé que le fichier était peut-être maintenu ouvert par un processus et que cela pouvait être la raison pour laquelle root n'a pas pu déplacer le fichier, mais cela ne semble pas être le cas. D'où la confusion.
jmunsch
1
oui, on dirait que can't stat...c'est un autre problème. Je suppose que le vrai problème est l' No such file or directoryerreur que vous obtenez. Cela peut sembler idiot, mais l'emplacement / home / bob / Desktop existe-t-il?
Sree

Réponses:

30

FUSE et ses droits d'accès

lsofpar défaut, vérifie tous les systèmes de fichiers montés, y compris les systèmes de fichiers FUSE implémentés dans l'espace utilisateur qui ont des droits d'accès spéciaux sous Linux.

Comme vous pouvez le voir dans cette réponse sur Ask Ubuntu, un système de fichiers GVFS monté (cas particulier de FUSE) n'est normalement accessible qu'à l'utilisateur qui l'a monté (le propriétaire de gvfsd-fuse). Même rootne peut y accéder. Pour contourner cette restriction, il est possible d'utiliser les options de montage allow_rootet allow_other. L'option doit également être activée dans le démon FUSE qui est décrit par exemple dans cette réponse ... mais dans votre cas, vous n'avez pas besoin (et ne devez pas) modifier les droits d'accès.

Exclusion de systèmes de fichiers de lsof

Dans votre cas, il lsofn'est pas nécessaire de vérifier les systèmes de fichiers GVFS afin que vous puissiez exclure les stat()appels sur eux en utilisant l' -eoption (ou vous pouvez simplement ignorer le waring):

lsof -e /run/user/1000/gvfs

Vérification de certains fichiers par lsof

Vous utilisez lsofpour obtenir des informations sur tous les processus en cours d'exécution sur votre système et vous filtrez ensuite la sortie complète à l'aide de grep. Si vous souhaitez vérifier uniquement certains fichiers et que les processus associés utilisent l' -foption sans qu'une valeur la suive directement, spécifiez une liste de fichiers après le séparateur "fin des options" --. Ce sera considérablement plus rapide.

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

Solution générale

Pour exclure tous les systèmes de fichiers montés sur lesquels stat()échoue, vous pouvez exécuter quelque chose comme ceci (en bash):

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

Ou pour être sûr d'utiliser stat()( test -epourrait être implémenté d'une manière différente):

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

lsofessaie toujours d'obtenir des informations de base sur tous les systèmes de fichiers, même si les arguments impliquent qu'aucun résultat ne proviendra d'un système de fichiers particulier. S'il est incapable d'accéder à un système de fichiers (en particulier, d'appeler statà son point de montage, comme le dit le message), il se plaint.

En tant que root, vous auriez normalement la permission d'accéder aux systèmes de fichiers. Cependant, en raison du fonctionnement interne de FUSE , root n'a pas automatiquement tous les pouvoirs sur un système de fichiers FUSE. Ce n'est pas une fonction de sécurité (root peut devenir l'utilisateur qui possède le système de fichiers et y accéder de cette façon), c'est une limitation technique.

GVFS-FUSE est une interface FUSE à GVFS , qui est un mécanisme qui permet aux applications Gnome d'accéder aux systèmes de fichiers virtuels implémentés par les plugins Gnome: GVFS accorde aux applications non-Gnome l'accès à ces systèmes de fichiers virtuels via l'interface du système de fichiers standard.

Gilles 'SO- arrête d'être méchant'
la source