小编Nei*_*end的帖子

当可执行文件有多个符号链接时,如何使用包装器脚本记录调用

长话短说:我想跟踪调用某些可执行文件以跟踪某些系统行为的方式。假设我有一个可执行文件:

/usr/bin/do_stuff
Run Code Online (Sandbox Code Playgroud)

它实际上通过符号链接被许多不同的名称调用:

/usr/bin/make_tea -> /usr/bin/do_stuff
/usr/bin/make_coffee -> /usr/bin/do_stuff
Run Code Online (Sandbox Code Playgroud)

等等。显然,do_stuff将使用它收到的第一个参数来确定实际采取的操作,其余参数将根据此进行处理。

我想记录曾经调用过/usr/bin/do_stuff(以及完整的参数列表)。如果没有符号链接,我会干脆转移do_stuffdo_stuff_real写一个脚本

#!/bin/sh
echo "$0 $@" >> logfile
/usr/bin/do_stuff_real "$@"
Run Code Online (Sandbox Code Playgroud)

但是,据我所知,它会检查它被调用的名称,这是行不通的。如何编写一个脚本来实现相同的功能,但仍然传递给do_stuff正确的“可执行使用的名称”?

为了记录,为了避免这些行的答案:

  • 我知道我可以在 C 中完成它(使用 execve),但如果我可以,在这种情况下,只使用一个 shell 脚本会容易得多。
  • 我不能简单地do_stuff用日志程序替换。

shell-script

8
推荐指数
2
解决办法
395
查看次数

标签 统计

shell-script ×1