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 -y2: Famille RedHat (dnf et miam)
Pour installer strace à l'aide du gestionnaire de packages yum, saisissez la commande :
miam installer stracePour le gestionnaire de packages dnf, saisissez la commande :
dnf installer strace3: Arch Linux (pacman)
Pour les utilisateurs d'Arch Linux, vous pouvez installer strace avec la commande :
pacman -S straceMaintenant 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.
- Le nom de l'appel système
- Les arguments passés à l'appel système 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 (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 apache2Cela 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_traceUne 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.