Comandos de Linux

Cómo usar Strace en Linux

Cómo usar Strace en Linux
Cuando trabaje con sistemas Linux, a menudo necesitará inspeccionar y comprender las acciones realizadas por los procesos y las llamadas al sistema realizadas por su ejecución.

Cuando se trata de realizar tales tareas, el kernel de Linux proporciona características como trazar para depurar y diagnosticar procesos.

Este artículo explica cómo usar la herramienta strace para rastrear, monitorear y depurar procesos que interactúan con el Kernel.

¿Qué son las llamadas al sistema??

Antes de discutir cómo usar strace, debe comprender qué estamos buscando y cómo funcionan. Eso significa que deberíamos repasar los conceptos básicos de las llamadas al sistema Linux.

Una llamada al sistema es un método programático a través del cual un programa puede solicitar un servicio del Kernel del sistema. Ese es el proceso que usaremos para inspeccionar las acciones entre los procesos del usuario y el kernel de Linux.

Cada vez que un usuario ejecuta un programa que hace una lectura, escritura, eliminación, salida, vinculación, etc., solicitud, están haciendo una llamada al sistema. Existe una amplia gama de llamadas al sistema que utilizan los programas para realizar diversas tareas, como la creación de redes, la lectura y escritura de archivos, la inicialización y finalización de procesos, y mucho más.

Piense en las llamadas al sistema como funciones (se comportan de manera similar) porque pueden aceptar argumentos y devolver valores. La principal diferencia entre las llamadas al sistema y el funcionamiento normal es que las llamadas al sistema pueden interactuar directamente con el Kernel. Las llamadas al sistema utilizan un mecanismo de trampa para navegar entre el espacio de usuario y el Kernel.

En el sistema Linux, este mecanismo está bien oculto a los usuarios por bibliotecas como Glibc.

NOTA: Hay mucho más en las llamadas al sistema y las interacciones del kernel de lo que hemos discutido en este tutorial. Consulte las páginas del manual para obtener más información.

https: // linkfy.a / syscalls

https: // linkfy.a / trapmanual

Cómo instalar strace en Linux

Aunque las herramientas de strace no vienen preinstaladas de forma predeterminada en las principales distribuciones de Linux, están disponibles en la mayoría de los repositorios oficiales de estas distribuciones; puede instalarlo fácilmente usando administradores de paquetes predeterminados.

NOTA: Aunque no cubriremos cómo instalar strace en todos los sistemas, discutiremos cómo hacerlo con los principales administradores de paquetes como apt, dnf, pacman y yum

1: Instalación de Debian (apt)

Instale strace usando el comando:

apt-get install strace -y

2: Familia RedHat (dnf y yum)

Para instalar strace usando el administrador de paquetes yum, ingrese el comando:

yum instalar strace

Para el administrador de paquetes dnf, ingrese el comando:

dnf instalar strace

3: Arch Linux (pacman)

Para los usuarios de Arch Linux, puede instalar strace con el comando:

pacman -S strace

Ahora que tiene strace instalado y en ejecución, podemos continuar y aprender a usar

Uso básico de Strace: una guía práctica

Analicemos el uso básico de strace y comprendamos el resultado básico del comando y cómo podemos usarlo.

NOTA: La salida de Strace, como los nombres de las llamadas al sistema, los argumentos correspondientes y los valores de retorno, son manejados por el descriptor de archivo de error estándar (stderr).

La forma básica de usar strace es llamando a la utilidad strace seguida del nombre del programa, cuyo comportamiento queremos entender.

Aquí hay un ejemplo de eso usando el comando ls:

Guau! Esa es una gran cantidad de resultados para un comando simple como ls.

Aunque no podemos discutir toda la salida del comando strace, podemos destilar y comprender su significado.

Si considera la primera línea en el resultado anterior, notará las siguientes características.

Por lo tanto, en la primera línea, la llamada al sistema es execve (ejecutar el programa usando la matriz de argumentos especificada), los argumentos de la llamada al sistema son (“/ bin / ls”, [“ls”, “/”], 0x7fffc4b277a8 / * 13 vars * /) y un valor de retorno de 0.

https: // linkfy.a / execve

