安装在Debian机器上的Apache版本


314

如何检查Debian机器上安装了哪个版本的Apache?

有执行此操作的命令吗?


4
堆栈溢出是一个用于编程和开发问题的站点。这个问题似乎与主题无关,因为它与编程或开发无关。请在帮助中心中查看我可以询问哪些主题。也许超级用户Unix&Linux Stack Exchange是一个更好的选择。另请参阅我在哪里发布有关Dev Ops的问题?
jww

Answers:


418

尝试apachectl -V:

$ apachectl -V
Server version: Apache/2.2.9 (Unix)
Server built:   Sep 18 2008 21:54:05
Server's Module Magic Number: 20051115:15
Server loaded:  APR 1.2.7, APR-Util 1.2.7
Compiled using: APR 1.2.7, APR-Util 1.2.7
... etc ...

如果它对您不起作用,请使用运行命令sudo


2
警告:在Ubuntu 14上运行Apache 2.4时,apache2ctl -V如果没有root特权,则无法运行(...,并且它不会打印版本)。而它可以在具有Apache 2.2的Ubuntu 12上运行。整rick
philippe_b 2014年

它的工作原理在Ubuntu 12.04,我相信有很多人还在使用Ubuntu 12.04,和我一样,谁不希望升级到14但直到与各种软件所有的bug被淘汰complete.y
JohnMerlino

工作于Debian 7.1
Cyclonecode 2014年

apachectl -V在suse10.04上不起作用,相反,我们必须输入/ usr / sbin / apache2ctl -v以获得具有root权限的正确答案
farzam 2014年

1
在Red Hat Enterprise Linux 6(64位)上运行良好
DemiSheep '16


34

对于较新的Debian或Ubuntu发行版,应该使用apache2ctl -v或apache2 -v

apache:/etc/apache2# apache2ctl -v
Server version: Apache/2.2.16 (Debian)
Server built:   May 12 2011 11:58:18

或者您可以使用apache2-V获取更多信息。

apache2 -V
Server version: Apache/2.2.16 (Debian)
Server built:   May 12 2011 11:58:18
Server's Module Magic Number: x
Server loaded:  APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.2.12, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....

高-V或小写-v都可以,但是除非您以root用户身份登录,否则可能需要使用sudo。
sdexp

27

该命令因您的Linux版本如何命名Apache服务器而异。

在Debian和Mac OS上:

apachectl -v

在Red Hat和Amazon的EC2 Linux上使用:

httpd -v

在其他Linux版本上,请尝试:

apache2 -v

您可以使用两个不同的标志:

-v # gives you the version number
-V # gives you the compile settings including version number.

如果要像完整的目录一样运行命令,就像user3786265一样,但是不知道您的Apache位于何处,请使用以下whereis命令:

whereis httpd

1
辉煌。您的答案涵盖了可能正在其中找到Apache版本的服务器环境的范围。如果是我的问题,我会将此标记为答案。也许我建议添加到您的答案中的唯一一件事就是通用路径。在某些环境中,该命令可能不在$ PATH中,因此尝试这些命令的人员可能会卡住。例如在我的Debian环境中,我不得不使用,$ /usr/sbin/apache2 -v因为$ apache2 -vreturn command not found。如果需要,此命令将帮助用户找到apache的路径:ps -ef | grep apache
启发

apache2 -v也可以在Debian上使用(至少在Raspberry Pi上为Debian 8(Jessie))。
彼得·莫滕森


15

尝试用sudo

apachectl -V
-bash: apachectl: command not found

sudo apachectl -V
Server version: Apache/2.4.6 (Debian)
Server built:   Aug 12 2013 18:20:23
Server's Module Magic Number: 20120211:24
Server loaded:  APR 1.4.8, APR-UTIL 1.5.3
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   32-bit
Server MPM:     prefork
  threaded:     no
  forked:     yes (variable process count)
Server compiled with....
bla bla....

如果您的配置文件中当前存在语法错误,则此方法将不起作用
Wolfgang Fahl

12

我认为您必须确定二进制或源代码的安装类型。要检查安装了哪些二进制软件包:具有root权限,请执行以下命令:

dpkg -l |grep apache2

结果应该是这样的:

