Capitolo 6. Utility di monitoraggio del sistema

Sommario

6.1. Elenco dei file aperti: lsof
6.2. Utente che accede ai file: fuser
6.3. Proprietà dei file: stat
6.4. Dispositivi USB: lsusb
6.5. Informazioni su un dispositivo SCSI: scsiinfo
6.6. Processi: top
6.7. Elenco dei processi: ps
6.8. Albero dei processi: pstree
6.9. Utenti e relative azioni: w
6.10. Uso della memoria: free
6.11. Buffer ad anello del kernel: dmesg
6.12. File system e relativo uso: mount, df e du
6.13. File system /proc
6.14. Risorse PCI: lspci
6.15. Chiamate di sistema di un programma eseguito: strace
6.16. Chiamate di libreria di un programma eseguito: ltrace
6.17. Impostazione della libreria necessaria: ldd
6.18. Ulteriori informazioni sui file binari ELF
6.19. Comunicazione tra processi: ipcs
6.20. 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, dopo > 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.


6.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:

tester@linux:~> lsof -p $$
COMMAND  PID   USER   FD   TYPE DEVICE    SIZE   NODE NAME
bash    5552 tester  cwd    DIR    3,3    1512 117619 /home/tester
bash    5552 tester  rtd    DIR    3,3     584      2 /
bash    5552 tester  txt    REG    3,3  498816  13047 /bin/bash
bash    5552 tester  mem    REG    0,0              0 [heap] (stat: No such \
 file or directory)
bash    5552 tester  mem    REG    3,3  217016 115687 /var/run/nscd/passwd
bash    5552 tester  mem    REG    3,3  208464  11867 \
 /usr/lib/locale/en_GB.utf8/LC_CTYPE
bash    5552 tester  mem    REG    3,3  882134  11868 \
 /usr/lib/locale/en_GB.utf8/LC_COLLATE
bash    5552 tester  mem    REG    3,3 1386997   8837 /lib/libc-2.3.6.so
bash    5552 tester  mem    REG    3,3   13836   8843 /lib/libdl-2.3.6.so
bash    5552 tester  mem    REG    3,3  290856  12204 /lib/libncurses.so.5.5
bash    5552 tester  mem    REG    3,3   26936  13004 /lib/libhistory.so.5.1
bash    5552 tester  mem    REG    3,3  190200  13006 /lib/libreadline.so.5.1
bash    5552 tester  mem    REG    3,3      54  11842 \
 /usr/lib/locale/en_GB.utf8/LC_NUMERIC
bash    5552 tester  mem    REG    3,3    2375  11663 \
 /usr/lib/locale/en_GB.utf8/LC_TIME
bash    5552 tester  mem    REG    3,3     290  11736 \
 /usr/lib/locale/en_GB.utf8/LC_MONETARY
bash    5552 tester  mem    REG    3,3      52  11831 \
 /usr/lib/locale/en_GB.utf8/LC_MESSAGES/SYS_LC_MESSAGES
bash    5552 tester  mem    REG    3,3      34  11862 \
 /usr/lib/locale/en_GB.utf8/LC_PAPER
bash    5552 tester  mem    REG    3,3      62  11839 \
 /usr/lib/locale/en_GB.utf8/LC_NAME
bash    5552 tester  mem    REG    3,3     127  11664 \
 /usr/lib/locale/en_GB.utf8/LC_ADDRESS
bash    5552 tester  mem    REG    3,3      56  11735 \
 /usr/lib/locale/en_GB.utf8/LC_TELEPHONE
bash    5552 tester  mem    REG    3,3      23  11866 \
 /usr/lib/locale/en_GB.utf8/LC_MEASUREMENT
bash    5552 tester  mem    REG    3,3   21544   9109 \
 /usr/lib/gconv/gconv-modules.cache
bash    5552 tester  mem    REG    3,3     366   9720 \
 /usr/lib/locale/en_GB.utf8/LC_IDENTIFICATION
bash    5552 tester  mem    REG    3,3   97165   8828 /lib/ld-2.3.6.so
bash    5552 tester    0u   CHR  136,5              7 /dev/pts/5
bash    5552 tester    1u   CHR  136,5              7 /dev/pts/5
bash    5552 tester    2u   CHR  136,5              7 /dev/pts/5
bash    5552 tester  255u   CHR  136,5              7 /dev/pts/5
  

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:

tester@linux:~> lsof | grep CHR
bash      3838     tester    0u      CHR  136,0                 2 /dev/pts/0
bash      3838     tester    1u      CHR  136,0                 2 /dev/pts/0
bash      3838     tester    2u      CHR  136,0                 2 /dev/pts/0
bash      3838     tester  255u      CHR  136,0                 2 /dev/pts/0
bash      5552     tester    0u      CHR  136,5                 7 /dev/pts/5
bash      5552     tester    1u      CHR  136,5                 7 /dev/pts/5
bash      5552     tester    2u      CHR  136,5                 7 /dev/pts/5
bash      5552     tester  255u      CHR  136,5                 7 /dev/pts/5
X         5646       root  mem       CHR    1,1              1006 /dev/mem
lsof      5673     tester    0u      CHR  136,5                 7 /dev/pts/5
lsof      5673     tester    2u      CHR  136,5                 7 /dev/pts/5
grep      5674     tester    1u      CHR  136,5                 7 /dev/pts/5
grep      5674     tester    2u      CHR  136,5                 7 /dev/pts/5