Короче говоря: я хотел бы отследить способ вызова некоторых исполняемых файлов для отслеживания поведения системы. Допустим, у меня есть исполняемый файл:
/usr/bin/do_stuff
И он на самом деле вызывается несколькими разными именами через символическую ссылку:
/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
и так далее. Очевидно, do_stuff
что будет использоваться первый полученный аргумент, чтобы определить, какое действие на самом деле предпринимается, а остальные аргументы будут обработаны в свете этого.
Я хотел бы записать когда-либо вызов /usr/bin/do_stuff
(и полный список аргументов). Если бы не было символических ссылок, я просто перешел do_stuff
бы do_stuff_real
и написал скрипт
#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
Однако, поскольку я знаю, что он будет проверять имя, по которому он называется, это не сработает. Как написать сценарий для достижения того же самого, но при этом передать do_stuff
правильное «исполняемое имя»?
Для записи, чтобы избежать ответов на эти строки:
- Я знаю, что могу сделать это в C (используя execve), но было бы намного проще, если бы я мог, в этом случае, просто использовать скрипт оболочки.
- Я не могу просто заменить
do_stuff
программой регистрации.