Хрестоматия по программированию на Си в Unix

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

Perl - это мощный язык программирования, уходящий корнями в задачи традиционного системного администрирования. В течение многих лет он адаптировался и расширялся для работы с новыми операционными системами и новыми задачами. До сих пор, однако, не было ни одной книги, посвященной использованию Perl исключительно для системного администрирования, тем самым признавая факт глубокой исторической связи.
Если вы уже немного знакомы с Perl и вам необходимо выполнять задачи системного администрирования, то эта книга для вас. Читатели с различным уровнем опыта как в Perl, так и в системном администрировании, найдут в этой книге что-то для себя полезное.
В некоторых главах предполагается, что у вас уже есть знания по определенным темам, в то время как этого может и не быть. Для тех, кто не знаком с отдельными темами этой книги, есть несколько мини-руководств, которые помогут быстро разобраться в их основах. В число этих руководств входят введение в систему контроля версий (RCS), введение в протокол LDAP (облегченный протокол доступа к каталогам), введение в SQL, XML и протокол SNMP.

Введение
В работе системного администратора используется любой и всякий язык программирования, если его применение приносит пользу. Так почему же в этой книге выбран именно Perl? Ответ на этот вопрос слышится в самой природе системного администрирования. Реми Эвард, мой друг и коллега, однажды описал работу системного администратора такими словами: «С одной стороны, у тебя есть набор ресурсов: компьютеры, сети, программное обеспечение и т. д. А с другой стороны, есть пользователи со своими нуждами и проектами - люди, которые хотят, чтобы их работа выполнялась.

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

Учетные записи пользователей
При обсуждении этой темы мы будем иметь дело лишь с несколькими ключевыми файлами, поскольку в них хранится постоянная информация о пользователе. Говоря «постоянная», я имею в виду атрибуты, которые существуют до тех пор, пока существует пользователь, сохраняясь даже тогда, когда пользователь не зарегистрирован в системе. Иначе я буду называть это учетной записью. Если в системе у вас есть учетная запись, вы можете зарегистрироваться и стать пользователем данной системы.

Действия пользователей
«Управление» - слишком громко сказано для функциональных возможностей, предоставляемых MacOS, поскольку последняя является не многопользовательской, а просто многозадачной операционной системой. Используя модуль Mac::Processes, можно взаимодействовать с менеджером процессов Macintosh (Macintosh Process Manager) при помощи MacOS Toolbox API для управления процессами. В случае частого применения этого модуля, стоит поискать руководство «Inside Ма-cintosh:Processes о работе с менеджером процессов.

Службы имен TCP/IP
В настоящее время большая часть «разговоров» между компьютерами происходит по протоколу управления передачей (Transmission Control Protocol), который, в свою очередь, выполняется на более низком уровне, называемом межсетевым протоколом (Internet Protocol). Эти два протокола обычно объединяются в один акроним TCP/IP. Каждой машине в TCP/IP-сети должен быть присвоен хотя бы один уникальный численный идентификатор, называемый IP-адресом. IP-адреса обычно записываются в формате NNN.NNN.N.N, например, 192.168.1.9.

Службы каталогов
Каталоги практически всегда связаны сетью. В отличие от некоторых баз данных, расположенных на той же машине, что и их клиенты (как хорошо известный файл /etc/passwd), службы каталогов обычно предоставляются по сетям.

Администрирование баз данных SQL
Существует два стандартных способа взаимодействия с SQL-сервером: DBI (DataBase Interface) и ODBC (Open DataBase Connectivity). Когда-то DBI был стандартом Unix, a ODBC - стандартом Win32, но эти границы начали расплываться после того, как ODBC стал доступным в мире Unix, a DBI был перенесен на Win32. Еще сильнее стирает эти границы пакет DBD: :ODBC - DBD-модуль, «говорящий» на ODBC из DBI.

