GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ein- und Ausgabe von bestimmten ausführbaren Dateien abfangen

Option 1 wäre, den Quellcode der aufrufenden App zu ändern und tee einzufügen in die Ausgabepipeline, um in diesem Stadium eine Kopie der Ausgabe zur Überprüfung zu erhalten.

Option 2 wäre, ein Wrapper-Skript um die betreffende ausführbare Datei zu schreiben. Ein schnelles Skript, das stdin und Argumente an die echte App weitergibt, dann die Ausgabe an einen Ort leitet, an dem Sie sie überprüfen können, und sie auch wieder ausspuckt, so wie die App nur ein paar Zeilen zum Aufpeppen sein sollte. Platzieren Sie es an einem speziellen Ort und fügen Sie diesen Ort vor Ihrer PATH-Variablen hinzu, und führen Sie dann Ihre Anwendung aus.

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

Viele Informationen zu einem Programm erhalten Sie, indem Sie es unter strace aufrufen . Dies zeigt jeden Systemaufruf, den das Programm durchführt, was manchmal zu viele Informationen sein kann, aber eine große Hilfe sein kann, um herauszufinden, was schief läuft.

Der erste Ansatz besteht darin, Ihre große Anwendung unter strace auszuführen . Dies führt wahrscheinlich zu viel Ausgabe und verlangsamt Ihre Anwendung.

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

Wenn die große Anwendung interaktiv ist, ziehen Sie es vielleicht vor, sie zu starten und strace damit zu verbinden, sobald Sie bereit sind, die Berechnungen auszulösen. Notieren Sie sich die Prozess-ID der Anwendung, z. B. 12345, und führen Sie

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

Wenn es ausreicht, diese externe ausführbare Datei zu beobachten, ersetzen Sie diese ausführbare Datei, wie andere Antworten bereits vorgeschlagen haben, durch ein Wrapper-Skript. Sie können die ausführbare Datei auf einen anderen Namen verschieben und das Wrapper-Skript an ihrer Stelle platzieren oder das Wrapper-Skript vor die übliche ausführbare Datei in PATH stellen , oder konfigurieren Sie die Anwendung so, dass sie Ihr Wrapper-Skript anstelle der üblichen ausführbaren Datei aufruft, was auch immer praktisch ist. Erstellen Sie dieses Wrapper-Skript

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

Erläuterung der verwendeten Strace-Parameter:

  • -e wählt die zu verfolgenden Systemaufrufe aus. Sie können Systemaufrufe nach Namen spezifizieren oder einige Kategorien wie file verwenden (open , close , read , write , …) und process (fork , execve , …).
  • -f bewirkt, dass Strace Forks folgt, d. h. Unterprozesse sowie den ursprünglichen Prozess verfolgt.
  • -o wählt den Namen der Datei aus, die den Trace enthält. $$ ist ein Shell-Konstrukt, das für die Prozess-ID des Shell-Prozesses steht (aufgrund der Verwendung von exec im letzten Wrapper-Skript ist dies auch die Prozess-ID der Hilfsanwendung).
  • -s9999 lässt es so viele Bytes für read anzeigen und write und andere Anrufe.

Anstatt Ihren Pfad zu ändern, sollten Sie die Binärdatei, an der Sie interessiert sind, von „binary“ nach „binary.orig“ verschieben und dann durch ein Skript ersetzen. Sie sagten, Sie interessieren sich für die Argumente, also sollten Sie diese auch in eine Datei schreiben. Wahrscheinlich interessiert Sie auch die Ausgabe des Befehls "env". Es gibt alle derzeit aktiven Umgebungsvariablen aus. Umgebungsvariablen werden oft von einem Programm verwendet, um das Verhalten eines anderen Programms zu beeinflussen, das es aufruft.


Linux
  1. Arbeiten mit Eingabeausgabe und Fehlerumleitung in Linux

  2. Wie funktionieren Tastatureingabe und Textausgabe?

  3. Entfernen von Steuerzeichen (einschließlich Konsolencodes/-farben) aus der Skriptausgabe?

  4. Ausführen eines Python-Skripts von PHP

  5. Wie interpretiere und behebe ich einen Eingabe-/Ausgabefehler in Linux?

So führen Sie Befehle von der Standardeingabe mit Tee und Xargs in Linux aus

Eingabe-Ausgabe-Umleitung unter Linux erklärt

Wie kann man die Ausgabe eines Php-Skripts sehen?

Erklärt:Eingabe-, Ausgabe- und Fehlerumleitung in Linux

Shell-Scripting Teil 4 – Eingabe, Ausgabe und Umleitung

So extrahieren Sie einen Wert (in einer bestimmten Zeile und Spalte) aus einer Datei und weisen ihn einer neuen Variablen zu