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



   Стационарные и переносные ящики для голосования.             

Двоичные журналы - часть 4


dnb ttyp6 traal-22.ccs.neu Mon Nov 17 23:47 - 00:39 (00:52)

dnb ttypl traal-22.ccs.neu Mon Nov 17 23.47 - 00:39 (GO'52

dnb ttyps l:mbo-114.ccs.ne Mon Nov 17 19:03 - 19:26 (00'22)

user ttypS host.mcs.anl.go Mon Nov 17 18:09 - crash (27+11:50)

dnb '0 :0 Mo Nov 17 15:35 - 17:35 (4»P2 PC '

reboot " Mon Nov 17 15:24

Мы свободно можем вызывать программы, такие как last из Perl. Эта программа выводит все уникальные имена пользователей, найденные в текущем файле wtmp:

open( LAST. ' Slasrexec j"') or 02 "Невозможно Запустить

Sastexec :$!';:' while(<LAST>){

$user = (solit)[0]:

print "$user"."\n" unless exisfs $seen{$use"};

$seen{$user}='': } close(LAST) or die "Невозможно правильно закрыть канал:$!\п":

Так зачем же применять этот метод, если unраск() делает все, что нам нужно? Из-за переносимости. Мы уже продемонстрировали, что формат файла wtmp в различных операционных системах отличается. Ко всему прочему, производитель может изменить формат wtmp, а это приведет к тому, что шаблоном unpackQ в его существующем виде нельзя будет пользоваться.

Но вы можете рассчитывать на то, что команда last, читающая данный формат, будет присутствовать на вашей системе, независимо от каких-либо изменений формата. В случае применения метода unpack() придется создать и поддерживать различные строки шаблонов для каждого формата файла wtmp, который планируется использовать.

Самый большой недостаток такого метода по сравнению с unpack() -это увеличение сложности анализа полей, выполняемого в программе. В случае с unpack() все необходимые поля извлекаются автоматически. При использовании last можно столкнуться с данными, которые сложно разобрать при помощи split() или регулярных выражений:

user console Weo Oct 14 20:35 - 20:37 (00:01)

user pts/12 208.243,191.21 Wed Oct 14 09:19 - 18:12 (08:53)

user pts/17 208.243.191,21 Tue Oct 13 13:36 - 17:09 (03:33)

reboot system boot Tue Oct 6 14:13

На первый взгляд, не легко разобраться с полями, но любая программа, анализирующая подобный вывод, должна уметь правильно обрабатывать пропуски в первой и четвертой строках. Можно по-прежнему использовать unpack(), чтобы разделить эти данные, так как поля в нем имею риксированную ширину, но это не всегда возможно.




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