【问题标题】:Version of Apache installed on a Debian machine安装在 Debian 机器上的 Apache 版本
【发布时间】:2010-09-22 07:41:36
【问题描述】:

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

有执行此操作的命令吗?

【问题讨论】:

标签: apache debian version


【解决方案1】:

试试 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 运行命令。

【讨论】:

  • 警告:在 Ubuntu 14 上运行 Apache 2.4 时,apache2ctl -V 在没有 root 权限的情况下无法工作(...并且它不会打印版本)。而它适用于带有 Apache 2.2 的 Ubuntu 12。棘手。
  • 它可以在 Ubuntu 12.04 上运行,我相信很多人仍然在使用 Ubuntu 12.04,就像我一样,他们不想升级到 14,直到完全消除各种软件的所有错误。y
  • Debian 7.1上工作
  • apachectl -V 在 suse10.04 上不起作用,我们必须输入 /usr/sbin/apache2ctl -v 才能获得具有 root 权限的正确答案
  • 在 Red Hat Enterprise Linux 6(64 位)上运行良好
【解决方案2】:

这适用于我的 Debian:

$ /usr/sbin/apache2 -v

【讨论】:

    【解决方案3】:

    对于较新的 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 都可以,但您可能需要使用 sudo,除非您以 root 身份登录。
    【解决方案4】:

    该命令因您的 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
    

    【讨论】:

    • 太棒了。您的答案涵盖了可能试图在其中找到 Apache 版本的服务器环境范围。如果这是我的问题,我会将此标记为答案。也许我建议添加到您的答案中的唯一一件事就是通用路径。在某些环境中,该命令可能不在 $PATH 中,因此尝试这些命令的人可能会卡住。例如在我的 Debian enviro 中,我不得不使用$ /usr/sbin/apache2 -v,因为只有$ apache2 -v 返回command not found。如果需要,此命令将帮助用户定位到 apache 的路径:ps -ef | grep apache
    • apache2 -v 也适用于 Debian(至少 Debian 8 (Jessie) 在 Raspberry Pi 上)。
    【解决方案5】:

    我正在使用Red Hat Linux 并且以下命令有效:

    httpd -V
    

    【讨论】:

      【解决方案6】:

      我认为你必须确定你有什么类型的安装二进制或源代码。 要检查安装了哪些二进制包:使用 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)

      【讨论】:

      • 重要的是,这个答案还显示了 SUB 版本 - 某些 Debian 安装上的 2.4.48 还具有来自 apache 主 2.4.51 的反向移植安全修复程序。例如,此方法将版本显示为2.4.48-3.x,而不仅仅是2.4.48,这并不完全正确。
      【解决方案7】:

      用 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....
      

      【讨论】:

      • 如果您的配置文件中当前存在语法错误,这将不起作用
      【解决方案8】:

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

      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
      【解决方案9】:

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

      apt-cache policy <package_name>
      

      例如为阿帕奇

      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
      

      【讨论】:

        【解决方案10】:

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

        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

        【讨论】:

          【解决方案11】:

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

          -ksh: php: not found [No such file or directory]

          然后我尝试了另一种方法。我去了我服务器上的 Apache 目录,然后尝试执行命令:

          ./apachectl -v
          

          这对我有用并返回了输出:

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

          我希望这会有所帮助。

          【讨论】:

            【解决方案12】:
            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"

            【讨论】:

              【解决方案13】:

              对我来说 apachectl -V 不起作用,但 apachectl fullstatus 给了我我的版本。

              【讨论】:

              • 'apachectl -v' 适用于 Mac、CentOS 和 Ubuntu。你在哪个发行版上运行? apachectl fullstatus 需要 mod_status 才能完成这项工作。所以它也不是通用的解决方案。
              • 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 确实有效。
              【解决方案14】:

              Apache 的某些安装是 fubar(想想 Oracle 对它的打包,OHS)并且不理解 -V 标志,也不能直接调用而不会遇到缺少库的错误。

              最简单的方法是对 httpd 二进制文件使用 strings 命令(binutils 的一部分),然后使用 grep 获取可能类似于版本的字符串。例如,假设您的 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 不需要在当前目录中才能正常工作吗?
              • 这帮助我从新的 Ubuntu 安装中找到我挂载的旧根目录上的以前版本。值得一提:“strings”是包“binutils”的一部分
              • @PeterMortensen,是的。我猜我的示例假设 httpd 将位于当前目录中(并且读者会从示例中推断并根据需要进行调整。)我现在正在编辑我的答案以反映这一点
              • @Zefiro,感谢您的提醒。我将更新我的答案以提及 binutils。
              【解决方案15】:

              或者,不那么直接:

              nmap -A localhost -p 80

              【讨论】:

              • 如果 apache 配置为不向 HTTP 标头添加版本信息,您将找不到任何东西。
              • nmap 可能未安装(例如在 Raspberry Pi 上):-bash: nmap: command not found
              【解决方案16】:

              当然,在 shell 中键入 /usr/sbin/apache2 -v 是最好和最快的方法,顺便说一下,这是另一种选择,以防万一你的服务器中也有 PHP 而你'有兴趣通过快速编程步骤收集 Apache 版本(以及更多信息)。

              只需在您的 Apache Web 根文件夹(或任何您喜欢的文件夹)中创建一个 info.php 文件,然后在其中写入以下内容:

              <?php
                  phpinfo();
              ?>
              

              现在转到 yoursite.com/info.php(或 localhost/info.php 对于本地机器)。

              您将在 PHP 变量 部分看到您的 Apache 版本,这是一个示例:

              phpinfo() example dump page

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

              【讨论】:

                【解决方案17】:
                dlocate -s apache2 | grep '^Version:'
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-08-26
                  • 2014-09-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多