En pocas palabras: me gustaría rastrear la forma en que se llaman algunos ejecutables para rastrear el comportamiento del sistema. Digamos que tengo un ejecutable:
/usr/bin/do_stuff
Y en realidad se llama por varios nombres diferentes a través del enlace simbólico:
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
y así. Claramente, do_stuff
va a usar el primer argumento que recibe para determinar qué acción se lleva a cabo realmente, y el resto de los argumentos se manejarán a la luz de eso.
Me gustaría grabar alguna llamada a /usr/bin/do_stuff
(y la lista completa de argumentos). Si no existieran los enlaces simbólicos, me basta con mover do_stuff
a do_stuff_real
y escribo un guión
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
Sin embargo, como sé que examinará el nombre por el que se llama, esto no funcionará. ¿Cómo se escribe un script para lograr lo mismo, pero aún se pasa al do_stuff
'nombre usado ejecutable' correcto?
Para el registro, para evitar respuestas en estas líneas:
- Sé que puedo hacerlo en C (usando execve), pero sería mucho más fácil si pudiera, en este caso, simplemente usar un script de shell.
- No puedo simplemente reemplazar
do_stuff
con un programa de registro.