首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数和.history文件

函数和.history文件
EN

Stack Overflow用户
提问于 2014-05-05 21:53:06
回答 2查看 1.6K关注 0票数 4

假设apache在我的服务器上运行的用户是真正的用户,并且有一个带有.history文件的主目录,那么通过exec()运行命令会导致在该文件中创建条目吗?

例如,如果我以用户身份运行exec("whoami")并以该用户身份登录并运行命令history,我会看到whoami命令在历史记录中的一个条目吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 21:58:57

不是的。

代码语言:javascript
复制
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解释的,从这个简单的例子中可以看到

代码语言:javascript
复制
$ php -r 'exec("echo foo $(bar2 jojo) go >/dev/tty");'
sh: bar2: command not found
foo go

这完全是相同的输出,就像我直接在命令行上这样做时一样

代码语言:javascript
复制
$ echo foo $(bar2 jojo) go >/dev/tty
-bash: bar2: command not found
foo go

这里最重要的一点是,shell只在“交互模式”中向历史记录添加命令。当您执行像cat|bashbash -c $exec_command这样的操作时,不会创建历史条目。顺便说一句,exec()就是这么做的。这是一个类似于C命令execl("/bin/sh", "-c", exec_command, NULL);的调用

票数 6
EN

Stack Overflow用户

发布于 2014-05-05 22:11:17

历史文件也称为"bash历史记录“,并且只与bash内部的调用相关,这些调用是在bash内部进行的,webserver本身运行在自己的环境中,每个系统调用这个进程(它没有更多的功能),与bash无关;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23482537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档