dpkg -l |grep apache2
ii  apache2                               2.4.10-10+deb8u8                      amd64        Apache HTTP Server
ii  apache2-bin                           2.4.10-10+deb8u8                      amd64        Apache HTTP Server (modules and other binary files)
ii  apache2-data                          2.4.10-10+deb8u8                      all          Apache HTTP Server (common files)
ii  apache2-doc                           2.4.10-10+deb8u8                      all          Apache HTTP Server (on-site documentation)

要查找版本,您可以运行:

apache2ctl -V |grep -i "Server version"

结果应该类似于:服务器版本:Apache / 2.4.10(Debian)


11

您也可以直接使用包管理器:

dpkg -l | grep apache

这不仅关注版本号,而且会进行更广泛的搜索,这将为您提供其他有用的信息,例如模块版本。


对Apache的限制可以直接传递给dpkg。对于自动解释,您还需要一个值而不是一个列表,并且不应显示“已卸载”的apache2- *软件包。也请考虑dpkg -l apache2 | grep ^ii | awk '{print $3}' | cut -f1 -d-dpkg -l "apache2*" | grep ^ii | awk '{print $3}' | cut -f1 -d- | head -n 1
smoe

6

在基于Debian的系统上检查软件包(包括Apache)安装版本的另一种方法是,我们可以使用:

apt-cache policy <package_name>

例如对于Apache

apt-cache policy apache2

这将显示类似(看这Installed行):

$ apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.2.22-1ubuntu1.9
  Version table:
     2.2.22-1ubuntu1.9 0
        500 http://hk.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     2.2.22-1ubuntu1 0
        500 http://hk.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

6

对我来说,这适用于Debian 6(Squeeze):

Linux www809 2.6.26-2-xen-686#1 SMP Wed Sep 21 09:56:47 UTC 2011 i686 GNU / Linux

我必须走正确的路:

/usr/local/apache/bin** $ **./apachectl -v

./apachectl:第71行:ulimit:打开文件:无法修改限制:不允许操作
服务器版本:Apache / 2.2.21(Unix)
服务器内置:2011年12月17日19:57:53


5

我尝试运行命令“ httpd -V”和“ apachectl -V”,但无法执行,并收到错误消息:

-ksh:php:找不到[没有这样的文件或目录]

然后我尝试了另一种方式。我转到服务器上的Apache目录,然后尝试执行以下命令:

./apachectl -v

这为我工作,并返回输出:

Server version: Apache/2.2.20 (Unix)
Server built:   Sep  6 2012 17:22:16

我希望这有帮助。


5
  1. 您可以使用apachectl -Vapachectl -v。它们都将返回Apache版本信息!

        xgqfrms:~/workspace $ apachectl -v
    
        Server version: Apache/2.4.7 (Ubuntu)
        Server built:   Jul 15 2016 15:34:04
    
    
        xgqfrms:~/workspace $ apachectl -V
    
        Server version: Apache/2.4.7 (Ubuntu)
        Server built:   Jul 15 2016 15:34:04
        Server's Module Magic Number: 20120211:27
        Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
        Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
        Architecture:   64-bit
        Server MPM:     prefork
          threaded:     no
            forked:     yes (variable process count)
        Server compiled with....
         -D APR_HAS_SENDFILE
         -D APR_HAS_MMAP
         -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
         -D APR_USE_SYSVSEM_SERIALIZE
         -D APR_USE_PTHREAD_SERIALIZE
         -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
         -D APR_HAS_OTHER_CHILD
         -D AP_HAVE_RELIABLE_PIPED_LOGS
         -D DYNAMIC_MODULE_LIMIT=256
         -D HTTPD_ROOT="/etc/apache2"
         -D SUEXEC_BIN="/usr/lib/apache2/suexec"
         -D DEFAULT_PIDLOG="/var/run/apache2.pid"
         -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
         -D DEFAULT_ERRORLOG="logs/error_log"
         -D AP_TYPES_CONFIG_FILE="mime.types"
         -D SERVER_CONFIG_FILE="apache2.conf"

  2. 您可能更喜欢使用apache2 -Vapache2 -v。似乎更容易记住!

        xgqfrms:~/workspace $ apache2 -v
    
        Server version: Apache/2.4.7 (Ubuntu)
        Server built:   Jul 15 2016 15:34:04
    
    
        xgqfrms:~/workspace $ apache2 -V
    
        Server version: Apache/2.4.7 (Ubuntu)
        Server built:   Jul 15 2016 15:34:04
        Server's Module Magic Number: 20120211:27
        Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
        Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
        Architecture:   64-bit
        Server MPM:     prefork
          threaded:     no
            forked:     yes (variable process count)
        Server compiled with....
         -D APR_HAS_SENDFILE
         -D APR_HAS_MMAP
         -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
         -D APR_USE_SYSVSEM_SERIALIZE
         -D APR_USE_PTHREAD_SERIALIZE
         -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
         -D APR_HAS_OTHER_CHILD
         -D AP_HAVE_RELIABLE_PIPED_LOGS
         -D DYNAMIC_MODULE_LIMIT=256
         -D HTTPD_ROOT="/etc/apache2"
         -D SUEXEC_BIN="/usr/lib/apache2/suexec"
         -D DEFAULT_PIDLOG="/var/run/apache2.pid"
         -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
         -D DEFAULT_ERRORLOG="logs/error_log"
         -D AP_TYPES_CONFIG_FILE="mime.types"
         -D SERVER_CONFIG_FILE="apache2.conf"


