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ême root
ne peut y accéder. Pour contourner cette restriction, il est possible d'utiliser les options de montage allow_root
et 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 lsof
n'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' -e
option (ou vous pouvez simplement ignorer le waring):
lsof -e /run/user/1000/gvfs
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 de grep
. 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.
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 -e
pourrait ê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
lsof
(sans|
et grep)?