UNIX Найти сайты с несуществующими доменами

Материал из Выращивание растений.
Перейти к: навигация, поиск


Предположим, Вы администратор хостинга использующего Apache и у Вас накопилось куча каталогов недействительных сайтов. Однако, Вы предусмотрительно придерживались политики называть каталог сайта эквивалентно его доменному имени (если Вы этим не озаботились заранее, то в конце статьи есть усложненный скрипт, который гребет ServerAdmin непосредственно из httpd.conf).

т.е. к примеру /www/root/www.pupkin.ru и т. д.

В таком случае вот такой скрипт поможет Вам обнаружить сайты Non-existent host/domain

#!/usr/local/bin/bash

string='Non-existent'

for a in `ls`
do
if [ -d "$a" ]; then
b=`nslookup $a`
if [[ $b == *Non-existent* ]]; then
echo $a
fi
fi
done

Заходим cd /www/root

Создаем файл скрипта vi /www/root/1.sh

и запускаем bash 1.sh

Получаем набор строк вида

ns.your.ru can't find www.pupkin.ru: Non-existent host/domain


Более сложный скрипт пытается добыть ServerName из указанного Вами файла (например httpd.conf или vhost.conf), расположение которого Вы должны знать. Предположим, это /www/local/apache2/conf/httpd.conf

Сначала стоит подобрать строку добывающую имена, т.е. в коммандной строке набрать

grep "ServerName" /www/local/apache2/conf/httpd.conf | grep -v "#" | sed 's/ServerName//'

когда подобрали - поменяйте ее и в скрипте, приведенном ниже:

#!/usr/local/bin/bash

string='Non-existent'

for a in `grep "ServerName" /www/local/apache2/conf/httpd.conf | grep -v "#" | sed 's/ServerName//'`
do
if [ -d "$a" ]; then
b=`nslookup $a`
if [[ $b == *Non-existent* ]]; then
echo $a
fi
fi
done