특정 서버에 설치된 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
추신: libapr을 찾으려면 시도해 볼 수 있습니다.
ls /usr/lib/libapr*; ls /usr/local/lib/libapr*;ls /lib/libapr*;locate libapr; ...
또는 apache에서 사용하는 버전을 찾으려면 david가 말한 대로 httpd를 통해 ldd를 실행하세요.
답변2
많은 정보를 제공하지는 않지만 시도해 볼 수 있는 몇 가지 방법이 있습니다.
- 패키지 관리자에게 문의하세요. 이는 패키지 관리 시스템을 통해 시스템 전체에 libapr이 설치되어 있다고 가정합니다. 데비안은
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가 알려줍니다.