FUSE e i suoi diritti di accesso
lsofper impostazione predefinita controlla tutti i file system montati, incluso FUSE , i file system implementati nello spazio utente con diritti di accesso speciali in Linux.
Come puoi vedere in questa risposta su Ask Ubuntu, un file system GVFS montato (caso speciale di FUSE) è normalmente accessibile solo all'utente che lo ha montato (il proprietario di gvfsd-fuse). Anche rootnon riesco ad accedervi. Per ignorare questa limitazione è possibile utilizzare le opzioni di mount allow_roote allow_other. L'opzione deve essere abilitata anche nel demone FUSE che è descritto ad esempio in questa risposta ... ma nel tuo caso non è necessario (e non dovrebbe) modificare i diritti di accesso.
Escludendo i file system da lsof
Nel tuo caso lsofnon è necessario controllare i file system GVFS in modo da poter escludere le stat()chiamate su di essi utilizzando l' -eopzione (o semplicemente ignorare l'avvertimento):
lsof -e /run/user/1000/gvfs
Controllo di alcuni file tramite lsof
Si sta utilizzando lsofper ottenere informazioni su tutti i processi in esecuzione sul proprio sistema e solo allora filtrare l'output completo utilizzando grep. Se si desidera controllare solo alcuni file e i relativi processi utilizzano l' -fopzione senza un valore che la segue direttamente, specificare un elenco di file dopo il separatore "fine opzioni" --. Questo sarà notevolmente più veloce.
lsof -e /run/user/1000/gvfs -f -- /tmp/report.csv
Soluzione generale
Per escludere tutti i file system montati su cui stat()non si riesce, è possibile eseguire qualcosa del genere (in bash):
x=(); for a in $(mount | cut -d' ' -f3); do test -e "$a" || x+=("-e$a"); done
lsof "${x[@]}" -f -- /tmp/report.csv
O per essere sicuri di usare stat()( test -epotrebbe essere implementato in modo diverso):
x=(); for a in $(mount | cut -d' ' -f3); do stat --printf= "$a" 2>/dev/null || x+=("-e$a"); done
lsof(senza|e e grep)?