Perl для системного администрирования



         

MIS, NIS+ и WINS - часть 3


Sdomain = Net: :NIS: :yp_get_default_domain();

считываем карту

(Sstatus, $info) = Net::NIS::yp_all($domain."hosts.byname");

oreach my $name (sort keys %{$info}){

print "$name => $info->{$name}\n";

}

Сначала необходимо обратиться к локальному узлу для получения имени домена. Используя эту информацию, можно вызвать функцию Net: :NIS: :yp_all() и получить карту. Функция возвращает переменную состояния (фиктивную, как видно из сноски) и ссылку на хэш-таблицу, содержащую данные из этой карты. Мы выводим эту информацию, применяя обычный синтаксис разыменования.

Если нужно узнать только IP-адрес одного узла, эффективнее было бы запросить у сервера именно это значение:

use Net::NIS;

Shostname = "olaf.oog.org";

Sdomain = Net::NIS::yp_get_default_domain();

(Sstatus. Sinfo) = Net: :NIS: :yp_match(Sdomain. "hosts. byrame". Sfiostr. w.t.'

print $info, "\n":

Функция Net: :NIS: :yp_match() возвращает еще одну фиктивную переменную состояния и значение (скаляр), соответствующее запрашиваемой информации.

Если не удается скомпилировать модуль Net: : NIS или он просто не работает, всегда остается возможность вызвать внешнюю программу. Например, так:

(5>hosts='<nyrb K>/ypcat hosts' или так:

open(YPCAT,"<путь K>/ypcat hostsl");

while (<YPCAT>){...}

Завершит данный раздел пример, в котором применяются оба способа. Этот маленький, но полезный фрагмент программы получает список текущих NIS-серверов и опрашивает каждый из них при помощи программы yppoll. Если какой-либо из серверов не отвечает как полагается, выводится соответствующее сообщение:

use Net::NIS;

Syppollex = "/usr/etc/yp/yppoll";

 полный путь к программе yppoll

Sdomain = Net::NIS::yp_get_default_domain();

(Sstatus,Sinfo) = Net::NIS::yp_all($domain,"ypservers");

foreach my $name (sort keys %{$info}) {

Sanswer = 'Syppollex -h Sname hosts.byname':

if (Sanswer !" /has order number/) { warn "Sname отвечает неверно1\n";




Содержание  Назад  Вперед