Capítulo 6. Utilidades de monitorización del sistema

Tabla de contenidos

6.1. Lista de archivos abiertos: lsof
6.2. Usuarios que acceden a los archivos: fuser
6.3. Propiedades del archivo: stat
6.4. Dispositivos USB: lsusb
6.5. Información acerca de un dispositivo SCSI: scsiinfo
6.6. Procesos: top
6.7. Lista de procesos: ps
6.8. Árbol de procesos: pstree
6.9. Usuarios y acciones w
6.10. Utilización de la memoria: free
6.11. Buffer de anillo del núcleo: dmesg
6.12. Sistemas de archivos y su utilización: mount, df y du
6.13. Sistema de archivos /proc
6.14. Recursos PCI: lspci
6.15. Llamadas del sistema para ejecutar un programa: strace
6.16. Llamadas de la biblioteca para ejecutar un programa: ltrace
6.17. Especificación de la biblioteca necesaria: ldd
6.18. Información adicional acerca de los binarios ELF
6.19. Comunicación entre procesos: ipcs
6.20. Medición del tiempo con time

Resumen

Se pueden utilizar varios programas y mecanismos, algunos de los cuales están representados aquí, para examinar el estado del sistema. También se describen algunas utilidades especialmente indicadas para las tareas habituales, junto con los parámetros más importantes.

Para cada uno de los comandos introducidos, se presentan ejemplos de las salidas relevantes. En estos ejemplos, la primera línea es el comando en sí mismo (después del signo > o de la almohadilla). Las omisiones se indican con corchetes ([...]) y las líneas largas se acortan cuando es necesario. Los saltos de línea para las líneas largas se indican con una barra invertida (\).

# 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

Se han hecho descripciones cortas para permitir que se mencionen tantas utilidades como sea posible. El resto de información de todos los comandos se puede encontrar en las páginas Man. La mayoría de comandos también admiten el parámetro --help, que produce una lista breve de posibles parámetros.


6.1. Lista de archivos abiertos: lsof

Para ver una lista de todos los archivos abiertos para el proceso con el ID de proceso PID, utilice -p. Por ejemplo, para ver todos los archivos utilizados por la shell actual, introduzca:

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
  

Se ha utilizado la variable de la shell especial $$, cuyo valor es el ID de proceso de la shell.

El comando lsof muestra todos los archivos abiertos actualmente si se utilizan sin ningún parámetro. Como suele haber miles de archivos abiertos, mostrarlos todos casi nunca es útil. Sin embargo, la lista de todos los archivos se puede combinar con las funciones de búsqueda para generar listas útiles. Por ejemplo, muestre todos los dispositivos de caracteres utilizados:

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