GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar los comandos strace y ltrace en Linux

El comando strace

El comando strace se puede utilizar para interceptar y registrar las llamadas al sistema realizadas y las señales recibidas por un proceso. Esto permite examinar la capa límite entre el usuario y el espacio del kernel, lo que puede ser muy útil para identificar por qué falla un proceso.

El uso de strace para analizar cómo un programa interactúa con el sistema es especialmente útil cuando el código fuente no está disponible. Además de su importancia en la resolución de problemas, strace puede proporcionar una visión profunda de cómo funciona el sistema. Cualquier usuario puede rastrear sus propios procesos en ejecución; además, el usuario raíz puede rastrear cualquier proceso en ejecución. Por ejemplo, lo siguiente podría usarse para adjuntar y rastrear el demonio rsyslogd en ejecución:

# strace -p $(pgrep rsyslogd)
Process 819 attached
select(1, NULL, NULL, NULL, {83009, 275934}
...

salida de seguimiento

La salida de strace corresponderá a una llamada o señal del sistema. El resultado de una llamada al sistema se compone de tres componentes:
1. La llamada al sistema
2. Cualquier argumento entre paréntesis
3. El resultado de la llamada siguiendo un signo igual

Un estado de salida de -1 generalmente indica un error. Por ejemplo:

# strace ls file1
execve("/bin/ls", ["ls", "file1"], [/* 21 vars */]) = 0
brk(0)                                  = 0xadb000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f516bb79000
.....
close(1)                                = 0
munmap(0x7f516bb78000, 4096)            = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Las llaves se utilizan para indicar estructuras C desreferenciadas. Las llaves cuadradas se utilizan para indicar punteros simples o una matriz de valores.

Ejemplos del comando strace

Redirigir el seguimiento a un archivo

Dado que strace a menudo crea una gran cantidad de resultados, a menudo es conveniente redirigirlo a un archivo. Por ejemplo, lo siguiente podría usarse para iniciar bash shell, rastrear cualquier proceso secundario bifurcado y registrar todos los accesos a archivos en el archivo files.trace:

# strace -f -o files.trace -e trace=file bash

Contando el número de llamadas al sistema

Ejecute el comando ls para contar la cantidad de veces que se realizó cada llamada al sistema e imprima los totales que muestran la cantidad y el tiempo dedicado a cada llamada (útil para la creación de perfiles básicos o el aislamiento de cuellos de botella):

# strace -c ls

Ver archivos abiertos por un proceso/demonio

El siguiente ejemplo muestra los tres archivos de configuración que sshd de OpenSSH lee cuando se inicia. Tenga en cuenta que strace envía su salida a STDERR de forma predeterminada, por lo que si desea canalizarla a otros comandos como grep para realizar más modificaciones, debe redirigir la salida de manera adecuada:

# strace -f -eopen /usr/sbin/sshd 2>&1 | grep ssh

Rastrear solo llamadas al sistema relacionadas con la red

Rastree solo las llamadas al sistema relacionadas con la red mientras Netcat intenta conectarse a un servicio telnetd local:

# strace -e trace=network nc localhost 23

El comando ltrace

El comando ltrace se puede usar para interceptar y registrar las llamadas dinámicas realizadas a las bibliotecas compartidas. La cantidad de salida generada por el comando ltrace puede ser abrumadora para algunos comandos (especialmente si se usa la opción -S para mostrar también las llamadas al sistema). Puede enfocar la salida solo en la interacción entre el programa y alguna lista de bibliotecas. Por ejemplo, para ejecutar el comando id -Z y mostrar las llamadas realizadas al módulo libselinux.so, ejecute:

$ ltrace -l /lib/libselinux.so.1 id -Z
is_selinux_enabled(0xc1c7a0, 0x9f291e8, 0xc1affc, 0, -1)a
       =1	
getcon(0x804c2c8, 0xfee80ff4, 0x804b179, 0x804c020, 0)a
       =0
user_u:system_r:unconfined_t

Recuerde que puede ver a qué bibliotecas está vinculado un programa usando el comando ldd.


Linux
  1. Cómo usar los comandos de búsqueda y localización en Linux:una guía para principiantes

  2. Cómo guardar comandos de Linux y usarlos bajo demanda

  3. Cómo usar los comandos Pbcopy y Pbpaste en Linux

  4. Cómo instalar y usar Git en el sistema Linux

  5. Cómo instalar y usar Glances para monitorear sistemas Linux

Cómo instalar y usar Skype en el sistema Linux. Ahora es más fácil

Cómo instalar y usar el compilador GCC en el sistema Linux

Cómo montar y usar una unidad exFAT en un sistema Linux

Cómo instalar y usar Tmux (terminal multiplexor) en el sistema Linux

Cómo instalar y usar AsciiDoc en el sistema Linux

Cómo instalar y usar el emulador de terminal Konsole en el sistema Linux