Электронная почта
В контексте системного администрирования Perl может быть полезен, как посылая, так и отправляя почту. Электронная почта - это отличный способ сообщить о чем-либо: например о том, что в программе происходит что-то не то; или о результатах выполнения автоматического процесса (скажем, службы планировщика заданий или сгоп), или об изменениях чего-то, за чем необходимо следить.

Журналы
Журналы бывают разных типов, следовательно, нам нужно использовать различные подходы к их обработке. Самые распространенные журналы - полностью состоящие из строк текста. Популярные серверные пакеты, такие как Apache (веб), INN (новости Usenet) и Sendmail (электронная почта) записывают в журналы огромное количество текста. Большая часть журналов на Unix-машинах выглядит одинаково, потому что все они создаются одной и той же программой, известной под именем syslog.

Безопасность и наблюдение за сетью
Под словом «безопасность» для разных людей скрываются различные вещи. Если вы придете на конференцию ученых, изучающих Древнюю Грецию и Рим, и спросите их о Риме, первый вдохновенно прочтет вам лекцию об акведуках (инфраструктура и снабжение), второй расскажет о Римской империи (идеология и политика), третий растолкует о римских легионах (армия), четвертый поведает о Сенате (администрация) и т. д. Необходимость иметь дело сразу с каждой гранью безопасности - это первая ловушка.

Пятиминутное руководство по RCS
Это короткое руководство научит вас всему, что нужно знать о применении системы контроля версий (Revision Control System, RCS) для системного администрирования. Если вы собираетесь серьезно использовать RCS, то обязательно загляните в страницы руководств и источники информации, ссылки на которые приведены в конце приложения, поскольку здесь рассматривается лишь минимум возможностей.

Десятиминутное руководство по LDAP
LDAP (Lightweight Directory Access Protocol, облегченный протокол доступа к сетям) - это одна из самых значительных служб каталогов, существующих в настоящее время. Вероятно, со временем системные администраторы будут работать с LDAP-серверами и клиентами в различном контексте

Пятнадцатиминутное руководство по SQL
Команда GO применяется с интерактивными клиентами баз данных и служит указанием на то, что необходимо выполнить предыдущую команду. Но это не SQL-оператор. В следующих примерах будем считать, что команду GO необходимо выполнять после каждого SQL-оператора, если используется один из таких клиентов. Кроме того, комментарии в SQL будут обозначаться при помощи «- -».

Двадцатиминутное руководство по SNM
Поскольку нас интересует применение SNMP для управления устройствами, мы обратимся к ветви mgmt(2). Первый узел под mgmt(2) - сам MIB (это почти рекурсия). А раз существует только один MIB, то единственный узел под mgmt(2) - это mib-2(1).

Perl практика

Практические примеры применения различных свойств языка

Список и массив
Список - это упорядоченные скалярные данные. Массив - переменная, которая содержит список.

Модификаторы выражений
Оператор читается справа налево. Другие формы с модификаторами: выражение1 unless выражение2; выражение1 while выражение2; выражение1 until выражение2;

Простейшая CGI-программа
Используется модуль CGI.pm. Программа, которая запрос: serv.edu.kiae.ru/~gds/cgi-bin/test.cgi?flavor=mint:

