Commandes Linux

Comment utiliser Strace sur Linux

Comment utiliser Strace sur Linux
Lorsque vous travaillez avec des systèmes Linux, vous aurez souvent besoin d'inspecter et de comprendre les actions effectuées par les processus et les appels système effectués par leur exécution.

Lorsqu'il s'agit d'effectuer de telles tâches, le noyau Linux fournit des fonctionnalités telles que trace pour déboguer et diagnostiquer les processus.

Cet article explique comment utiliser l'outil strace pour tracer, surveiller et déboguer les processus interagissant avec le noyau.

Que sont les appels système?

Avant de discuter de l'utilisation de strace, vous devez comprendre ce que nous recherchons et comment ils fonctionnent. Cela signifie que nous devrions revoir les bases des appels système Linux.

Un appel système est une méthode de programmation par laquelle un programme peut demander un service au noyau du système. C'est le processus que nous utiliserons pour inspecter les actions entre les processus utilisateurs et le noyau Linux.

Chaque fois qu'un utilisateur exécute un programme qui effectue une lecture, une écriture, une suppression, une sortie, une liaison, etc., demande, ils effectuent un appel système. Il existe un large éventail d'appels système utilisés par les programmes pour effectuer diverses tâches telles que la mise en réseau, la lecture et l'écriture dans des fichiers, l'initialisation et l'arrêt des processus, etc.

Considérez les appels système comme des fonctions - ils se comportent de la même manière - car ils peuvent accepter des arguments et renvoyer des valeurs. La principale différence entre les appels système et le fonctionnement normal est que les appels système peuvent interagir directement avec le noyau. Les appels système utilisent un mécanisme de piège pour naviguer entre l'espace utilisateur et le noyau.

Dans le système Linux, ce mécanisme est bien caché aux utilisateurs par des bibliothèques telles que Glibc.

REMARQUE: Il y a beaucoup plus d'appels système et d'interactions avec le noyau que ce dont nous avons discuté dans ce tutoriel. Veuillez vous référer aux pages du manuel pour plus d'informations.

https://linkfy.à/appels système

https://linkfy.à/trapmanuel

Comment installer strace sur Linux

Bien que les outils strace ne soient pas préinstallés par défaut dans les principales distributions Linux, ils sont disponibles dans la plupart des référentiels officiels de ces distributions ; vous pouvez l'installer facilement en utilisant les gestionnaires de paquets par défaut.

REMARQUE: Bien que nous n'expliquions pas comment installer strace sur tous les systèmes, nous verrons comment le faire avec les principaux gestionnaires de paquets tels que apt, dnf, pacman et yum

1 : Installation de Debian (apt)

Installez strace à l'aide de la commande :

apt-get install strace -y

2: Famille RedHat (dnf et miam)

Pour installer strace à l'aide du gestionnaire de packages yum, saisissez la commande :

miam installer strace

Pour le gestionnaire de packages dnf, saisissez la commande :

dnf installer strace

3: Arch Linux (pacman)

Pour les utilisateurs d'Arch Linux, vous pouvez installer strace avec la commande :

pacman -S strace

Maintenant que vous avez installé et exécuté strace, nous pouvons passer à autre chose et apprendre à utiliser

Utilisation de base de Strace : un guide pratique

Discutons de l'utilisation de base de strace et comprenons la sortie de base de la commande et comment nous pouvons l'utiliser.

REMARQUE: Les sorties de strace telles que les noms d'appels système, les arguments correspondants et les valeurs de retour sont gérées par le descripteur de fichier d'erreur standard (stderr).

La façon de base d'utiliser strace est d'appeler l'utilitaire strace suivi du nom du programme, dont nous voulons comprendre le comportement.

Voici un exemple en utilisant la commande ls :

Wow! C'est beaucoup de sortie pour une commande simple telle que ls.

Bien que nous ne puissions pas discuter de toute la sortie de la commande strace, nous pouvons distiller et comprendre sa signification.

Si vous considérez la première ligne de la sortie ci-dessus, vous remarquerez les fonctionnalités suivantes.

Par conséquent, dans la première ligne, l'appel système est execve (exécuter le programme en utilisant le tableau d'arguments spécifié), les arguments de l'appel système sont ("/bin/ls", ["ls", "/"], 0x7fffc4b277a8 / * 13 vars */) et une valeur de retour de 0.

https://linkfy.à/exécuter

