Comment utiliser Strace sur Linux

Comment utiliser Strace sur Linux
Lorsque vous travaillez avec Linux Systems, vous devrez souvent inspecter et comprendre les actions effectuées par des processus et les appels du 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 Ptrace pour déboguer et diagnostiquer les processus.

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

Quels sont les appels système?

Avant de discuter de la façon d'utiliser Strace, vous devez comprendre ce que nous recherchons et comment ils fonctionnent. Cela signifie que nous devrions passer en revue les bases des appels du système Linux.

Un appel système est Une méthode programmatique à travers 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 utilisateur et le noyau Linux.

Chaque fois qu'un utilisateur exécute un programme qui fait une lecture, écrire, tuer, sortir, lier, etc., Demande, ils font un appel système. Il existe un large éventail d'appels système utilisés par des programmes pour effectuer diverses tâches telles que le réseautage, la lecture et l'écriture dans les fichiers, l'initialisation et la fin des processus, et bien plus encore.

Pensez aux appels système comme des fonctions - ils se comportent de manière similaire, car ils peuvent accepter les arguments et les valeurs de retour. 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.

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

https: // linkfy.à / syscaux

https: // linkfy.à / trapmanual

Comment installer Strace sur Linux

Bien que les outils de Strace ne soient pas préinstallés par défaut dans les grandes distributions Linux, il est disponible dans la plupart des référentiels officiels de ces distributions; Vous pouvez l'installer facilement à l'aide des gestionnaires de packages par défaut.

NOTE: Bien que nous ne couvrions pas comment installer Strace sur tous les systèmes, nous discuterons de la façon de le faire avec les principaux gestionnaires de packages 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 YUM)

Pour installer Strace à l'aide de Yum Package Manager, entrez la commande:

miam installer Strace

Pour le gestionnaire de package DNF, entrez 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é Strace et en cours d'exécution, nous pouvons continuer et apprendre à utiliser

Utilisation de base de Strace: un guide pratiques

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

NOTE: La sortie Strace telle que les noms d'appels système, les arguments correspondants et les valeurs de retour sont gérés par le descripteur de fichier d'erreur standard (STDERR).

La façon de base d'utiliser Strace est en appelant l'utilitaire Strace suivie du nom du programme, dont nous voulons comprendre le comportement.

Voici un exemple de cela en utilisant la commande LS:

Ouah! C'est beaucoup de sortie pour une commande simple comme ls.

Bien que nous ne puissions pas discuter de toutes les sorties 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.

  • Le nom de l'appel système
  • Les arguments transmis à l'appel système enfermé entre parenthèses.
  • La valeur de retour de l'appel système

Par conséquent, dans la première ligne, l'appel système est EXECVE (EXECUTER PROGRAM à l'aide du 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 du 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 que nous voulons énumérer le contenu.

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

/ * 13 Vars * /

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 environnementale définie comme:

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

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

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

Comment tracer des appels système spécifiques

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

Que diriez-vous de regarder le système de lecture des appels pour la commande LS. Par exemple:

strace -e lire ls

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

L'appel du système de lecture accepte trois arguments: le descripteur de fichiers, le tampon et le nombre d'octets. L'appel système se lit ensuite aux octets de comte de l'argument du descripteur de fichiers passés 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 uniquement, nous pouvons obtenir une sortie comme celle ci-dessous:

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

Comment utiliser Strace avec des processus de course

À 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, nous pouvons utiliser l'argument -p suivi du processus ID de processus (PID) pour y attacher Strace.

Vous pouvez obtenir le PID d'un processus en cours d'exécution en utilisant le haut et le grep, le PS, le HTOP, le PIDOF ou d'autres outils de surveillance du système.

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

ps -ax | grep -i apache2

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

Qui devrait afficher une sortie similaire à celle ci-dessous.

Strace tracera en continu le processus connecté et affichera la sortie lorsque le processus connecté exécute les appels système. Pour terminer la trace, appuyez sur Ctrl + C, qui détache le processus de la Strace.

Comment enregistrer la sortie Strace dans les fichiers

Nous pouvons également rediriger la sortie de Strace vers un fichier comme argument. En utilisant le drapeau -o suivi du chemin du fichier comme argument, nous pouvons enregistrer les journaux de Strace.

Par exemple:

Strace -P 3514 -o ~ / Desktop / apache_trace

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

Conclusion

Dans ce guide, nous avons appris à 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 tutoriel sont très utiles, principalement parce que vous pouvez utiliser ce que vous avez appris à surveiller si quelqu'un est falsifié des processus système.