Блоки операторов
{ 1_operator; 2_operator; 3_operator; ... last_operator; # with or witout ";" }

Доступ к каталогам
Пример: chdir("/etc") die "cannot cd to /etc ($!)"; print "where do you want to go? "; chomp($where = STDINgt); if(chdir $where) { # OK } else { # NOT }

Открытие и закрытие дескрипторов файлов
Дескрипторы "по умолчаниюquot: STDIN, STDOUT, STDERR. Открытие декриптора файла на чтение: open(ДЕСКРИПТОР,"имя"); Открытие декриптора файла на запись: open(ДЕСКРИПТОР,"имя");

Определение пользовательской функции
Определения подпрограмм могут стоять в любом месте текста программы. Определения программ глобальны. В теле функции можно обращаться к переменным, используемым в других частях программы.

Что такое хеш
Хеш представляет собой набор скалярных данных, отдельные элементы которого выбираются по индексному значению. Индексные значения хеша - произвольные скаляры (ключи). Отдельные элементы хеша не стоят в каком-то определенном порядке. Порядок хранения пар ключ-значение изменить нельзя.



Ввод из STDIN
Операция чтения скалярного значения из STDINgt в $_ и использование этого значения в качестве переменной цикла: while(STDINgt) { # как "while(defined($_ = STDINgt))" chomp; # как "chomp($_)" # другие опрации с $_ }

Программа Hello
#!/usr/local/bin/perl -w use 5.004; use strict; print "What is you name? "; $main::name = STDINgt ; chomp($main::name); print "Hello, $main::name! \n";

Основные понятия
Регулярное выражение представляет собой образец - шаблон - который сопоставляется со строкой. Сопоставление со строкой дает либо успешный результат, либо неудачный.

Скалярные типы данных
Скаляр - это простейший тип данных Perl. В Perl числа и строки используются практически как взаимозаменяемые понятия.

Хрестоматия по программированию на Си в Unix

В этой книге вы найдете ряд задач, примеров, алгоритмов, советов и стилистичес- ких замечаний по использованию языка программирования "C" (Си) в среде операционной системы UNIX. Здесь собраны этюды разной сложности и "штрихи к портрету" языка Си. Также описаны различные "подводные камни" на которых нередко терпят крушение новички в Си. В этом смысле эту книгу можно местами назвать "Как не надо программировать на Си". В большинстве случаев в качестве платформы используется персональный компьютер IBM PC с какой-либо системой UNIX, либо SPARCstation 20 с системой Solaris 2 (тоже UNIX svr4), но многие примеры без каких-либо изменений (либо с минимумом таковых) могут быть перенесены в среду MS DOS[**], либо на другой тип машины с системой UNIX. Это ваша ВТОРАЯ книга по Си. Эта книга не учебник, а хрестоматия к учебнику. Она не является ни систематическим курсом по Си, ни справочником по нему, и предназ- начена не для одноразового последовательного прочтения, а для чтения в несколько про- ходов на разных этапах вашей "зрелости". Поэтому читать ее следует вместе с "настоя- щим" учебником по Си, среди которых наиболее известна книга Кернигана и Ритчи. Эта книга - не ПОСЛЕДНЯЯ ваша книга по Си. Во-первых потому, что кое-что в языке все же меняется со временем, хотя и настал час, когда стандарт на язык Си наконец принят... Но появился язык C++, который развивается довольно динамично. Еще есть Objective-C. Во-вторых потому, что есть библиотеки и системные вызовы, которые раз- виваются вслед за развитием UNIX и других операционных систем. Следующими вашими (настольными) книгами должны стать "Справочное руководство": man2 (по системным вызо- вам), man3 (по библиотечным функциям). Мощь языка Си - в существующем многообразии библиотек. Прошу вас с первых же шагов следить за стилем оформления своих программ. Делайте отступы, пишите комментарии, используйте осмысленные имена переменных и функций, отделяйте логические части программы друг от друга пустыми строками. Помните, что "лишние" пробелы и пустые строки в Си допустимы везде, кроме изображений констант и имен.

Хрестоматия по программированию на Си в Unix -1
Не гонитесь за краткостью в ущерб ясности. Си позволяет порой писать такие выра- жения, над которыми можно полчаса ломать голову. Если же их записать менее мудрено, но чуть длиннее - они самоочевидны (и этим более защищены от ошибок). В системе UNIX вы можете посмотреть описание любой команды системы или функции Си, набрав команду man названиеФункции (man - от слова manual, "руководство"). Еще одно напутствие: учите английский язык!

C - статьи

К сожалению, выбор компилятора часто обусловлен, опять-таки, идеологией и соображениями вроде "его все используют". Конечно, среда разработки Microsoft Visual C++ несколько более удобна, чем у портированного gcc - но это ведь вовсе не значит, что релиз своего продукта вы должны компилировать с использованием MSVC++. Используйте оболочку, компилируйте промежуточные версии на MSVC++ (кстати, время компиляции у него гораздо меньше, чем у gcc), но релиз можно собрать с использованием другого компилятора, например от Intel. И, в зависимости от компилятора, можно получить прирост в производительности на 10% просто так, на ровном месте. Но какой "правильный" компилятор выбрать, чтобы он сгенерировал максимально быстрый код? К сожалению, однозначного ответа на этот вопрос нет - одни компиляторы лучше оптимизируют виртуальные вызовы, другие - лучше работают с памятью.

Сравнительный анализ компиляторов С++
Как проверить, насколько эффективный код генерирует компилятор? Очень просто: нужно выбрать несколько наиболее часто употребляемых конструкций языка и алгоритмов - и измерить время их выполнения после компиляции различными компиляторами. Для более точного определения времени необходимо набрать статистику и выполнить каждую конструкцию некоторое количество раз.

Процедуры
Несмотря на то, что подпрограммы C-- могут возвращать значения, для них используется термин "процедуры", а не "функции". Термин "функция" более соответствует чистым математическим функциям, т. е. соответствию y=f (x) между переменными величинами, в силу которого каждому рассматриваемому значению некоторой величины x - аргумента (или независимой переменной) соответствует определенное значение другой величины y - функции (или зависимой переменной).

Беспроводные сети

Архитектуру локальной сети лучше всего описывать через многоуровневую протокольную структуру, упорядочивающую основные функции локальной сети. Данный раздел начинается с описания стандартизированной протокольной архитектуры для локальных сетей, которая включает физический уровень, уровень управления доступом к среде и уровень управления логическим каналом. Затем подробно рассматриваются два последних.

Архитектура протоколов
Логика, необходимая для управления доступом к среде совместного использования, не находится на традиционном уровне 2 управления каналом передачи данных. При одинаковом управлении логическим каналом могут быть реализованы разные схемы управления доступом к среде.

Области применения Bluetooth
Технология Bluetooth предназначена для работы в среде со многими пользователями. В маленькую сеть, называемую пикосетью (piconet), могут объединяться до восьми устройств. Десять таких пикосетей могут сосуществовать в одном радиодиапазоне Bluetooth. Для обеспечения безопасности каждый- канал связи кодируется и защищается от подслушивания и интерференции.

Организация сотовой сети
В беспроводной сотовой системе нельзя неограниченно использовать одну и ту же частоту для разных сообщений, так как при передаче на произвольных частотах разные сигналы могут интерферировать, даже если географически они разделены. Поэтому для систем, поддерживающих большое количество одновременных сеансов связи, нужен механизм, определяющий принципы использования спектра.

Применение беспроводных локальных сетей
Ранние продукты рынка беспроводных локальных сетей, появившегося в конце 1980-х, представлялись как замена традиционных проводных локальных сетей. Беспроводные локальные сети экономят средства на прокладку кабеля локальных сетей, облегчают задачу передислокации и другие модификации структуры сети. Впрочем, события опередили этот мотив использования беспроводных локальных сетей.

Параметры и конфигурации спутника
Сердцем системы спутниковой связи является антенна спутника, находящегося на стационарной орбите. С помощью одного или нескольких таких спутников, используемых как космические ретрансляторы, осуществляется связь между двумя или несколькими станциями, принадлежащими одной системе спутниковой связи и расположенными на Земле или близ Земли. Системы антенн, расположенных на Земле или близ Земли, называют наземными станциями. Канал передачи данных с наземной станции на спутник называется восходящим (uplink), а канал передачи данных в обратном направлении — нисходящим (downlink).

Бесшнуровые системы
Стандартизованные бесшнуровые системы основаны на технологии беспроводного телеграфа. Первоначально радиотелефоны разрабатывались для предоставления пользователям свободы передвижения в пределах их жилья или небольшого учреждения. Все началось с отделения телефонной трубки от остальной части телефона (именуемой базовой станцией, или базой) и установления простого беспроводного аналогового канала связи. По мере совершенствования технологии были разработаны и цифровые радиотелефоны.