Commande Strace Sous Linux Avec Des Exemples

La commande strace est un puissant outil de débogage et de diagnostic sous Linux. Il enregistre chaque appel système et la réponse qu’il reçoit d’un processus particulier. Il est similaire à l’outil truss dans d’autres systèmes d’exploitation de type Unix. Ainsi, vous pouvez déboguer un programme sans avoir besoin de lire son code. C’est aussi un excellent outil pour en savoir plus sur les appels système.

Un appel système est comme une interface via laquelle un logiciel demande un service au noyau.

Appels système

Il existe de nombreux appels système dans un système d’exploitation, mais les connaître dépasse le cadre de cet article.

Comment Installer Strace Sur Linux ?

Si vous n’avez pas déjà strace sur votre système, utilisez le gestionnaire de packages par défaut de votre système pour l’installer.

Pour les systèmes basés sur Ubuntu/Debian, exécutez la commande apt suivante avec sudo :

sudo apt installer strace

Pour les systèmes basés sur CentOS/RedHat, exécutez la commande yum suivante :

sudo yum installer strace

Syntaxe

La syntaxe de la commande strace est donnée ci-dessous :

strace ... ... ... ]... commande 
strace -c ... ... ... ]... commande 

Exécuter Une Simple Strace

L’utilisation de strace sans aucune option affichera tous les appels système dans le même ordre que le programme a fait les appels système lors de l’exécution.

Pour l’essayer, essayons la commande strace avec la commande curl :

strace curl google.com

strace sur la commande curl

Dans l’image ci-dessus, vous pouvez voir que la commande strace nous a donné beaucoup de résultats. Ce sont tous les appels système effectués pour imprimer le résultat final, indiqué ci-dessous.

boucler la sortie google.com

Écriture De La Sortie De Strace Dans Un Fichier

L’exécution de la commande strace avec -o écrira la sortie dans un fichier, que vous pourrez consulter plus tard.

Pour écrire la sortie dans un fichier de commande strace pour la commande curl, exécutez :

strace -o curl.out curl google.com

Écriture de la sortie de la commande strace dans un fichier

Traçage D’un Appel Système Particulier Par Un Processus Avec Strace

Pour tracer un appel système particulier, l’ expression trace est utilisée avec l’ option -e dans la commande strace.

La syntaxe de l’expression trace à utiliser avec la commande strace pour l’exécution de la commande curl :

strace -e trace=syscall_set curl google.com

Où syscall_set est l’ensemble spécifié des appels système.

sortie de la commande strace pour l’appel système socket uniquement

Dans l’image ci-dessus, vous pouvez voir que lorsque nous spécifions l’appel système socket dans la commande strace, il n’affiche que les appels système socket.

De même, nous pouvons définir un ensemble d’appels système que nous voulons imprimer avec la commande strace.

sortie de la commande strace avec un ensemble particulier d’appels système

Dans l’image ci-dessus, vous pouvez voir que lorsque nous définissons un ensemble particulier d’appels système dans la commande strace, il ne sort que les appels système effectués par ce programme au moment de l’exécution.

Tracer Un Processus Avec PID Et Les Processus Enfants Avec La Commande Strace

L’ option -p est utilisée pour définir le PID (ID de processus) et l’ option -f est utilisée pour spécifier la strace pour suivre les processus enfants.

Les processus enfants ne sont rien d’autre que les processus créés par un autre processus. Syntaxe pour tracer un processus avec PID et suivre les processus fils :

sudo strace -f -p pid

Pour le tester, attachons strace au bash :

En utilisant la commande ps, vous pouvez rapidement trouver le PID. Nous avons deux sessions de terminal, une pour la sortie de la commande strace et l’autre pour une session bash inactive. Le PID de l’autre session bash inactive sur notre système est 3804.

Lorsque nous exécutons la syntaxe ci-dessus, vous pouvez voir que la session bash inactive attend l’entrée.

Processus d’attachement à la session inactive bash

Maintenant, si nous donnons une entrée sur la session bash inactive, vous pouvez voir strace donner une sortie sur l’autre session de terminal.

sortie strace pour un processus attaché

Résumé Des Appels Système Effectués Par Un Processus Utilisant Strace

Pour obtenir le résumé de tous les appels système effectués par un processus, l’ option -c est utilisée avec la commande strace.

Syntaxe pour obtenir le résumé des appels système avec la commande strace :

strace -c curl google.com

Résumé des appels système sous forme de tableau

Conclusion

strace est un excellent utilitaire pour le débogage, les diagnostics, l’apprentissage des appels système et bien plus encore. C’est un outil très puissant et pratique. Il est disponible sur toutes les distributions Linux.

Merci pour la lecture! ??