FUSE und seine Zugriffsrechte
lsofStandardmäßig werden alle gemounteten Dateisysteme überprüft, einschließlich FUSE- Dateisysteme, die im Benutzerbereich implementiert sind und unter Linux über besondere Zugriffsrechte verfügen.
Wie Sie in dieser Antwort auf Ask Ubuntu sehen können, ist ein gemountetes GVFS- Dateisystem (Sonderfall von FUSE) normalerweise nur für den Benutzer zugänglich, der es gemountet hat (der Besitzer von gvfsd-fuse). Auch rootkann nicht darauf zugreifen. Um diese Einschränkung aufzuheben, können Sie die Mount-Optionen allow_rootund verwenden allow_other. Die Option muss auch im FUSE-Dämon aktiviert sein, der zum Beispiel in dieser Antwort beschrieben wird. In Ihrem Fall müssen (und sollten) Sie jedoch die Zugriffsrechte nicht ändern.
Dateisysteme von lsof ausschließen
In Ihrem Fall lsofmüssen Sie die GVFS-Dateisysteme nicht überprüfen, damit Sie die stat()Aufrufe mit der -eOption ausschließen können (oder Sie können das Waring einfach ignorieren):
lsof -e /run/user/1000/gvfs
Überprüfen bestimmter Dateien durch lsof
Sie verwenden lsof, um Informationen zu allen auf Ihrem System ausgeführten Prozessen abzurufen, und filtern erst dann die gesamte Ausgabe mit grep. Wenn Sie nur bestimmte Dateien und die zugehörigen Prozesse überprüfen möchten, verwenden Sie die -fOption ohne einen Wert, der direkt darauf folgt, und geben Sie eine Liste der Dateien nach dem Trennzeichen "Ende der Optionen" an --. Dies wird erheblich schneller sein.
lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv
Allgemeine lösung
Um alle gemounteten Dateisysteme auszuschließen, auf denen ein stat()Fehler auftritt, können Sie Folgendes ausführen (in bash):
x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv
Oder um sicher zu gehen stat()( test -ekönnte auch anders implementiert werden):
x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done
lsof(ohne das|und grep) ausgeben ?