FUSE e i suoi diritti di accesso
lsof
per 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 root
non riesco ad accedervi. Per ignorare questa limitazione è possibile utilizzare le opzioni di mount allow_root
e 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 lsof
non è necessario controllare i file system GVFS in modo da poter escludere le stat()
chiamate su di essi utilizzando l' -e
opzione (o semplicemente ignorare l'avvertimento):
lsof -e /run/user/1000/gvfs
Controllo di alcuni file tramite lsof
Si sta utilizzando lsof
per 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' -f
opzione 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 -e
potrebbe 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)?