我尝试使用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中)
答案 0 :(得分:2)
由于参数向量(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脚本对此进行测试。使用一个语句echo $0
创建一个shell脚本。然后,使用单独的名称创建指向它的符号链接。观察差异。