Quick script I whipped up today to grab all of the domain names on a server.
#!/bin/bash
if [ -e alldomains ]
then
rm alldomains
fi
alldomains=( $(find /etc/httpd/conf.vhosts/ -name *.conf) )
for domain in ${alldomains[*]}
do
cat $domain | egrep "ServerName|ServerAlias" | egrep -v "#" | sed -e 's|ServerName||' -e 's|ServerAlias||' -e 's|www.||' -e 's|:80||' | tr -s ' ' '\n' | tr -d ' ' | sed -e '/^\s*$/d' >> alldomains
done
sort alldomains | uniq | sort -o alldomains
This gets all of the domains from ServerName and ServerAlias lines, takes out all of the white space and empty lines, and creates a file with just a list of the unique domain names.
This accounts for subdomains that use ‘www’ or have port :80 on the end.
For instance, www.somedomain.com and somedomain.com are the same, so the script takes out the ‘www.’ which leaves to copies of somedomain.com, which it then deletes one of them in the final output to the file. The same for ‘:80’.