lsof: ATTENZIONE: impossibile stat () file system fuse.gvfsd-fuse


25

Cosa sta succedendo esattamente qui?

root@bob-p7-1298c:/# ls -l /tmp/report.csv && lsof | grep "report.csv"
-rw-r--r-- 1 mysql mysql 1430 Dec  4 12:34 /tmp/report.csv
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

Ricevi questo avviso solo quando emetti lsof(senza |e e grep)?
Sree,

Lo stesso avviso si verifica in entrambi i modi, ma lsofgenera solo un ampio elenco di file aperti. Penso che sia un problema secondario. Ho pensato che forse il file fosse tenuto aperto da un processo e che potrebbe essere stato il motivo per cui root non è stato in grado di spostare il file, ma questo non sembra essere il caso. Da qui la confusione.
jmunsch,

1
sì, sembra che can't stat...sia un altro problema. Presumo che il vero problema sia l' No such file or directoryerrore che stai riscontrando. Potrebbe sembrare idiota, ma esiste la posizione / home / bob / Desktop?
Sree,

Risposte:


30

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

11

lsofcerca sempre di ottenere alcune informazioni di base su tutti i filesystem, anche se gli argomenti implicano che nessun risultato verrà da un particolare filesystem. Se non è in grado di accedere a un filesystem (in particolare, per chiamare statal suo mount point, come dice il messaggio), si lamenta.

Come root, normalmente avresti il ​​permesso di accedere ai filesystem. Tuttavia, a causa del funzionamento interno di FUSE , root non ha automaticamente tutti i poteri su un filesystem FUSE. Questa non è una funzionalità di sicurezza (root può diventare l'utente proprietario del filesystem e ottenere l'accesso in questo modo), è una limitazione tecnica.

GVFS-FUSE è un'interfaccia FUSE per GVFS , che è un meccanismo che consente alle applicazioni Gnome di accedere ai filesystem virtuali implementati dai plugin Gnome: GVFS concede alle applicazioni non Gnome l'accesso a questi filesystem virtuali tramite la normale interfaccia del filesystem.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.