Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
В отличие от языков более низкого уровня (например, C), скрипты идеально подходят для организации взаимодействия программ. Именно это их качество помогает решать сложные задачи простыми способами – несравнимо проще, чем это можно было бы сделать на том же C.
Хорошей иллюстрацией этому утверждению может послужить, к примеру, задача сбора информации на прикладном уровне.
Зачастую в качестве контроллера домена NT-сети применяется пакет Samba. Как известно, он помогает вообще избавиться от серверной ОС Windows во многих случаях. В составе пакета Samba есть программа smbstatus. С ее помощью можно получить список подключений к сетевым ресурсам и информацию о блокировках файлов. Формат данных, выдаваемых этой программой, примерно такой:
Data store user group 76905 buhgalter (192.168.0.3) Fri Apr 11 15:25:38 2003
76905 DENY_WRITE 0x20089 RDONLY EXCLUSIVE+BATCH /pub/file.txt Thu Apr 11 17:30:46 2003
Перевести эти данные в список подключенных пользователей можно с помощью следующего скрипта (назовем его count_samba):
#!/bin/sh
smbstatus | grep -E "([0-9]{1,3}.){3}[0-9]{1,3}" | colrm 1 13 | grep -v -E "^nobody|^root"
| awk '{printf(" %s %s ",$1,$5)}' | sort | uniq | sed 's/[()]//g'
Данные от smbstatus преобразуются последовательностью утилит: сначала выбираются строки с IP-адресами, затем удаляется информация об именах ресурсов, удаляются строки с пользователями nobody и root, выводится информация о пользователе и адресе, которая затем сортируется, повторяющиеся строки удаляются и, наконец, удаляются скобки вокруг IP-адреса.
Символ «|» означает связывание программ с помощью канала (pipe), то есть стандартный вывод предыдущей программы связывается со стандартным вводом последующей. Это простейшее средство однонаправленного межпроцессного взаимодействия довольно широко применяется в UNIX именно из-за своей простоты. Как известно, чем проще инструмент, тем он надежнее – каналы как раз и есть этот простой и надежный инструмент. Одной из основ идеологии UNIX является использование нескольких простых утилит, связываемых через такие каналы, вместо одной большой и сложной программы (разумеется, только в тех случаях, когда этого достаточно для решения поставленной задачи).
Символ «» в конце строки указывает sh считать следующую строчку продолжением предыдущей. Можно, конечно, написать все в одну строчку, но в таком случае читабельность скрипта уменьшится.
В примере выше каждая из используемых утилит обрабатывает входной поток построчно. Посмотреть, как изменяются данные от одной программы к другой, можно последовательно подсоединяя к выходному потоку по одной программе, выстраивая их в цепочку.
Программа grep выбирает линии, соответствующие указанному регулярному выражению. Ключ -E используется вместе с расширенными регулярными выражениями. Выражение «([0-9]{1,3}.){3}[0-9]{1,3}» соответствует любому IP-адресу, а «^nobody|^root» – строкам, начинающимся с «nobody» или «root» (символ «|» здесь означает ИЛИ). Ключ -v указывает выбирать строки, не соответствующие заданному регулярному выражению. Подробнее о регулярных выражениях можно почитать на странице руководства grep(1).