lsof e opensnoop sono due comandi da Terminale per avere istantanea e storico delle processi sui file.
Quante volte sarà accaduto che andando a cancellare un file o ad aprirlo dopo averlo “maneggiato” per vari software il sistema abbia restituito il messaggio poco gradito che “la risorsa è occupata” o gestita da altro programma? Sicuramente almeno un volta nella vita e dinanzi a tali messaggi, non avendo alcun programma parte tantomeno sul file in oggetto, monta il desiderio di sapere chi stia bloccando il file in modo tale da evitare o la disconnessione o addirittura il riavvio del sistema.
In nostro aiuto arriva la console Terminale, con due comandi che non solo ci permettono di scoprire altre funzionalità da shell, ma anche, soprattutto, di rispondere all’amletico quesito. I comandi sono: lsof e opensnoop.
Entrambi svolgo la medesima funzione ma con una differenza: lsof ci offre un’istantanea di chi stia usando la risorsa, nell’instante dell’invocazione del comando mentre opensnoop una fotografia dei processi che usano il file, indipendentemente o meno se nel momento della nostra richiesta, lo stiano effettivamente modificando.
La sintassi è identica per entrambi (comando /percorso/nomefile.estensione) , che chiariamo con un esempio:
- Digitando da console (lsof /var/log /system.log) otteniamo come risultato:
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Console 84281 Will 8r REG 14,2 140239 71929128 /private/var/log/system.log
da cui si evince che al momento system.log è utilizzato dal processo Console (dove stiamo scrivendo…)
Per quanto concerne invece il comando opensnoop, invocato sul medesimo file:
- Digitando da console: sudo opensnoop -f /var/log/system.log
- UID PID COMM FD PATH
501 84358 cat 3 /var/log/system.log
501 45411 console 3 /var/log/system.log
0 15 syslogd 16 /var/log/system.log
mostra come il file oltre al processo console (nella colonna COMM) ha interazione anche con altri processi. Abbiamo aggiunto il parametro -f poiché diversamente da lsof è necessario indicare che quanto a seguire sia il percorso dove allocato il file.
[ Fonte: osXdaily ]