<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="index.xml.meta">
<parentdocument href="../"/>

  <title>Server and Supporting Programs</title>

<summary>
    <p>This page documents all the executable programs included
    with the Apache HTTP Server.</p>
</summary>

<section id="index"><title>Index</title>

    <dl>
      <dt><program>httpd</program></dt>

      <dd>Apache hypertext transfer protocol server</dd>

      <dt><program>apachectl</program></dt>

      <dd>Apache HTTP server control interface</dd>

      <dt><program>ab</program></dt>

      <dd>Apache HTTP server benchmarking tool</dd>

      <dt><program>apxs</program></dt>

      <dd>APache eXtenSion tool</dd>

      <dt><program>configure</program></dt>

      <dd>Configure the source tree</dd>

      <dt><program>dbmmanage</program></dt>

      <dd>Create and update user authentication files in DBM format
      for basic authentication</dd>

      <dt><program>fcgistarter</program></dt>

      <dd>Start a FastCGI program</dd>

      <dt><program>htcacheclean</program></dt>

      <dd>Clean up the disk cache</dd>

      <dt><program>htdigest</program></dt>

      <dd>Create and update user authentication files for digest
      authentication</dd>

      <dt><program>htdbm</program></dt>

      <dd>Manipulate DBM password databases.</dd>

      <dt><program>htpasswd</program></dt>

      <dd>Create and update user authentication files for basic
      authentication</dd>

      <dt><program>httxt2dbm</program></dt>

      <dd>Create dbm files for use with RewriteMap</dd>

      <dt><program>logresolve</program></dt>

      <dd>Resolve hostnames for IP-addresses in Apache
      logfiles</dd>

      <dt><program>log_server_status</program></dt>

      <dd>Periodically log the server's status</dd>

      <dt><program>rotatelogs</program></dt>

      <dd>Rotate Apache logs without having to kill the server</dd>

      <dt><program>split-logfile</program></dt>

      <dd>Split a multi-vhost logfile into per-host logfiles</dd>

      <dt><program>suexec</program></dt>

      <dd>Switch User For Exec</dd>

    </dl>
</section>

</manualpage>
