2

我尝试使用 nano 和 rnano 来编辑文件。后者实际上处于限制模式,但它们是完全相同的二进制文件。为什么他们的行为不同?

# which nano rnano
/usr/bin/nano
/bin/rnano

# md5sum /usr/bin/nano /bin/rnano
fa670e309a033718bad4b2051f5974fd  /usr/bin/nano
fa670e309a033718bad4b2051f5974fd  /bin/rnano

(在 ubuntu 12.04 x64 LTS 中)

4

1 回答 1

4

它们的行为因参数向量 ( argv) 而不同,其第一个元素 ( argv[0]) 包含正在执行的文件的名称。

因为rnano是一个单独的文件nano(即使它只是一个符号链接),它有自己的、独立的argv[0].

您可以在nano.c的主要功能中看到此检查:

/* If the executable filename starts with 'r', enable restricted
 * mode.
 */
if (*(tail(argv[0])) == 'r')
    SET(RESTRICTED);

您也可以使用简单的 shell 脚本对此进行测试。创建一个只有一个语句的 shell 脚本,echo $0. 然后,使用单独的名称创建指向它的符号链接。观察差异。

于 2014-11-20T03:57:33.970 回答