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.
privileges
lsof
fuse
jmunsch
la source
la source
lsof
(sans|
et grep)?lsof
gé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.can't stat...
c'est un autre problème. Je suppose que le vrai problème est l'No such file or directory
erreur que vous obtenez. Cela peut sembler idiot, mais l'emplacement / home / bob / Desktop existe-t-il?Réponses:
FUSE et ses droits d'accès
lsof
par 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êmeroot
ne peut y accéder. Pour contourner cette restriction, il est possible d'utiliser les options de montageallow_root
etallow_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
lsof
n'est pas nécessaire de vérifier les systèmes de fichiers GVFS afin que vous puissiez exclure lesstat()
appels sur eux en utilisant l'-e
option (ou vous pouvez simplement ignorer le waring):Vérification de certains fichiers par lsof
Vous utilisez
lsof
pour 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 degrep
. Si vous souhaitez vérifier uniquement certains fichiers et que les processus associés utilisent l'-f
option 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.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 (enbash
):Ou pour être sûr d'utiliser
stat()
(test -e
pourrait être implémenté d'une manière différente):la source
lsof
essaie 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'appelerstat
à 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.
la source