3

对我来说apachectl -V没有用,但是apachectl fullstatus给了我我的版本。


'apachectl -v'在Mac,CentOS和Ubuntu上对我有用。您在哪个发行版上运行?apachectl fullstatus需要mod_status才能完成这项工作。因此,它也不是通用解决方案。
Konzulic 2014年

apachectl fullstatus没有为我工作。我得到了/usr/sbin/apachectl: 101: /usr/sbin/apachectl: www-browser: not found 'www-browser -dump http://localhost:80/server-status' failed.(Debian 8-Raspberry Pi上的Raspbian)。但是,apachectl -V确实可行。
彼得·莫滕森

3

Apache的某些安装很麻烦(请以Oracle的OHS包装为例),并且不了解-V标志,也不能直接调用它而不会遇到丢失的库错误。

最简单的方法是使用httpd二进制文件和grep上的strings命令(的一部分binutils)来查找可能类似于版本的字符串。例如,假设您的httpd二进制文件位于目录下/foo/bar

$ strings /foo/bar/httpd  | grep 2.2
GLIBC_2.2.5
Oracle-HTTP-Server/2.2.22 (Unix)
Success_Accepted_202
202 Accepted

大多数二进制文件(不是全部)包含其版本(至少其主版本)为静态字符串。这是获取版本的最佳方法(或证实二进制帮助信息与实际情况相符的事实。)


是不是httpd需要在此工作的当前目录?
彼得·莫滕森

1
这有助于我从新的Ubuntu安装中找到已挂载的旧根目录上的先前版本。值得一提的是:“字符串”是“ binutils”软件包的一部分
Zefiro

@PeterMortensen,是的。我想我的示例假设httpd位于当前目录中(并且读者可以从示例中推断出该内容并根据需要进行调整。)现在,我正在编辑我的答案以反映这一点
luis.espinal

@Zefiro,感谢大家的注意。我将更新答案以提及binutils。
luis.espinal

2

或者,不那么直接:

nmap -A localhost -p 80


如果将apache配置为不向HTTP标头添加版本信息,则将找不到任何内容。
Marki555

nmap可能未安装(例如,在Raspberry Pi上):-bash: nmap: command not found
Peter Mortensen

2

当然,最好/最快的方式是在外壳中输入/ usr / sbin / apache2 -v,这是另一种选择,以防万一您的服务器中也有PHP并且您有兴趣收集Apache版本(还有很多)更多信息)。

只需在您的Apache Web根文件夹(或任何您喜欢的文件)中创建一个info.php文件,并将其写入其中:

<?php
    phpinfo();
?>

现在转到yoursite.com/info.php(对于本地计算机,则为localhost / info.php)。

您将在PHP Variables部分中看到您的Apache版本,下面是一个示例:

phpinfo()示例转储页面

另外,请注意,这些步骤显然适用于任何与PHP集成的Web服务器,因此它不仅限于Apache,而且一旦创建该页面,在开发时便会很方便(只是不要忘记在生产环境中将其删除!)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.