GNU/Linux >> Tutoriels Linux >  >> Linux

Intercepter l'entrée et la sortie d'un exécutable spécifique

L'option 1 serait de modifier le code source de l'application appelante et d'insérer tee dans le pipeline de sortie pour obtenir une copie de la sortie pour examen à ce stade.

L'option 2 serait d'écrire un script wrapper autour de l'exécutable en question. Un script rapide qui transmet stdin et des arguments à la vraie application, puis envoie la sortie à un emplacement que vous pouvez examiner et la recrache également de la même manière que l'application ne devrait avoir que quelques lignes à préparer. Placez-le dans un endroit spécial et ajoutez cet emplacement devant votre variable PATH, puis exécutez votre application.

#!/bin/sh
cat - | /path/to/realapp [email protected] | tee /tmp/debug_output

Vous pouvez obtenir beaucoup d'informations sur un programme en l'appelant sous strace . Cela montre chaque appel système effectué par le programme, ce qui peut parfois contenir trop d'informations, mais peut être d'une grande aide pour trouver ce qui ne va pas.

La première approche consiste à exécuter votre grande application sous strace . Cela risque de produire beaucoup de sortie et de ralentir votre application.

strace -s9999 -efile,process -f -o bigapp.strace bigapp

Si la grande application est interactive, vous préférerez peut-être la démarrer et y connecter strace une fois que vous serez prêt à déclencher les calculs. Notez l'ID de processus de l'application, par exemple 12345, et exécutez

strace -s9999 -efile,process -f -o bigapp-calculations.strace -p12345

S'il suffit d'observer cet exécutable externe, alors comme d'autres réponses l'ont déjà suggéré, remplacez cet exécutable par un script wrapper. Vous pouvez déplacer l'exécutable vers un nom différent et mettre le script wrapper à sa place, ou placer le script wrapper devant l'exécutable habituel dans le PATH , ou configurez l'application pour appeler votre script wrapper au lieu de l'exécutable habituel, selon ce qui vous convient. Créez ce script d'emballage

#!/bin/sh
exec strace -s9999 -efile -o auxapp-$$.strace /path/to/original/executable "[email protected]"

Explication des paramètres strace utilisés :

  • -e sélectionne les appels système à tracer. Vous pouvez spécifier les appels système par leur nom ou utiliser quelques catégories telles que file (open , close , read , write , …) et process (fork , execve , …).
  • -f fait que strace suit les fourches, c'est-à-dire qu'il trace les sous-processus ainsi que le processus d'origine.
  • -o sélectionne le nom du fichier contenant la trace. $$ est une construction shell qui représente l'ID de processus du processus shell (en raison de l'utilisation de exec dans le dernier script wrapper, ce sera également l'ID de processus de l'application auxiliaire).
  • -s9999 le fait afficher autant d'octets pour read et write et autres appels.

Plutôt que de changer votre chemin, vous devriez déplacer le binaire qui vous intéresse de "binary" vers "binary.orig" puis le remplacer par un script. Vous avez dit que vous êtes intéressé par les arguments, vous voudrez donc également les écrire dans un fichier. Vous serez probablement également intéressé par la sortie de la commande "env". Il vide toutes les variables d'environnement actuellement actives. Les variables d'environnement sont souvent utilisées par un programme pour influencer le comportement d'un autre programme qu'il appelle.


Linux
  1. Comment capturer les sessions de terminal et la sortie avec la commande de script Linux

  2. Forcer la sortie à entrer (tampon) comme "33[6n" dans un script ?

  3. Intercepter l'entrée et la sortie d'un exécutable spécifique ?

  4. Bash + Comment quitter le script secondaire et le script principal à chaque fois ?

  5. Comment puis-je ftp et télécharger des fichiers à partir d'un script shell UNIX

Comment exécuter des commandes à partir d'une entrée standard à l'aide de Tee et Xargs sous Linux

Explication de la redirection d'entrée-sortie sur Linux

Comment voir la sortie d'un script Php ?

Explication :Redirection des entrées, des sorties et des erreurs sous Linux

Shell Scripting Part4 - Entrée, sortie et redirection

Automatisation de la saisie textuelle à partir d'un script bash sans utiliser EOF