Capitolo 25. Utility di monitoraggio del sistema

Sommario

25.1. Elenco dei file aperti: lsof
25.2. Utente che accede ai file: fuser
25.3. Proprietà dei file: stat
25.4. Dispositivi USB: lsusb
25.5. Informazioni su un dispositivo SCSI: scsiinfo
25.6. Processi: top
25.7. Elenco dei processi: ps
25.8. Albero dei processi: pstree
25.9. Utenti e relative azioni: w
25.10. Uso della memoria: free
25.11. Buffer ad anello del kernel: dmesg
25.12. File system e relativo uso: mount, df e du
25.13. File system /proc
25.14. vmstat, iostat e mpstat
25.15. procinfo
25.16. Risorse PCI: lspci
25.17. Chiamate di sistema di un programma eseguito: strace
25.18. Chiamate di libreria di un programma eseguito: ltrace
25.19. Impostazione della libreria necessaria: ldd
25.20. Ulteriori informazioni sui file binari ELF
25.21. Comunicazione tra processi: ipcs
25.22. Calcolo della durata mediante time

Estratto

In questo capitolo vengono illustrati alcuni dei numerosi programmi e meccanismi che è possibile utilizzare per esaminare lo stato del sistema. Vengono inoltre descritte alcune utility che semplificano l'esecuzione di operazioni ripetitive con i relativi principali parametri.

Per ogni comando vengono forniti esempi degli output rilevanti. In tali esempi la prima riga contiene il comando vero e proprio, preceduto dal prompt con il segno di dollaro. I commenti sono racchiusi tra parentesi quadre ([...]) e le righe lunghe dove necessario vengono riportate a capo. Le interruzioni di riga sono indicate da una barra rovesciata (\).

$ command -x -y
output line 1
output line 2
output line 3 is annoyingly long, so long that \
    we have to break it
output line 3
[...]
output line 98
output line 99

Al fine di poter presentare il maggior numero di utility possibile, la lunghezza delle descrizioni è stata volutamente limitata. Per ulteriori informazioni su tutti questi comandi, vedere le rispettive documentazioni. La maggior parte di questi comandi supporta inoltre l'opzione --help, che consente di visualizzare un breve elenco dei parametri utilizzabili.

25.1. Elenco dei file aperti: lsof

Per visualizzare un elenco di tutti i file aperti per un processo con l'ID di processo PID, utilizzare -p. Ad esempio, per visualizzare tutti i file utilizzati dalla shell attuale, immettere:

$ lsof -p $$
COMMAND  PID USER   FD   TYPE DEVICE    SIZE     NODE NAME
zsh     4694   jj  cwd    DIR   0,18     144 25487368 /suse/jj/t (totan:/real-home/jj)
zsh     4694   jj  rtd    DIR    3,2     608        2 /
zsh     4694   jj  txt    REG    3,2  441296    20414 /bin/zsh
zsh     4694   jj  mem    REG    3,2  104484    10882 /lib/ld-2.3.3.so
zsh     4694   jj  mem    REG    3,2   11648    20610 /usr/lib/zsh/4.2.0/zsh/rlimits.so
[...]
zsh     4694   jj  mem    REG    3,2   13647    10891 /lib/libdl.so.2
zsh     4694   jj  mem    REG    3,2   88036    10894 /lib/libnsl.so.1
zsh     4694   jj  mem    REG    3,2  316410   147725 /lib/libncurses.so.5.4
zsh     4694   jj  mem    REG    3,2  170563    10909 /lib/tls/libm.so.6
zsh     4694   jj  mem    REG    3,2 1349081    10908 /lib/tls/libc.so.6
zsh     4694   jj  mem    REG    3,2      56    12410 /usr/lib/locale/de_DE.utf8/LC_TELEPHONE
[...]
zsh     4694   jj  mem    REG    3,2      59    14393 /usr/lib/locale/en_US/LC_NUMERIC
zsh     4694   jj  mem    REG    3,2  178476    14565 /usr/lib/locale/en_US/LC_CTYPE
zsh     4694   jj  mem    REG    3,2   56444    20598 /usr/lib/zsh/4.2.0/zsh/computil.so
zsh     4694   jj    0u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj    1u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj    2u   CHR 136,48               50 /dev/pts/48
zsh     4694   jj   10u   CHR 136,48               50 /dev/pts/48

In questo esempio è stata utilizzata la variabile di shell speciale $$, il cui valore corrisponde all'ID di processo della shell.

Se viene utilizzato senza specificare alcun parametro, il comando lsof consente di generare un elenco di tutti i file attualmente aperti. Poiché i file aperti sono spesso nell'ordine delle migliaia, un elenco completo risulta utile solo in rari casi. Per generare elenchi utili, è possibile utilizzare l'elenco di tutti i file in combinazione con apposite funzioni di ricerca. È ad esempio possibile visualizzare un elenco di tutti i dispositivi a caratteri utilizzati:

$ lsof | grep CHR
sshd       4685    root  mem    CHR    1,5             45833 /dev/zero
sshd       4685    root  mem    CHR    1,5             45833 /dev/zero
sshd       4693      jj  mem    CHR    1,5             45833 /dev/zero
sshd       4693      jj  mem    CHR    1,5             45833 /dev/zero
zsh        4694      jj    0u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj    1u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj    2u   CHR 136,48                50 /dev/pts/48
zsh        4694      jj   10u   CHR 136,48                50 /dev/pts/48
X          6476    root  mem    CHR    1,1             38042 /dev/mem
lsof      13478      jj    0u   CHR 136,48                50 /dev/pts/48
lsof      13478      jj    2u   CHR 136,48                50 /dev/pts/48
grep      13480      jj    1u   CHR 136,48                50 /dev/pts/48
grep      13480      jj    2u   CHR 136,48                50 /dev/pts/48