我需要查明特定服务器上安装了哪个版本的 Apache Portable Runtime。
那么,如果无法访问日志文件,我该如何做到这一点?
答案1
写入一行 C 代码:
# cat apr.c
int main(void) {
printf("%s\n",apr_version_string());
}
编译(找到 libapr 的正确路径)
# gcc -o apr apr.c /usr/pkg/lib/libapr-1.a
执行
# ./apr
1.3.3
PS: 要找到 libapr,您可以尝试
ls /usr/lib/libapr*; ls /usr/local/lib/libapr*;ls /lib/libapr*;locate libapr; ...
或者按照 david 的说法,通过 httpd 运行 ldd,如果你想找到 apache 使用的版本
答案2
您没有提供太多信息,但您可以尝试几种方法。
- 询问您的软件包管理器。这假设您已通过软件包管理系统安装了系统范围的 libapr。Debian 将是
dpkg -l "*apr*"
。RPM 将是类似于 的东西rpm -qa | grep -i apr
。 - 当然,您可能已从源代码安装它,在这种情况下,库的文件名中可能编码了版本号。运行它
locate libapr
,它应该会显示类似“/usr/lib/libapr-1.2.3.so”的内容 - 可能没有找到。尝试一下
ldd /usr/sbin/httpd
(或者无论您的 APR 使用二进制文件是什么),您就会看到二进制文件将使用哪个库文件。这还应该显示版本号,或者将显示名称中带有版本号的文件的符号链接的位置。 - 最后,您的二进制文件可能已静态链接 APR。您可以判断上面的 ldd 是否在列表中没有 APR。您可以通过运行
strings /usr/sbin/httpd
并查找可能的版本号来获取版本号。如果您没有编码了版本号的 .so 文件,也可以这样做。
答案3
$ find / -name *apr* 2>/dev/null 1>/tmp/apr-findings
$ less /tmp/apr-findings
这对我有帮助,因为文档记录太差了。我不知道还有更好的解决方案。
如果你找到一个文件libapr*.la
,但你无法找出它的版本号,那就看看它。在我的情况下,它是这样的:
# Version information for libapr-0.
current=9
age=9
revision=4
答案4
如果您只是想找出与 Apache 链接的版本,/usr/local/apache2/bin/httpd -V 会告诉您。