Lange Rede, kurzer Sinn: Ich möchte nachverfolgen, wie einige ausführbare Dateien aufgerufen werden, um das Systemverhalten zu verfolgen. Angenommen, ich habe eine ausführbare Datei:
/usr/bin/do_stuff
Und es wird tatsächlich über Symlink unter verschiedenen Namen aufgerufen:
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
und so weiter. Es do_stuff
ist klar, dass das erste Argument, das es erhält, verwendet wird, um zu bestimmen, welche Aktion tatsächlich ausgeführt wird, und der Rest der Argumente wird vor diesem Hintergrund behandelt.
Ich würde gerne jemals einen Anruf aufzeichnen /usr/bin/do_stuff
(und die vollständige Liste der Argumente). Wenn es keine Symlinks gäbe, würde ich einfach do_stuff
zu do_stuff_real
einem Skript gehen und es schreiben
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
Da ich jedoch weiß, dass der Name, unter dem es aufgerufen wird, überprüft wird, funktioniert dies nicht. Wie schreibt man ein Skript, um dasselbe zu erreichen und trotzdem an do_stuff
den richtigen 'ausführbaren benutzten Namen' weiterzugeben ?
Um Antworten in diesen Zeilen zu vermeiden:
- Ich weiß, dass ich es in C machen kann (mit execve), aber es wäre viel einfacher, wenn ich in diesem Fall nur ein Shell-Skript verwenden könnte.
- Ich kann nicht einfach durch
do_stuff
ein Protokollierungsprogramm ersetzen .