假设apache在我的服务器上运行的用户是真正的用户,并且有一个带有.history文件的主目录,那么通过exec()运行命令会导致在该文件中创建条目吗?
例如,如果我以用户身份运行exec("whoami")并以该用户身份登录并运行命令history,我会看到whoami命令在历史记录中的一个条目吗?
发布于 2014-05-05 21:58:57
不是的。
michael@MacMichi:~ $ php -r 'exec("whoami");'
michael@MacMichi:~ $ history |tail -n3
506 history |tail -n3
507 php -r 'exec("whoami");'
508 history |tail -n3关于apache的案例:我在两年前(2012年)试用过它,发现它对历史没有任何影响。如果你不确定就试试看..。
只是个旁白..。这个命令确实是由shell解释的,从这个简单的例子中可以看到
$ php -r 'exec("echo foo $(bar2 jojo) go >/dev/tty");'
sh: bar2: command not found
foo go这完全是相同的输出,就像我直接在命令行上这样做时一样
$ echo foo $(bar2 jojo) go >/dev/tty
-bash: bar2: command not found
foo go这里最重要的一点是,shell只在“交互模式”中向历史记录添加命令。当您执行像cat|bash或bash -c $exec_command这样的操作时,不会创建历史条目。顺便说一句,exec()就是这么做的。这是一个类似于C命令execl("/bin/sh", "-c", exec_command, NULL);的调用
发布于 2014-05-05 22:11:17
历史文件也称为"bash历史记录“,并且只与bash内部的调用相关,这些调用是在bash内部进行的,webserver本身运行在自己的环境中,每个系统调用这个进程(它没有更多的功能),与bash无关;)
https://stackoverflow.com/questions/23482537
复制相似问题