Las llamadas al sistema execve ejecutan el binario que queremos usar, en este caso, ubicado en (/ bin / ls) y la matriz de argumentos es la ruta que queremos listar los contenidos.

También notará una notación encerrada con una barra diagonal y un asterisco. Para nuestro ejemplo:

/ * 13 vars * /

La salida anterior indica la cantidad de variables agregadas como resultado de llamar al proceso. Se accede al entorno dentro de la función execv utilizando la variable externa environment definida como:

int main (int argc, char * argv [], char * envp [])

La salida final es el valor de retorno, que es 0 en este caso.

También notará que la mayoría de las líneas de la salida de strace siguen un patrón similar que discutimos anteriormente.

Cómo rastrear llamadas específicas del sistema

Aunque strace proporciona mucha información sobre las llamadas al sistema de programas, la mayoría de las instancias le pedirán que filtre llamadas al sistema específicas. Para hacer esto, pasamos la bandera -e al comando strace seguido del nombre de la llamada al sistema que necesitamos.

¿Qué tal mirar las llamadas al sistema de lectura para el comando ls?. Por ejemplo:

strace -e lee ls

Notará que esto solo muestra las llamadas al sistema leídas.

La llamada al sistema de lectura acepta tres argumentos: descriptor de archivo, búfer y el número de bytes. La llamada al sistema luego lee hasta el recuento de bytes del argumento del descriptor de archivo pasado en el búfer.

https: // linkfy.a / readsyscall

Resumen de llamadas al sistema

Strace también nos permite obtener un resumen de las llamadas al sistema realizadas por un proceso. Al pasar el argumento -c o -summary-only, podemos obtener una salida como la que se muestra a continuación:

El comando filtra y organiza la salida de manera más eficiente que la salida normal de strace. Para obtener tanto el resumen como el resultado de strace normal, pase el argumento -C.

Cómo utilizar Strace con procesos en ejecución

En otras ocasiones, necesitará un seguimiento de un proceso en ejecución. Hasta este punto, solo hemos usado strace un solo comando. Para rastrear un proceso en ejecución, podemos usar el argumento -p seguido del proceso de ID de proceso (PID) para adjuntarle strace.

Puede obtener el PID de un proceso en ejecución utilizando top y grep, ps, htop, pidof u otras herramientas de monitoreo del sistema.

Por ejemplo, para obtener el PID del proceso de apache, podemos usar:

ps -ax | grep -i apache2

Eso debería darle el PID del proceso apache2 (PID 3514 en este caso), y podemos usarlo para adjuntarlo a strace.

Eso debería mostrar una salida similar a la que se muestra a continuación.

Strace rastreará continuamente el proceso adjunto y mostrará la salida a medida que el proceso adjunto ejecuta llamadas al sistema. Para terminar la traza, presione CTRL + C, que separa el proceso de la línea.

Cómo guardar la salida de Strace en archivos

También podemos redirigir la salida de strace a un archivo como argumento. Usando la bandera -o seguida de la ruta del archivo como argumento, podemos guardar registros de strace.

Por ejemplo:

strace -p 3514 -o ~ / Escritorio / apache_trace

Una vez que se guarda el archivo, puede monitorearlo y analizarlo más tarde.

Conclusión

En esta guía, aprendimos cómo instalar y usar strace en las principales distribuciones de Linux. Ahora que comprende las llamadas al sistema y cómo funcionan los procesos, puede usar strace para monitorear y depurar un proceso del sistema en ejecución.

Los conceptos aprendidos en este tutorial son muy útiles, principalmente porque puede usar lo que ha aprendido para monitorear si alguien está alterando los procesos del sistema.

Herramientas útiles para jugadores de Linux
Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...
Juegos HD remasterizados para Linux que nunca tuvieron un lanzamiento de Linux antes
Muchos desarrolladores y editores de juegos están creando una remasterización HD de juegos antiguos para extender la vida útil de la franquicia, por f...
Cómo usar AutoKey para automatizar juegos de Linux
AutoKey es una utilidad de automatización de escritorio para Linux y X11, programada en Python 3, GTK y Qt. Usando su funcionalidad de scripting y MAC...