Les appels système execve exécutent le binaire que nous voulons utiliser, dans ce cas, situé dans (/bin/ls) et le tableau d'arguments étant le chemin dont nous voulons lister le contenu.

Vous remarquerez également une notation entourée d'une barre oblique et d'un astérisque. Pour notre exemple :

/* 13 variables */

La sortie ci-dessus indique le nombre de variables ajoutées à la suite de l'appel du processus. L'environnement à l'intérieur de la fonction execv est accessible en utilisant la variable externe environ définie comme :

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

La sortie finale est la valeur de retour, qui est 0 dans ce cas.

Vous remarquerez également que la plupart des lignes de la sortie strace suivent un modèle similaire à celui dont nous avons discuté ci-dessus.

Comment tracer des appels système spécifiques

Bien que strace donne beaucoup d'informations sur les appels système des programmes, la plupart des instances vous demanderont de filtrer des appels système spécifiques. Pour ce faire, nous passons le drapeau -e à la commande strace suivi du nom de l'appel système dont nous avons besoin.

Que diriez-vous de regarder les appels système de lecture pour la commande ls. Par example:

strace -e lire ls

Vous remarquerez que cela n'affiche que les appels système en lecture.

L'appel système read accepte trois arguments : le descripteur de fichier, le tampon et le nombre d'octets. L'appel système lit ensuite jusqu'au nombre d'octets de l'argument de descripteur de fichier transmis dans le tampon.

https://linkfy.à/readsyscall

Résumé des appels système

Strace nous permet également d'obtenir un résumé des appels système effectués par un processus. En passant l'argument -c ou -summary-only, nous pouvons obtenir une sortie telle que celle illustrée ci-dessous :

La commande filtre et organise la sortie plus efficacement que la sortie normale de strace. Pour obtenir à la fois le résumé et la sortie normale de strace, passez l'argument -C.

Comment utiliser Strace avec des processus en cours d'exécution

À d'autres moments, vous aurez besoin d'une trace d'un processus en cours d'exécution. Jusqu'à présent, nous n'avons utilisé strace qu'une seule commande. Pour tracer un processus en cours d'exécution, nous pouvons utiliser l'argument -p suivi du processus Process ID (PID) pour lui attacher strace.

Vous pouvez obtenir le PID d'un processus en cours d'exécution en utilisant les outils top et grep, ps, htop, pidof ou d'autres outils de surveillance du système.

Par exemple, pour obtenir le PID du processus apache, nous pouvons utiliser :

ps-hache | grep -i apache2

Cela devrait vous donner le PID du processus apache2 (PID 3514 dans ce cas), et nous pouvons l'utiliser pour l'attacher à strace.

Cela devrait afficher une sortie similaire à celle illustrée ci-dessous.

Strace tracera en continu le processus attaché et affichera la sortie pendant que le processus attaché exécute les appels système. Pour terminer la trace, appuyez sur CTRL + C, ce qui détache le processus de la strace.

Comment enregistrer la sortie de Strace dans des fichiers

Nous pouvons également rediriger la sortie de strace vers un fichier en tant qu'argument. En utilisant l'indicateur -o suivi du chemin du fichier comme argument, nous pouvons enregistrer les journaux strace.

Par example:

strace -p 3514 -o ~/Desktop/apache_trace

Une fois le fichier enregistré, vous pouvez le surveiller et l'analyser ultérieurement.

Conclusion

Dans ce guide, nous avons appris comment installer et utiliser strace sur les principales distributions Linux. Maintenant que vous comprenez les appels système et le fonctionnement des processus, vous pouvez utiliser strace pour surveiller et déboguer un processus système en cours d'exécution.

Les concepts appris dans ce didacticiel sont très utiles, principalement parce que vous pouvez utiliser ce que vous avez appris pour surveiller si quelqu'un altère les processus du système.

Comment changer les boutons gauche et droit de la souris sur un PC Windows 10
Il est tout à fait normal que tous les appareils de souris d'ordinateur soient conçus de manière ergonomique pour les droitiers. Mais il existe des so...
Émulez les clics de souris en survolant à l'aide de la souris sans clic dans Windows 10
L'utilisation d'une souris ou d'un clavier dans la mauvaise posture d'une utilisation excessive peut entraîner de nombreux problèmes de santé, notamme...
Ajoutez des gestes de souris à Windows 10 à l'aide de ces outils gratuits
Ces dernières années, les ordinateurs et les systèmes d'exploitation ont considérablement évolué. Il fut un temps où les utilisateurs devaient utilise...