我正在运行 Debian Stretch。当我运行它file /sbin/reboot
(或任何相关命令)时,它说它是符号链接,/bin/systemctl
据我所知没有任何参数。
它怎么systemctl
知道我想重启?它是否检查argv[0]
代码中是否有 switch/case?
当我在其他地方运行它时它也能正常工作(ln --symbolic /bin/systemctl ~/bin/reboot
例如)。
答案1
它是否检查
argv[0]
代码中是否存在 switch/case?
研究代码并自己寻找。但我确信一般的答案是:是的,类似这样的。
这是一个众所周知的技巧。以 BusyBox 为例。维基百科:
典型的计算机程序为每个应用程序都有一个单独的二进制(可执行)文件。BusyBox 是一个单一的二进制文件,它是许多应用程序的集合,每个应用程序都可以通过以特定方式使用适当的参数调用具有各种名称的单一 BusyBox 二进制文件(通过为每个不同的名称提供符号链接或硬链接来支持)来访问。
Bash 是另一个例子。man bash
:
如果
bash
使用名称调用,它会尝试尽可能地sh
模仿历史版本的启动行为,同时也符合 POSIX 标准。sh
检查/bin/sh
您的 Debian Stretch。它是(可能)指向... 的符号链接dash
。本网站解释:
直到 Debian Lenny,默认
/bin/sh
shell 是bash
。从 Debian Squeeze 开始,默认 shell 将是dash
。