FUSE und seine Zugriffsrechte
lsof
Standardmäß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 root
kann nicht darauf zugreifen. Um diese Einschränkung aufzuheben, können Sie die Mount-Optionen allow_root
und 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 lsof
müssen Sie die GVFS-Dateisysteme nicht überprüfen, damit Sie die stat()
Aufrufe mit der -e
Option 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 -f
Option 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 -e
kö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 ?