长话短说:我想跟踪一些可执行文件的调用方式,以跟踪某些系统行为。假设我有一个可执行文件:
/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)来做到这一点,但是如果我可以在这种情况下只使用shell脚本,那会容易得多。
- 我不能简单地
do_stuff
用日志记录程序代替。