本机(linux)上某软件(rygel)打开后会提供http服务,然后可以通过http://10.4.47.249:56087/b815c168-1aa5-4da1-93a7-6a43494ac6dd.xml在浏览器中打开xml文件(10.4.47.249是本机的IP)
现在我想知道这个软件把哪个目录做成的http服务的目录(表达可能不太清楚,意思就是上面的xml文件在本机的哪个目录下),有没有什么工具/方法能够做到
PS:
我用find找这个xml文件了,没有找到而且不知道大概在哪个目录下所以是在/中find的,很费时间
问题的题目表述的也不太好,抱歉
以nginx为例说明一下:
第一步:根据端口号找到开启这个HTTP服务的PID
可以看到pid=9623的进程在监听80端口。
第二步:根据PID找到可执行程序,及启动参数
在第一步中,看到了nginx.conf这个信息,但不能确定就是nginx,因为也有可能是淘宝的tengine。而且也不知道nginx的执行文件和配置文件位置。
第三步:去配置文件中找到HTTP服务的DocRoot
这一步就不多说了,打开/etc/nginx/nginx.conf文件看一下,就知道了。
由于在第二步,我们已经知道运行这个HTTP服务的具体命令了(就是/usr/sbin/nginx -c /etc/nginx/nginx.conf)。还有一个更直观的方法,可以监控你当前访问的XML文件在什么地方,那就是用strace,举个【栗子】:
先kill掉这个进程:
然后用strace启动nginx,同时监控它会打开哪些文件
到浏览器端访问一下这个HTTP服务,strace就会打印出来nginx打开了哪些文件,输出类似这样:
第一行是factcgi的目录(我是跑的nginx + php-fpm,所以会有这个),第二行开始,就能看到nginx的DocumentRoot啦。
用strace的好处:
1. 你可以不懂nginx的配置,比如你常用的是apache,临时碰到一个nginx要查
2. 比查nginx配置文件要快,即使你懂nginx,如果这个xml文件在某个virtualhost配置文件里面,virtualhost配置还用了正则表达式,那得费上几分钟才能读懂并查出来了
3. 如果你用的不是流行的web server,document root是写死在执行程序里的,配置文件里压根儿没有,那就没法通过配置文件来查了。这样的例子不是没有,早期的HiPhoP(Facebook的高性能PHP VM)直接把一个PHP项目打包成一个可执行文件,运行它即守护HTTP端口,PHP应用代码都编译成二进制代码放在可执行文件里了,根本不需要指定document root。
根据@henix 的提示,找到一种更简单的方法(测试通过):
1. netstat找出pid
2. strace -p $pid -e open