Реферат: Администрирование локальных сетей

1.   Общий обзор архитектуры UNIXсистем.                                              5

Краткий обзор UNIX подобныхоперационных систем.                                           5

Основные причины популярности UNIX.                                                                    5

Структура операционной системы.                                                                             5

Задачи выполняемые  ядром операционнойсистемы                                             6

Подсистема управления процессами.                                                                         7

Подсистема управления памятью.                                                                              7

Файловая подсистема.                                                                                                   8

Подсистема ввода-вывода.                                                                                            8

2.   Шеллы и основные команды HP-UX.                                                        9

Общее знакомство с шелами                                                                                         9

Bourne Shell.                                                                                                                  10

C Shell .                                                                                                                            42

Korn Shell и POSIX shell                                                                                             57

Key Shell (keysh).                                                                                                           65

3.   Администрирование системы X Window                                           69

Базовые концепции X Window                                                                                     69

Компоненты системы X Window                                                                                69

Предварительное конфигурирование                                                                         70

Имена и классы клиентов                                                                                            73

Имена и классы ресурсов                                                                                            74

Типы ресурсов                                                                                                                 74

Управление шрифтами                                                                                                  75

2.   Программирование на HP-UX                                                                      82

Этап линкирования.                                                                                                       85

Работа с библиотеками                                                                                                 85

Создание архивной библиотеки.                                                                                 89

Открытие Библиотек Распределеного доступа                                                       91

Создание Общедоступной Библиотеки с ld                                                             92

Модифицирование Общедоступной Библиотеки                                                    93

Применение make                                                                                                           94

Отладчик ADB                                                                                                               103

Отладчик XDB                                                                                                               109

3.   Примеры команд                                                                                              110

VARIABLES                                                                                                                    117

LOCATIONS                                                                                                                   117

FORMATS                                                                                                                       118

4.   Системные вызовы и взаимодействие сUNIX.                             119

Время в UNIX.                                                                                                                124

Сигналы.                                                                                                                        131

Деления просесса                                                                                                        135

Пайпы и FIFO-файлы.                                                                                                  135

Нелокальный переход.                                                                                                138

Разделяемая память                                                                                                    139

Семафоры                                                                                                                      140

Очереди сообщений                                                                                                     142

5.   Старт системы.                                                                                                 146

6.   Run-levels.                                                                                                           150

Остановка системы                                                                                                    155

Конфигурирование ядра системы                                                                            158

7.   Изменение системных параметров                                                    161

Инсталирование периферии                                                                                       164

Системная конфигурация                                                                                          165

Управление процессами                                                                                             173

Управление процессами и ядро системы                                                                182

8.   1. Файловая система HFS.                                                                            185

Структура файловой системы HFS                                                                          186

Главный суперблок                                                                                                     186

Группы цилиндров                                                                                                        187

Размер                                                                                                                             187

Блоки данных                                                                                                                189

Доступ к блокам данных                                                                                 190

Модификация файлов в HP-UX                                                                                  193

Менджер логических дисков LVM                                                                           194

Создание корневой VG и корневого LV                                                                    201

Резервное копирование и свосстановлениеконфигурации Volume Groups   202

Перемещение и переконфигурирование дисков                                                    203

3. Особенности файловой системы VxFS                                                               206

Монтирование и демонтирование файловых систем                                           208

Проверка файловых систем                                                                                       209

10.  Мониторинг использования дисковогопространства      212

11. . Организация веб-сайта                                                                           214

Выбор операционной системы.                                                                                 214

Выбор программного обеспечения сервера.                                                           215

Анализ веб-серверов.                                                                                                    216

Инсталляция веб-сервера.                                                                                          217

Стратегическое планирование. Определениеобъема работы.                          221

Тактическое планирование сайта. Разработкаструктуры.                               226

Дизайн интерфейса.                                                                                                     228

Программирование.                                                                                                     230

Публикация и Маркетинг.                                                                                          233

12.  Веб-страницы и веб-приложения.                                                       235

Классификация веб-объектов.                                                                                  235

Спецификация DTD. Понятие ортогональности иметоды ее реализации.     236

Веб-страницы. Языки разметки. (HTML, XML)                                                       237

Веб-страницы. Программирование (JavaScript,CSS, SSI, CGI, PHP)                 261

Модульность и ортогональность с использованиемсуществующих технологий.       288

Веб-приложения.                                                                                                           289

Общие требования к страницам сайта.                                                                   290

Совместимость с различными браузерами.                                                            292

13.  Конфигурация и управление веб-серверами.                              295

Встроенные средства управления сервером. (apachectl,apxs)                          295

Глобальные разделы конфигурации.                                                                       296

Вспомогательные скрипты – просмотр и ротациялогов, статистика посещений.         299

Безопасность веб-сервера.                                                                                         299

Организация доступа и разграничение правпользователей.                             303

. Подключение новых модулей и апгрейдпрограммного обеспечения веб-сайта.         303

14.  Администрирование веб-сервера.                                                       304

Логгирование и поиск ошибок.                                                                                 305

Обеспечение безопасности .                                                                                      311

Создание резервных копий. Технологии: Backup,mirroring.                             313

15.  Система безопасности HP-UX                                                                314

16.  Политика и планирование системыбезопасности              314

Установка TrustedСистемы                                                                                    315

Управлениепаролями и системным доступом                                                     316

17.  Управлением доступом к файлам икаталогам                       317

Контрольбезопасности сети (networks)                                                                319


1.  Общий обзор архитектуры UNIX систем.Краткий обзор UNIX подобныхоперационных систем.

 

Вданый момент, не существует стандартной системы UNIX,вместо этого вы столкнетесь со множеством операционных систем, имеющих своиназвания и особенности. Но за этими особенностями и названиями прослеживаетсяобщая архитектура, интерфейс и среда программирования. Все эти системы так илииначе являются родственными Из-за  своей простоты, ясности, легкой способностик расширению и модификации  UNIX стали переносить намножество платформ. Однако несмотря на множество реализаций базовой системы, среди всех них можно четко выделить две основные ветки: System VUNIX и BSD UNIX. Различия между ними не носят принципияльный характер и зачастую сказать к какой из ветокпринадлежит та или иная реализация операционной системыбывает сложно. К основным различиям между System V и BSD подобными системамиможно отнести терминальную инициализацию, имена конфигурационных файлов ифайлов инициализации системы, стандартный размер блоков файловой системы,управление терминалами, различное отображение информации о процессах и.т.п.Одним словом принципиальных различий с точки зрения пользователя между разнымиветками операционной системы UNIX не существует.Рассматриваемая нами операционная система HP-UX 10.20является одной из реализаций UNIX выпущенной фирмой Hewlett-Packard. По своейструктуре это чистая System V подобная 32-х разрядная операционная система,включающая поддержку симметричных многопроцессорных систем (SMP), файловыхсистем большего объема (до 128Гб) и расширенного виртуального адресногопространства (до 3.75 Гб).

Основные причины популярности UNIX.

Каковы же причины популярности этой операционной системы? В первуюочередь это более чем трех десятилетний возраст. За этот период она полностьюпрошла проверку временем. Во вторых код системы практически полностью написанна языке высокого уровня С, что сделало ее простой для понимания, внесения изменений и переноса на другие аппаратныеплатформы. Некоторые из версий UNIX поставляются вместе сисходными текстами, однако даженесмотря на то что большинство UNIX поставляется в виде бинарных файлов, системавсе равно остается легко расширяемой и настраиваемой. Так же следует отметитьтот факт что UNIX в изначально создавалась как мно­го­поль­зо­ва­тель­ская имногозадачная система ориентированная в первую очередь на выполнение серверныхфункций. Следует отметить и тот факт что UNIX практически изначальносоздавалась как сетевая операционная система (даже графическая оболочка UNIXсистема X Window является полностью сетевой), что позволило ей занять лидирующиепозиции на рынке серверов для Интернет приложений и дало мощные встроенныесредства удаленного администрирования.  Не маловажную роль в популярности UNIXсыграла ее единая иерархическая файловая система с унифицированным доступом нетолько к файлам данных но и к аппаратным ресурсам таким как диски, терминалы,принтеры, сеть, память и.т.п.

Структура операционной системы.

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

/>


                Рис 1.1

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

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

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

Задачи выполняемые  ядромоперационной системы

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

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

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

Подсистема управления процессами.

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

Подсистема управления памятью.

Подсистема управления памятью управляет выделением, размещением иосвобождением  памяти для прикладных задач. Прикладные программы никогда неиспользуют физическую память напрямую, т.к. все современные операционныесистемы реализуют так называемую виртуальную память объем которой можетпревышать объем физической памяти. При этом задействуется механизмы страничнойадресации памяти в которых все виртуальное адресное пространство разделяется нанебольшие блоки – страницы. Размер страницы варьируется в зависимости отархитектуры, для архитектуры HP PA-RISC это 2К, для Intel это 4K. Каждаястраница имеет специальные атрибуты которые определяют права доступа к ней,факт присутствия в физической памяти, частоту обращений и.т.п. Преобразованиеиз виртуального адреса в физический осуществляется аппаратно. Данная схемаадресации дает ряд неоспоримых преимуществ которые используются всемисовременными операционными системами. А именно: возможность экономии физическойпамяти путем совместного использования одних и тех же страниц виртуальнойпамяти разными процессами, реализация разделяемой памяти, а также возможностьиспользования вторичных устройств в качестве устройств памяти что позволяетзадачам задействовать виртуальной памяти больше чем есть реально физическойпамяти в системе. Реализуется  это следующим образом: в случае нехваткифизической памяти, ядро сбрасывает на внешний носитель (как правило диск)страницы к которым наиболее долго не было обращений, а так же при обращении кстранице которой реально нет в физической памяти процессор генерируетисключительную ситуацию обработчик которой загружает страницу обратно свнешнего носителя в физическую память. Этот процесс носит название пейджинг илисвопинг.

Файловая подсистема.

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

Подсистема ввода-вывода.

Подсистема ввода-вывода обслуживает запросы файловой подсистемы иподсистемы управления процессами для доступа к периферийным устройствам(сетевые адаптеры, диски, терминалы …). Также она обеспечивает буферизацию икеширование данных и взаимодействует с драйверами устройств – специальнымимодулями ядра непосредственно работающими с внешними устройствами.


2.   Шеллы и основные командыHP-UX.

 

                2.1.1      Общее знакомство с шелами

                2.1.2      Смена шела

                2.2.1      Bourne Shell

                2.2.1.1    Основныевозможности Shell.

2.2.1.2   Shell скрипты

2.2.1.3   Основы программирования на языке shell

2.2.1.4   Некоторые специальные команды

 

Общее знакомство с шелами

Шелл это интерфейс между операционнойсистемой и пользователем. Шелл интерпретирует пользовательский ввод и даетуказания операционной системе выполнить те или иные действия. Шелл можно такжерассматривать как язык программирования.

               

                BourneShell. Это самый старейший из шелов который былнаписан Стэфаном Борном в Лаборатории Беэлла. Этот шелл является шелом поумолчанию для HP-UX пользователей и долгое время был стандартом де факто.

Bourne Shell неимеет в своем арсенале ни интерактивных возможностей ни сложных программныхконструкций в отличии от С и Korn шеллов.

                CShell. Этот шел был разработан Биллом Джоем в Калифорнийском УниверситетеБеркли. Его синтаксис имеет сходство с языком программирования С. Он такжеимеет интерактивный интерфейс например историю команд и раскрытие имен файлов.

                KornShell. Он является относительно новым шеломразработанным Девидом Корном в Лаборатории Бэлла и является вверх совместимым сбольшинством возможностей Bourne Shell. Так же как и С shell он имеетинтерактивные возможности, но выполняется быстрее имеет расширенные возможностиредактирования командной строки.

                POSIXshell. Этот шелл базируется на стандартеопределенном в Portable Operation System Interface (POSIX) – IEEE P1003.2. Этотстандарт был разработан для прикладных и системных программистов. Он фактическиопределяет стандарт на интерфейс операционной системы. Большинство возможностейPOSIX Shell очень сильно схожи с аналогичными возможностями Korn Shell-a. Мыбудем рассматривать оба этих шела едино, указывая лишь небольшие различия междуними. POSIX Shell имеет тоже имя что и Bourne Shell поэтому он помещен в/usr/bin/posix директорию в отличии от Bourne Shell, который находится вдиректории /usr/bin.

                KeyShell. Это оболочка для Kourn Shell-a разработаннаяфирмой Hewlett-Packard. Она позволяет использовать меню и онлайн помощь помогаяв построении команд и выполнению ряда часто встречаемых задач, таких какпросмотр, редактирование и печать файлов, просмотр содержимого директориии.т.п. Построена она таким  образом что пользователь может сам в дальнейшем

расширять еевозможности.

                Bash.Название этого шела расшифровывается как BourneAgain Shell. Он бы разработан консорциумом Free Software Foundation и несмотряна то что по умолчанию он отсутствует в стандартной поставке HP-UX 10.20, вследствии  своих мощных функциональных возможностей он пользуется огромнойпопулярностью среди пользователей и администраторов HP-UX. Его интерпретаторкоманд совместим  с Bourne Shell. Также он вместил в себе полезные возможностиKorn  C шеллов. Он разрабатывался в сооответствии со спецификациями IEEE POSIXShell and  Tools  specification  (IEEE  Working Group 1003.2).

2.1.2 Смена шела

 

Для того чтобыопределить Ваш системный шелл достаточно сразу после логина выполнить команду:

 echo $SHELL

 

она показываетсодержимое переменной SHELL в которую система прописывает Ваш шеллустановленный по умолчанию. Для временной смены шела достаточно выполнитьзапуск желаемого шела в текущем:

$ ksh                                                                запускKourne Shell

$ ps                                                                  печатьсписка процессов

            PID TTY       TIME COMMAND

            12320 pts/2     0:00 sh                           Bourneshell

            12322 pts/2     0:00 ksh                         KornShell

            12323 pts/2     0:00 ps

$ exit                                                                выходиз Korn Shell-a

Для постояннойсмены шела устанавливаемого системой после входа (login shell) необходимовыполнить команду:

chsh <ваш_логин><полное_имя_шела>

Замечание: список шелов доступных в системе для пользователей находится вфайле /etc/shells

Bourne Shell.

 

2.2.1.1   Основные возможности Shell.

Запуск шеллаи выход из шелла

Для запускаBourne Shell достаточно ввести shв текущем шеле. Выход из шела возможен либо по команде exit либо введя в терминале символ коца файла Ctrl-D.

Последовательноевыполнение команд.

Несколько командможно последовательно выполнять разграничивая точкой с запятой. Например,фрагмент

            $ who

$ ps –ef

$ ls –l

и         

            $ who; ps –ef; ls -l

дадут полностьюодинаковый результат.

 

Фоновое выполнение. 

 

Запуск программыв фоновом режиме (без блокировки текущего шела) достигается добавлением в конецкоманды знака &

Перенаправлениеввода-вывода.

 

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

Символ

Функция

Пример

<  Перенаправление ввода из файла program < in_file >  Перенаправление вывода в файл program > out_file >>  Перенаправление вывода в файл с добавлением Program >> out_file

Пайпы. Две или более программ  могут быть объединены таким образом чторезультат одной программы попадет на вход другой. При этом данные от однойпрограммы к другой следуют через програмный канал, например:

program1 | program2 |program3

 

или болеереалистичный пример:

            ls –l /etc | more

 

Примечание: пайпы всегда работают лишь в одном направлении – со стандартноговыхода одной к стандартному входу другой программы. 

Расширениеимен файлов.

В целяхуменьшения количества набираемых символов при вводе имен файлов шелподдерживает метасимволы. Нпример для того чтобы вывести листинг  всех файлов втекущей директории имена которых  начинаются с буквы a достаточновоспользоваться командой ls –l  a*

ниже приведена таблицаосновных метасимволов

Метасимвол Описание * Означает любой символ в любом количестве ~ Означает путь к домашнему каталогу ? Любой символ в количестве один или больше [ … ] Равенство любого одного из символов заключенных в скобки. Пара символов разделенная знаком минус означает любой символ из промежутка между ними. Например [a-zA-Z] – любаялатинская буква

2.2.1.5               Shell скрипты

 

Выполнениескриптов.

Несколько командобьедененных одной последовательностью выполнения называется скриптом. Напримерпоследовательное выполнения команд, пайпы являются простейшими скриптами.Обычно команды из которых состоят скрипты сохраняют в файлах. Для запускаскрипта можно воспользоваться двумя методами:

sh <имя_файла_скрипта>

 

или установитьатрибут выполняемости на файл командой

chmod +x <имя_файла_скрипта>

После чего можновыполнять скрипт:

                ./<имя_файла_скрипта>


Выводтекста.

Дляформирования вывода текстовой информации в скриптах используют команду

echo “строка

 

Файл .profile 

Каждый раз вовремя входа в систему Bourne Shell автоматически запускает файл .profile(скрипт) находящийся в вашей домашней директории. Этот скрипт устанавливает“окружение” в котором Вам предстоит работать. Это различные переменныеокружения отвечающие за вид системной подсказки, путь поиска исполняемыхфайлов, тип терминала и.т.п.  Приведем список основных переменных окружения.

·    PATH устанавливает путь поиска исполняемыхфайлов и представляет собой набор директорий разделенных двоеточием

·    MAIL определяет имя файла почтового ящика дляуведомления о приходе новой электронной почты

·    MAILCHECK  параметр показывающий как часто (всекундах) следует проверять почтовый ящик на предмет прихода новой почты

·    HOME определяет домашний каталог (каталог поумолчанию). Команда cd без параметров выполняет переход в этот каталог.

·    PS1 основная системная подсказка (по умолчаию $)

·    PS2 вторичная системная подсказка (по умолчанию>)

·    SHELL имя логин шелла пользователя

·    TERM тип терминала пользователя

·    EDITOR имя текстового редактора по умолчанию

Устанавливатьпеременные окружения можно по разному. Например команды

PATH=/bin:/usr/bin:/usr/sbin:/usr/contrib/bin:/usr/local/bin

и

           

            PATH=/bin:/usr/bin:/usr/sbin

            PATH=$PATH::/usr/contrib/bin:/usr/local/bin

полностьюэквивалентны. Для того чтобы эти переменные вошли в системное окружение (кромешела, стали доступны и другим программам) необходимо выполнит команду

export <имя_переменной>

 

Комментарии.

 

Текст следующийза символом # рассматривается шелом как комментарий и не оказывает никакоговлияния на работу скрипта.

Основы программирования на языке shell

Параметры.

В дополнение кстандартным параметрам шела можно создавать свои параметры, кторые затем можноиспользовать в командах. Например

                 

$ x=test

$ echo $x

test

$ aaa=/

$ ls $aaa

cdrom                    home      nsmail                    tcb          var

SD_CDROM        dev         lib                            opt          tmp

TT_DB  etc           lost+found            sbin         tmp_mnt

Bin                          export    net                          stand      usr

При включениипараметров в строку или в выражение знак $ должен предшествовать параметру.Также необходимо пользоваться следующими правилами:

${parameter}                       значениепараметра заключенного в скобки будет использовано в выражении. Скобки {}используются когда за параметром следуют буквы или цифры не относящиеся кпарамаметру. Например если значение параметра xxx равно test то значениевыражения ${xxx}123 будет равняться test123

${parameter:-word}           если параметрустановлен и не пустой то результатом выражения будет являться значениепараметра, в противном случае в результате будет использовано  значениепараметра word. Например: ${xxx:-/usr/bin/sh}

                                                еслиxxx пустой то результатом выражения будет являться строка /usr/bin/sh

${parameter:=word}          если параметрнеустановлен или пустой, тогда значение word будет результатомвыражения.

${parameter:+word}          если параметр установлени не пустой, тогда результатом выражения является word, в противномслучае результат пустой.

Аргументыкомандной строки.

Когда Вызапускаете на выполнение программы, Вы можете передавать ей один или большеаргументов. Шелл скрипты имеют доступ к этим аргументам посредством параметров $0,$1, $2 …$9.  Если аргументов больше девяти, их значения помещаются в буффери могут быть  доступны с использованием команды shift которая будетобсуждаться ниже. Параметр $0 всегда принимает значение имени выполняемого файла,$1 – первого аргумента командной строки, $2 – второго, и.т.п.

Количествоагрументов командной строки всегда можно узнать проанализировав параметр $#.В том случае если Вам необходим один параметр содержащий все аргументыкомандной строки разделенные пробелом нужно воспоьзоваться параметром $*.

Для получениядоступа к аргументам с номером больше девяти необходимо воспользоватьсякомандой shift. После очередного выполнения команды shift происходитсдвиг на один элемент в буффере параметров в результате которого значениепараметра $2 получает параметр $1, значение параметра $3 получает $2, и.т.п.Используя цикл (цыклы будут рассвотрены ниже) в сочетании с командой shift можнополучать доступ ко всем аргументам командной строки с номерами превышающими 9.

 

Квотинг.

 

Очень частослучаются ситуации когда необходима особая трактовка тех символов которые шеллвоспринимает как спец символы. Например случай когда строку текста включаяпробелы нужно передать как один аргумент или знак $ должен не бытьвоспринят как указатель на параметр. Для этих целей используется квотинг(quoting).

Например символбекслэша ( \ ) можно использовать для квотинга символа $.

$ param=aaa

$ echo $param

aaa

$ echo \$param

$param

Всочетании с бекслэшем для квотинга можно использовать двойные кавычки.Например:

            echo "$param is a\«new directory\»"

aaa is a «newdirectory»

При этом знак $внутри двойных кавычек интерпретируется как указатель на параметр а бэкслэшиспользуется для “экранирования” внутренних кавычек.

Одинарные кавычкитакже можно использовать для квотинга но в отличии от двойных они “экранируют”все что находится внутри них. Разница сразу становится понятной после замены впредыдущем примере двойных кавычек однираными:

$ echo '$param is a\«new directory\»'

$param is a \«newdirectory\»

 

Подстановкакоманд.

 

Символобратного ударения ( ` ) используемый вскриптах указывает на подстановку команд. Это подразумевает что результатвывода команды подставляется в шелл как параметр. Нпример:

$ echo «The currentdate is `date`»

The current date is SatJan  6 04:16:35 GMT 2001

или

$ users=`who`

$ echo «Userscurrentrly logged in the system:\n $users»

Users currentrly logged inthe system:

 root       console     Jan  6 03:57

 roman   pts/0          Jan 5 23:12

 

Условия.

 

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

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

if test –f $1

then

sort $1

       else

echo “file $1doesn’t exist”

fi

Условныйоператор имеет следующий синтаксис:

if <список_комманд1>

then <список_комманд2>

elif  <список_комманд3>

then <список_комманд4>

…..

else <список_коммандN>

fi

Оператор ifпроверяет статус выполненной команды (вданном примере  test –f)

И в случаеуспеха (программа возвращает 0) выполняет команды стоящие после then, в противном случае выполняются команды else/elif.

Наиболее частоиспользуемой командой в оператореусловия является команда test. Онаимеет множество опций, полный список которых можно получить обратившись к еедокументации выполнив команду mantest.Очень часто вместо команды test используют команду [  которая является еефунуциональным аналогом. Здесь приводится лишь краткий список основных опцийкоманды test.


-r file          возвращает успех если файл существует и доступендля чтения.

                -wfile        возвращает успех если файл существует и доступен для записи.

                -xfile      возвращает успех если файл существует и выполняемый.

                -ffile         возвращает успех если это регулярный файл.

                -dfile         возвращает успех если это директория.

                -cfile         возвращает успех если это специальный файл.

                -sfile         возвращает успех если файл имеет ненулевой размер.

-h file         возвращает успех если это симлинк.

                -z s1           возвращает успех если длинна строки s1 нулевая.

 

-n s1          возвращает успех если длинна строки s1 ненулевая.

                s1= s2    проверка двух строк на равенство.

s1 != s2   проверка двух строк на неравенство

               

                s1              возвращает успех если строка s1 непустая

n1 -eq n2      Алгебраическая проверка двух чисел n1 и n2 на

равенство. Помимо –eq есть еще ряд опций дляалгебраического

сравнения такие как -ne, -gt, -ge, …

 

Всевышеперечисленные условия  могут обьеденяться с использованием логическихоператоров:

          !       отрицание

          -a             Бинарный И

          -o             Юинарный ИЛИ (-а имеет приоритет больший чем –о)

           ( expr )     Группировка выражений скобками

 

 

Ввод данных.

 

Для ввода иданных в скрипт можно воспользоватьсякомандой

                read [parameter …]

которая вкачестве аргументов принимает список из одного или более параметров.

 

Примечание:  знак $ перед именем параметра в команде read ставить ненужно.

 

 

 

 

Циклы.

 

Очень часто присоставлении скриптов простого последовательного выполнения бывает недостаточно.Необходимы механизмы которые позволяли бы выполнять команды с изменяющимисяпараметрами. Для этих целей шелл предоставляет в распоряжение три цикличекиеконструкции: циклы for,while иuntill.

Цыклfor

 

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

for parameter [ in wordlist ]

do command-list

done

где parameter это любое имя параметра,wordlist – один или несколько значений последовательно присваиваемых параметру,command-list – набор команд выполняемых при каждом проходе цикла. wordlistможет быть либо просто набором аргументов разделенных пробелом, либо командойшелла которая генерирует сама аргументы. Например следующий скрипт:

for i in 1 2 3 4 5

            do

                        if mkdir $i

                        then

                                    echo“directory $i was created”  

                        fi

            done

создаетпоследовательно директории с именами 1 2 3 4 5 и в случае успешного созданиядиректории выдает сообщение. Следующий скрипт:

            for i in `ls a*`

            do

                        cp $i /tmp

                        echo “$i wascopied”

            done

копирует всефайлы начинающиеся с буквы a из текущего каталога в каталог /tmp.

Цикл while

while command-list1

do command-list2

done

этот циклзапускает команды из списка command-list1,и если последняя команда из списка выполниласьуспешно (код возврата равен 0) то начинают выполняться команды из списка command-list2, в противном случае цикл заканчивается.Цикл из следующего примера:

               

                while[ -r $1 ]

                do

                                echo“processing $1”

                                cat$1 >> summary

                                shift

                done

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

Цикл util

 

until command-list1

do command-list2

done

конструкцияэтого цикла полностью аналогична циклу while заисключением того что тело цикла (набор команд command-list2)выполняется как минимум один раз не зависимо отуспешности выполнения условия цикла (набор команд command-list1).

Оператор case

Оператор case является расширением стандартного условного оператора if.Если  есть условие при котором может реализовываться множество вариантовто вместо серии операторов if лучше использовать один case.

case parameter in

pattern1 [ | pattern2 …] ) command-list1;;

pattern2 [ | pattern3 …] ) command-list2;;

esac

шаблоны pattern определяют варианты параметра parameter.При совпадении параметра с одним из шаблонов будет выполнен соответствующийсписок команд command-list. В квадратных скобках ([ | pattern2…]) указаны дополнительные варианты разделенные символом ( | ) которыеможет принимать parameter помимо основного. Заканчивается список шаблонов скобкой. Болеепонятней структура этого оператора станет после рассмотрения примера:

case $i in

                        -d | -c )mkdir dir1

                                    echo“directory dir1 was created” ;;

                        -r )        rmdirdir1

                                    echo“directory dir1 was removed” ;;

                        * )         echo“invalid option” ;;

            esac

В этом примерескрипт получив при запуске один из аргументов –d или –c попытается создатьдиректорию с именем dir1, получив аргумент –r попытается ее стереть. Во всехостальных случаях (шаблон *) он выдаст предупреждение о неправильном аргументе.

Примечание: обратите внимание на то что порядок следования гшаблонов в оператореcase имеет большое значение. Так если строку 

* )         echo “invalidoption” ;;

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

Команда .(точка)

 

Каждый раз когдаВы запускаете шелл программы, создается еще одна копия шелла в которой онивыполняются. Поэтому если Вы написали шелл скрипт, то все переменные “живут”только во время выполнения скрипта. Если вы хотите чтобы все переменные из шеллпрограммы были в вашем текущем окружении запускать скрипт нужно в текущем шеле,это достигается использованием команды. (точка).

           . scriptname

 

Командаeval

eval [arg ...]

Аргументы читаються и соединяются в одну команду. Затем эта команда выполняется шеллом истатус выхода команды возвращается как результат команды eval. Если аргументы вкоманде отсутствуют или пустые то команда возвращает нулевой статус.

В качествепримера рассмотрим два скрипта:

            d=’date &’; $d

и

                d=’eval date &’; $d

первый из них невыполнится так как команда date воспримет символ & какаргумент а не как признак запуска в фоновом режиме, в результате чего первыйскрипт не выполнится в отличии от второго.

 Использование метасимволов.

 

Во всехконструкциях циклов и операторе case возможно использование метасимволов.Например скрипт из примера оператора цикла for

for i in `ls a*`

            do

                        cp $i /tmp

                        echo “$i wascopied”

            done

можно переписатьв более простом виде

for i in a*

            do

                        cp $i /tmp

                        echo “$i wascopied”

            done

результат будетодин и тот же.

2.3.1Некоторые специальные команды

 

Разделители&& и ||

 

Это условныеразделители. При разделении двух команд с помощью && вторая командавыполнится лишь в том случае когда первая завершится успешно. При разделениикоманд с помощью || вторая выполнится лишь тогда когда первая закончиласьнеуспешно (код возврата не равен нулю).

Например привыполнении скрипта:

test–d /usr/tools && cd /usr/tools test–d /usr/tools || echo “directory doesn’t exist”

               

вход вдиректорию /usr/tools будет произведен только при ее наличии, в противномслучае будет выдано сообщение о ее отсутствии.

Определениефункций

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

name () { list; }

где name – это имя функции, а list – список команд из которыхсостоит тело функции. Ниже приведен пример функции возвращающей 0 если аргументпереданный ей является директорией и 1 в противном случае.

dir_test () {

                        if [ -d $1 ]

                        then

                                    echo“$1 is a directory”

                                    return0

                        else

                                    echo“$1 is not directory”

                                    return1

                        fi;

}

           

вызов функцииосуществляется следующим образом

                name [ parameter … ]

например в нашемслучае это можно сделать так

            dir_test  /usr/bin/sh

Перенаправлениеввода-вывода

Как было сказановыше для перенаправления ввода-вывода используються символы (> перенаправление вывода,  >> перенаправлениевывода с добавлением в файли< перенаправление ввода). Кроме этогосуществует еще ряд конструкций, одна из которых:

                << [-] word 

при этом вселинии от первой и до содержащей строчку word будутиспользоваться как входные данные. Например:

                $ cat<<mark

> These words will beprinted

> the cat command untilthe «mark»

> word is found

> mark

These words will be printed

the cat command until the«mark»

word is found

$

Если передстрочкой word стоит минус то все символы табуляции в начале строк будутвырезаны.

Другой частоиспользуемой конструкцией при перенаправлении ввода-вывода является:

                <& цифра

            >& цифра

При этомзадействуется файловый дискриптор ассоциированый с указаной цифрой. Вбольшинстве программ со стандартным вводом связан дискриптор 0, со стандартнымвыводом дискриптор 1, и со стандартным потоком ошибок дискриптор 2. Всепрограммы которые работают друг с другом через пайпы по умолчанию пользуютьсядискрипторами 0 и 1. Наиболее часто используемые перенаправления это 1>&2 и2>&1. Рассмотрим следующий пример из которогостанет понятен смысл этих конструкций:

            $ ls /no/such/file >out

/no/such/file not found

$ cat out

$

$ ls /no/such/file >out2>&1

$ cat out

/no/such/file not found

$

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

Команда exec

                exec [arg …]

 

Этакоманда выполняет замещение текущего шела новым шелом или программой. Разницамежду простым запуском шела и запуском через exec становитсяочевидной на следующем примере:

$ ksh

$ ps

PID TTY       TIME COMMAND

                2125 pts/0     0:00 ksh

                2094 pts/0     0:00 sh

                2126 pts/0     0:00 ps

                $

$ exec ksh

$ ps

                PID TTY       TIME COMMAND

                2127 pts/0     0:00 ps

                2094 pts/0     0:00 ksh

$

 

Команда expr

                expr expression { +,-, \*, /, *, =, \>, \>=, \<, \<=, != } expression

Это оченьполезная команда для выполнения арифметических операций в шелл скриптах.Например:

                x=10

            expr $x + 5

                y=`expr $x – 10`

            if expr $x \<= $y

            then

                        echo “$x isless or equal than $y”

            fi

 

Команда set

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

Наример команда:

            set  bob brr kab ram

установитпараметры $1, $2, $3, $4 следующим образом $1=”bob”, $2=”brr”, $3=”kab”,$4=”ram”. Команда set имеет множество опций, полный список которых можнополучить обратившись к man-странице (man set).

 

Команда trap

 

Команда trapожидает приход сигналов посланных шелу (от внешних процессов или сигнал от шелавследствии неуспешного запуска программы) и выполняет их обработку.

            trap [command_list][s1 …]

Когда trap получает сигнал s1 (сигналы  s2 …) она выполняет список заранеепредопределенных в command_list  команд. Если s1 равен 0, то команды запускаются когда шеллзаканчивает свою работу. Команда trap запущенная без аргументоввыдает на печать список команд ассоциированных с каждым из номеров сигналов.Ниже приведен краткий список наиболее часто используеиых сигналов.

Номер сигнала

Описание

Возможность перехвата

1 сигнал перезапуска Есть 2 Прерывание процесса Есть (если процесс не в фоне) 3 Сигнал выхода Есть (если процесс не в фоне) 6 Сигнал завершения Есть 9 “Убиение” процесса Не може быть перехвачен в принцыпе 14 Сигнал таймера Нет 15 Програмный сигнал завершения процесса Есть

Попыткаперехватить 11-й сигнал (memory fault) приводит к ошибке. Сигнал с номером 9 неможет быть перехвачен т.к. он не перехватывается в принципе.

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

trap “echo ‘removingtemporaty file’ rm /tmp/temp” 0 1 2 3 15

Команда pwd

Эта командапоказывает текущую рабочую директорию.

Команда type

type [ prog_name …]

 

Эта команда ищеткаталог в котором находится запускаемая программа указанная в аргументекоманды.

Команда times

Эта команда выдает информацию о временивыполнения процесса запущеного из шелла.

Параметрыустанавливаемые шелломПараметр

Описание

$# Количество аргументов командной строки $? Значение кода возврата предыдущей команды $$ Номер процесса шела в системе $! Номер процесса в системе последней команды запущеной в фоне

Основныеопции для запуска Bourn Shell

Опция

Описание

-с string Выполнять команды из файла string -s Выполнять команды полученные со сотандартного ввода (в случе запуска шела без опций он ведет себя также) -r Запустить шелл в ограниченном режиме (restricted mode)

При запуске шелав restricted mode запрещается:

·    Изменение директории командой cd

·    Устанавливать переменную окружения PATH

·    Запускать программы содержащие в имени символ /

·    Перенаправлятьввод-вывод


C Shell .

2.3.1 Общиесведения.

2.3.2 Историякоманд

2.3.3 Алиасы,подстановка команд, метасимволы

2.3.4Переменные csh

2.3.5Задания

2.3.6 Скрипты

2.3.7Управляющие структуры скриптов.


2.3.1 Общиесведения.

csh этокомандный интерпретатор HP-UX  и язык программирования высокого уровняиспользуемый для трансляции команд вводимых пользователем в системные действиятакие как запуск программ, перемещение по директориям файловой системы,управление информационными потоками между программами. csh в отличииот Bourne Shell имеет ряд дополнительных полезных возможностей

·    Буфер истории команд

·    Механизм алиасов

·    Расширеный, С-подобный командный язык

Выход из шелламожет осуществляться несколькими способами: по команде exit (либо logout если это логин шелл) и также в зависимости от переменной окружения ignoreoff если она не установлена, то по комбинации клавиш Ctrl-D.

Запуск шелла

 

В зависимости оттого является ли csh Вашим логин-шеллом возможны различные сценарии его запуска. Призапуске csh проверяет файлы:

                /etc/csh.login                     Если csh это логин-шелл и этот файлсуществует, то он

выполняется

                .cshrc                                   Если этот файл существует в вашемдомашем каталоге,

то он выполняется в любом случае.

                .login                                     Если csh этологин-шелл и этот файл существует в

домашнем каталоге то он выполняется

                .logout                                    Еслиэтот файл существует в домашнем каталоге, то он

выполняется всякий раз при выходе из шелла если это

логин-шелл

Установкапеременных

Существуют дватипа переменных которые могут быть устаовлены в .cshrc и .login, это локальные переменные, которые не передаются дальше порождаемымиз шелла процессам и носят название локальных переменных и глобальные переменные,которые становяться доступными всем процессам порожденным из шелла и носятназвание переменных окружения. Локальные переменные устанавливаются командой set, глобальные – командой setenv.

2.3.2 Историякоманд

 

csh поддерживаеттак называемый буфер команд в котором храняться последние введенные командыназываемые событиями. Размер буфер определяет переменная history.  Переменная savehistory определяет сколько команд буфера подлежитсохранению перед выходом из шела. Наиболее оптимальным размером буферасчитается буфер на 10 … 20 команд. Просмотр буфера возможен по команде history.  Подстановка команд из буфера осуществляется с использованиемсимвола восклицательного знака (! ). Переменная prompt отвечает за видсистемоной подсказки.

Например, выполнивкоманду:

% set prompt='[\!] % '

[2] %

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

·    По номеру события: !n где n – это номер события в буфере

·    Относительному номеру событияотносительно текущего события: !-n

·    Тексту события: !wordгде word– первые несколько символов события.Например набрав один раз команду history, в следующийраз можно использовать вместо этого команду !h.

Как специальный случай следует отметить команду!!! которая запускает повторно самое последнее событие.

csh  также допускает использование аргументов команднаходящихся в буфере при посторении новых команд. Каждый аргумент в событиихранящемся в буфере нумеруется начиная с нуля (нулевой аргумент – имя самойкоманды). Последний аргумент еще представляется знаком ( $ ), первыйаргумент знаком ( ^ ). Для ссылки на на аргумент события нужно после номерасобытия через двоеточие (: ) ввести номер аргумента или его обозначение. Например:

            cruiser 4: ls -l .cshrc

-rw-r--r--   1 roman     users          814 Jan  2 23:08 .cshrc

cruiser 5: history

            1  ls -l .profile

            2  history

            3  cat .profile

            4  ls -l .cshrc

            5  history

cruiser 6: cat !4:$

cat .cshrc

#

# Default user .cshrc file(/usr/bin/csh initialization).

set path=( $path )

# Set up C shellenvironment:

            if ( $?prompt )then                     # shell is interactive.

                        sethistory=20                           # previous commands to remember.

                        setsavehist=20                                     # number to save acrosssessions.

                        setsystem=`hostname`             # name of this system.

                        set prompt ="$system \!: "        # command prompt.

endif

2.3.3 Алиасы,подстановка команд, метасимволы

 

csh предоставляетдополнительные удобства в виде командных алиасов. Например, вместо того чтобыкаждый раз при необходимости вывести полный листинг директории или при выходеиз шелла набирать набирать полные команды, можно создать их сокращенныепсевдонимы (dir и x):

alias dir ls –als

alias exit x

для снятияалиаса нужно воспользоваться командой unalias :

            unalias dir

чтобыпросмотреть список всех алиасов имеющихся в данный момент нужно ввести команду alias без параметров.

Подстановкакоманд

Подстановкакоманд в csh выполняется полностью аналогично подстановке в Bourne Shellрассмотреной перед этим:

cruiser 7: set dir=`pwd`

cruiser 8: echo $dir

/home/roman

cruiser 9:

Метасимволы

 

Все етасимволывключая синтаксические (;|  () & || && ) а так же файловые (? * [] ~ ) и метасимволы квотинга ( \ ‘ “ ) в csh имеют тот же смысл что и рассмотренные перед этим в Bourne Shell.

2.3.4Переменные csh

Имя переменной

Описание

$argv

Список аргументов командной строки

$autologout

Авто логаут если шеллом не пользовались спустя количеству секунд указанному в этой переменной. Неустановленное или нулевое значение отключает авто логаут.

$cwd

Указатель текущей рабочей директории

$home

Домашняя директория

$ignoreeof

Если переменная установлена, то гнорировать символ конец файла (Ctrl-D) как символ завершения работы

$noclobber

Если переменная установлена, то запретить перенаправление вывода в существующий файл (операция > ). Перенаправление возможно лишь с использованием операции >!

$notify

Если переменная установлена то посылать немендленные уведомления после окончания фоновых процессов

$path

Путь для поиска выполняемых файлов. При изменении этой переменной нужно уведомить шелл выполнив команду rehash

$prompt

Вид системной подсказки

$status

Код возврата самой последней команды

Цифровыепеременные csh

Команда at ( @ ) назначает цифровой переменной  арифметическое значение, точно так жекак и команда set назначает значение стороковой переменной. Значением цифровыхпеременных являются десятичные целые.

% @ sum=( 1 + 2 )

% echo $sum

3

Основныеарифметические операции в csh

Операция

Описание

(  ) Скобки изменяют порядок выполнения операций + Сложение - Вычитание * Умножение / Деление % Остаток от деления

Основныелогические операции в csh

Операция

Описание

== Проверка на равенство != Пооверка на неравенство ! Логическое отрицание

Кроме этих операций есть еще рядлогических операций  которые должны быть взяты в скобки и их операнды должныьыть разделены пробелами  в виде (operand1 >=operand2 )

Операция

Описание

>  Больше <  Меньше >= Больше или равно <= Меньше или равно >>  Правый битовый сдвиг <<  Левый битовый сдвиг & Битовое И | Битовое ИЛИ && Логическое И || Логическое ИЛИ

Например:

           

% @ r= ( 2 << 4 )

% echo $r

32

Основныеоперации присвоения в csh

Операция

Описание

= Простое рисвоение а = b += a = a + b -= a = a — b *= a = a * b /= a = a / b %= a = a % b

Постфиксные операции

К последним относятся операции ++ и  --

            %@ a=10

            %@ a++

% echo $a

11

Основные файловые операции

Виражения в csh могутвозвращать значение в зависимости от наличия или отсутствия файла, прав доступак нему, и.т.п. Для этого используется следующий синтаксис:

            -file_test filename

где file_test иfilename  могут приниматьследующие значения

file_test

описание

d Является ли файл директорией ? e Существует ли файл ? f Это обычный файл ? o Являюсь ли я его собственником ? r Имеются ли права на чтение из файла ? w Имеются ли права на запись в файл x Можно ли исполнять этот файл ? Z Пустой ли файл

 

2.3.5Задания

Каждый раз когда одна или большекоманд (например связанные через пайп, или последовательно) выполняються шеллсоздает один блок команд назывемый заданием. Фактически каждая строка введеннаяв строке шелла является заданием. Задание может исполняться также в фоновомрежиме если при запуске в конце стоял символ &. В этом случае послезапуска шелл выдаст номер задания в своей таблице заданий и номер процесса.Просмотреть таблицу активных в данный момент заданий можно воспользовавшиськомандой jobs. Послезавершения фонового процесса шелл проинформирует пользователя об этом.

                % sleep 10 &

                [1] 73059

               

                % jobs

                [1]  +Running                sleep 10

               

                % ps

                PID TTY            TIME     COMMAND

71453 pts/2       0:00.03-sh (csh)

73059 pts/2       0:00.00sleep 10

73061 pts/2       0:00.00ps

…. Спустя 10 секунд ….

%

[1]    Done                   sleep 10

2.3.6Скрипты

сsh криптымогут как и Bourne Shell скрипты быть запущены двумя способами. Либо

                csh  script_file arg1arg2 ….

либо установиватрибут исполняемости на файл и запустив его

            chmod +x script_file

            ./script_file arg1 arg2….

При этом перваястрочка должна содкржать полный путь к интерпретатору с префиксом #!, в нашем случае она должна выглядеть так: #!/usr/bin/csh. Без этой строчки система в качестве интерпретатора скрипта запуститBourne Shell что приведет к ошибке.

При запуске cshпомещает аргументы скрипта в массив argv доступ к которым возможеечерез  argv[1], argv[2], … Аргумента argv[0] не существует, вместо этого имя скрипта помещается в аргумент $0.

Для проверкиустановлена ли данная переменная можно воспользоваться конструкцией

                $?variable

 

Чтобы узнатьсколько значений хранит переменная нужно использовать следующий синтаксис:

            $#variable

Для доступа ккомпонентам переменной необходимо следовать следующему правилу:

                $variable[componet_number]

Также как и вBourne Shell возможно использование переменных $n вместо argvn и $* вместо $argv. В отличии от команды read в Bourne Shell cshиспользует конструкцию $< для интерактивонго ввода.

Всевышесказанное  иллюстрируется на следующих примерах:

% echo $#var1

var1: Undefined variable.

% set var1=a

% echo $#var1

1

% set var1=(a b c)

% echo $#var1

3

% echo $var1[1]

a

% echo $var1[1-3]

a b c

% set a=($<)

xxx

% echo $a

xxx

Еще одно отличиеcsh от Bourne Shell заключается в том что с помощью фигурных скобок  { }можно проверять завершилась ли нормально команда помещенная в эти скобки.Например, следующий скрипт:

#!/usr/bin/csh

if ({ cat /tmp/aaa }) then

                        echo OK

endif

в случаеуспешного вывода содержимого файла /tmp/aaa напечатает в конец фразуOK.

2.3.7Управляющие структуры скриптов.

 

В виду того чтовсе управляющие структуры csh очень похожи на аналогичные в Bourne Shell краткоостановимся лишь на их синтаксисе.  По своему синтаксису они очень близки саналогисными командами языка программирования С.

 

Условныйоператор

if ( expression )then

                        command1

            command2

                        …

else

                        command1

            command2

                        …

endif

Если требуетсязапуск лишь одной команды то endifможно не ставить:

            if ( expression ) command

 

Цикл foreach

Этот циклявляется полным аналогом цикла for Bourne Shell.

foreach index_variable(loop_values)

                        command1

            command2

                        ….

end

Если в качествекоманды внутри цикла встречается команда break товыполнение цикла прерывается, если команда continue топродолжается но уже со следующим из значений параметра взятым из loop_values.

Цикл while

while (expression )

                        command1

            command2

                        …

end

полный аналогцикла while в Bourne shell.

Команда switch

Очень похожа нааналогичный оператор в языке С, является аналогом команды case в Bourne shell

switch ( word )

case string1:

            command1

            command2

            ….

            breaksw

case string2:

            command1

            command2

            ….

            breaksw

…..

default:

            command1

            command2

            …

endsw

Командабезусловного перехода goto

 

label:

            command1

            command2

            …

            goto label

осуществляетпереход на команду следующую за меткой указаной в команде (в данном случае на command1).

Обработка прерываний

onintr label

Эта командапозволяет обрабатывать прерывания скриптов. При выполнении прерывания онавыполняет переход на команду стоящей непосредственно за меткой label (аналогично выполнению goto label)


Korn Shell и POSIX shell

2.4.1 Общеезнакомство с шеллами

2.4.2 Стартшеллов

2.4.3Грамматика шеллов

2.4.4Алиасинг

2.4.5Возможности подстановок

2.4.6Командная строчка и история команд

2.4.6Управление заданиями

2.4.7Программирование скриптов

2.4.8Дополнительные команды

2.4.1 Общеезнакомство с шеллами

 

Оба этих шеллабазируються на Bourne Shell, но помимо этого они унаследовали много полезныхфункций Csh. Они рактически на 95% совместимы вверх с Bourne Shell ибольшинство программ написанных на Bourne Shell будут исполняться на них безизменений. Также следует отметить тот факт что по скорости исполнения ониоперережают Bourne Shell.

Основные возможности унаследованные от Csh

·    Буфер истории команд.

·    Алиасинг

·    Массивы

·    Целочисленная математика

·    Управление заданиями

 

2.4.2 Стартшеллов

 

В том случаеесли Korn или POSIX Shell являються логин-шеллами, после входа в систему изапуска они используют файл /etc/profile и файл .profile если последний существует в домашней директории пользователя.Независимо от того запускается ли шелл после логина или в любой другой моментвремени, при старте он анализирует переменную окружения $ENV, которая обычно указывет на файл .profile или .kshrc. Если файл с именем указанным в этой переменной существует то онвыполняется.


2.4.3Грамматика шеллов

 

Как и Bourne Shellновые шеллы поддерживают пайпы, перенаправления ввода-вывода, последовательноевыполнение команд используя разделители а также запуск программ в фоновомрежиме. Единственное что стоит отметить это поддержка двунаправленных пайпов(co-process) которые будут рассмотрены позже.

Механизмыквотинга спецсимволов и расширения имен файлов посредством метасимволов в новыхшеллах полностью аналогичны рассмотренным в Bourne Shell. Единственное чтоследует упомянуть, так это метасимволы   ~, #  и %, свойства которых не были описаны раньше.

·    метасимвол # используетсядля задания комментариев. Все что следует за ним игнорируется интерпретаторомкомманд.

·    метасимвол ~ используетсяпри раскрытия путей к файлам и директориям. При этом используются следующиеправила:

тильда сама по себе или тильда до слеша / обозначаетпуть к домашнему каталогу (переменная окружения $HOME)

тильда до знака + раскрывается в текущий каталог (переменная окружения $PWD)

тильда до знака – раскрвывается в предыдущий рабочий каталог (переменная $OLDPWD)

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

·    Метасимвол % используется при управлениизаданиями и будет рассмотрен позднее.

2.4.4Алиасинг

 

Механизмалиасинга в новых шелах аналогичен Csh.

                alias                                         -выводит список всех установленных алиасов        alias word=command                 — устанавливает алиас word накоманду command

                unalias word                              — снимает алиас word

                unalias  -a                                 — снимает все алиасы

alias –x word=command             — устанавливает алиас word накоманду commandс экспортом (только дляksh)

Отличительнойособенностью ksh от POSIX Shella является возможность экспорта алиасов в другой шеллкоторый не вытесняет текущий (для запуска используется системный вызов fork() на не execкак например в случае если скрипт начинается с #!/bin/…)

 

2.4.5Возможности подстановок

 

К новымподстановкам параметров не рассмотреным при рассмотрении Bourne Shell можноотнести

${parameter#pattern}                  Если шаблонpattern равен началу параметра

${parameter##pattern}                parameter, то вырезать из параметра этот шаблон и результатприсвоить выражению. В первой форме шаблон вырезается до первого совпадения, вовторой – до последнего.

${parameter%pattern}                 Если шаблонpattern равен окончанию параметра

${parameter%%pattern}              parameter, то вырезать из параметра этот шаблон и результатприсвоить выражению. В первой форме шаблон вырезается до первого совпадения, вовторой – до последнего.

 

2.4.6Командная строчка и история команд

 

Установивпеременную окружения VISUAL на один из системных текстовых редакторов (vi,emacs, gmacs) можно получить возможность редактировать строку ввода используякоманды выбраного редактора. При этом помимо редактирования текущей команды,можно выполнять перемещение по истории команд (клавиши ESC j ,ESC k). Поумолчанию история команд хранится в файле .sh_history однакоего можно изменить установив переменную окружения $HISTFILE.Количество хранимых команд определяется переменной $HISTSIZE.Двойное нажатие на клавишу ESC помогает раскрывать имена файлов в каталогах.

 

2.4.6 Управлениезаданиями

 

Задания в kshи POSIX Shell имеют тот же смысл что и рассмотренные ранее в csh.Для управления заданиями испльзуется команда jobs.Запущенная без параметров она показвывает список заданий. Иногда возникаетнеобходимость отложить на некоторое время выполнение текущего задания. Этогоможно добиться послав сигнал SIGSTOP текущему процессу. Этого можно добитьсякомбинацией клавиш:Cntrl-Z.

Примечание: предварительно (обычно это ставиться в startup скриптах шеллов)должна быть выполнена команда  sttysusp <Cntr-Z> которая связывает эту комбинациюклавиш с посылкой сигнала SIGSTOP процессу (генерация символа suspend).

Для переводаотложеного (приостановленого задания) в фоновый режим нужно воспользоватьсякомандой bg

                bg %job_number           перевод задания с номером job_number в фоновый режим

                bg %%                         перевод текущего задания фоновый режим

                bg %+                          перевод текущего задания фоновый режим

                bg                                перевод текущего задания фоновый режим

                bg %-                           перевод предыдущего задания фоновый режим

Для возвратазадания в интерактывный режим нужно использовать команду fg. Синтаксис ее полностью аналогичный команде bg.

Встроенная вшелл команда kill допускает использования тех же аргументов что и bgи fg для посылки сигналов заданиям.

 

2.4.7Программирование скриптов

 

Все основныеуправляющие структуры kshи POSIX Shell полностью повторяют аналогичные в BourneShell. Поэтому остановимся более подробно на новых возможностях предоставляемыхэтими шелами.

Команда select

select parameter in words

do

            command_lines

done

Эта командапомогает организовать интерактивный диалог. Она выводит список слов words в виде меню с возможностью выбора, а после выбора пользователемэлемента списка она запускает команды  из списка command_lines, при этом выбранное пользователем слово доступно командам изсписка как параметр parameter.

 

Двунаправленныепайпы

 

Korn Shell имеетв своем арсенале механизм позволяющий порождать процессы-потомки соединенныепайпом с родительским шеллом. Стандартный ввод и стандартный потомка может бытьдоступен из родительского шела. Для создания двунаправленого пайпа нужноиспользовать конструкцию |& после запускаемой команды.Доступ к пайпу из скрипта может бытьполучен посредством команд print–p иread –p. Рассмотрим пример использованиядвунаправленых пайпов:

            #!/usr/bin/ksh

bc |&

read a b

print -p "$a *$b"

read -p mul

echo $mul

Замечания:

 

Использованиедвунаправленых пайпов оправдано лишь с командами которые работают сустройствами стандартного ввода и вывода, но не напрямую с терминалом (какнапример редактор vi).

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

Команда typeset(только в Korn Shell)

                typeset [-option ] [name[=value]]…]

Эта командасоздает переменную, назначает ей значение и определяет ее тип. Основные опциикоманды:

                -i              переменнаяname имеет тип integer

                -r             переменнаяname является readonly

                -l              конвертироватьвсе символы с верхнего регистра в нижний

                -u            конвертироватьвсе символы с нижнего регистра в верхний

                -x            автоматическийекспорт переменной

                -R            выравниваниетекста по правому краю

                -L            выравниваниетекста по левому краю

Команда let

Эта командапрактически аналогична команде expr в Bourne Shell и используется длявычисления в простых математических выражениях. Пример использования:

               

                $x=10

$ let x=2*x+5-3/x

$ echo $x

25

Команда ulimit(только в Korn Shell)

 

ulimit [-f n ]

Эта командазадает ограничение n  блоковна файлы записанные на диск  порожденными процессами. Запущеная без аргументовпоказывет текущий лимит.

 

Массивы

 

Для доступа келементам массива используют следующий синтаксис:

array_name [subscript]=value

например:

            $ a[0]=10

$ a[1]=xxx

$ a[2]=tt

$ echo ${a[1]}

xxx

$ echo ${a[*]}

10 xxx tt


Key Shell (keysh).

            Этоменю-ориентированный интерактивный шелл разработанный компанией Hewlett-Packard для создания дружественного интерфейса к Korn Shell. Шелл содержит последовательности горячих клавиш для быстрого просмотрасписка файлов, задач принтера и просмотра файлов, которые он автоматическитранслирует в команды HP-UX.

Key Shell содержит все необходимые свойства и возможности Korn Shell (см. Korn Shell).Дополнительные возможности – шелл содержит интерактивную справку, горячиеклавиши (видимые), невидимые последовательности горячих клавиш, строкусостояния, возможность конфигурирования.

Запуск и работа в Key Shell.

Шелл использует стандартные переменныесреды, не требует дополнительной настройки поэтому, если ваша системасконфигурирована под какой-либо другой шелл вам достаточно набрать keysh для его запуска. При запуске шелла сверху вы видитеприглашение $ (командная строка). Далее идет строка меню горячих клавиш, наклавиатуре для них соответственно, используются функциональные клавиши F1 – F8.Следует иметь ввиду – что показываетсянесколько горячих клавиш, а меню разбито на несколько строк по вертикали ипереключение между ними осуществляется клавишей F8. Настройкишелла хранятся в /etc/keyshrc или .keyshrcобщие и для каждого пользователясоответственно. Нажатие соотвествующей клавиши соответственно приводит к томучто в промпте появляется командная строка, например, F3 выдаеткоманду Change_dir которая соответствует стандартной cd.Убрать соответствующую команду можно ключом Delete_line. Выходиз всех интерактивных редакторов осуществляется клавишей q. Использованиевидимых последовательностей горячих клавиш достаточно просто и значительнооблегчается благодаря наличию интерактивной справки.

Неявные (невидимые) ключи

Кроме всего прочего, keysh позволяетобращаться к стандартным командам HP-UX с использованием своегоформата и горячих ключей. Допустим нам необходимо посмотреть календарь наопределенный месяц. Команда calвыдает текущий месяц. Cal for_month позволяет выдает приглашение нажать горячую клавишудля выбора желательного месяца и, таким образом, позволяет избежать изученияформата команды cal. Многострочное мменю подчиняется тем же законам, что идля видимых последовательностей. Кроме этого, вы так же можете пользоватьсястандартными командами HP-UX, если вас не устраивает то что выдается в горячихклавишах или вам нужен другой формат, вы просто ингнорируете то, что выводитподсказка и жмете возврат каретки в конце своей командной строки.

Настройкаkeysh

Любые ключи так же можно добавить, фактически это естьсоответствие алиасам, например, для шелла bash. Пример:Keysh_config softkey add hostname with_label hname from_user mav

Пример в объяснении не нуждается,поскольку он был создан с использованием интерактивной подсказки шелла и можетбыть легко восстановлен пошагово. Для невидимых горячих клавиш можно создатьтакую же командную строку с ключвым словом invisible,например, Keysh config  softkey  add  invisibles.

Перед тем как добавлять свой ключ следует все-таки посмотретьстандартніе последовательности, следует заметить, ято в keysh описаныпрактически все стандартные последовательности и команды HP-UXпоэтому, если вы не настроили какое-нибудь специфическое ПО от третьегопроизводителя, то редактированием последовательностей и не стоит заниматься.Ошиюочно созданный ключ можно удалить последовательностью Keysh config softkey  delete.

Иерархия горячих клавиш, файлыопределений.

Когда создаются новые ключи в keysh, фактическиэто есть добавление узла в иерархию узлов (с которыми связаны функциональныеклавиши). В системе файл настроек и иерархии находится здесь/usr/keysh/C/softkeys.

Каждыйузел ключа имеет следующие свойства:

name  (обязательное)это командная строка для доступа к невидимому ключу, для видимого ключа это егометка

type (обязательное для подменю) свойство поределяет то, является липодменю командной строкой или параметром

attributes (необязательное) определяет поведение горячей клавиши и токак она интерпретируется.

editrules (необязательное) это часть поля атрибутов, котораяопределяет то, как горячая клавиша интерпретируется в команду HP-UX

Общийформат горячей клавиши, таким образом, будет таким

    softkey name

       attributes

       editrules ;

Пример(определение последовательности Copy_files)

softkeyCopy_files command

    editrule { append(«cp»); }

Подменюбудет соответствовать более низкому уровню иерархии и определяется таимобразом:

{

       type name

       attributes

       editrules

       ;

       .

}

Еслиузел (клавиша) ассоциирован с подменю, то в фигурных скобках идет определениедочерних узлов. Дочерние узлы при этом могут быть двух типов – литерал илиметка, второй – строка – которая содержит команду или опции команды.

Пример – горячие клавиши для вызовапоследовательности Copy_files]

          {

            string <files> disable -1 enable all

            editrule { append(argument); }

            required «Enter the name of thefile(s) to copy.»

            ;

            option to disabled

            required «Enter the name of thefile(s) to copy;

                      then select\»to\"."

            {

              string <dest>

              editrule { append(argument); }

              required

                «Then, enter the name of the fileor directory to

                 copy the file(s) to.»

              ;

            }

          }


3.  Администрирование системы X Window

 

4.1  Базовые концепции X Window

4.2  Компоненты системы X Window

4.3  Предварительное конфигурирование

4.4  Старт X Window

4.5  X ресурсы

4.6  Управление шрифтами

Базовые концепции X Window

В HP-UX 10.20 X server это программа которая стартует автоматическипосле старта системы непосредственно перед тем как будет запущено окно логина.Она захватывает управление графическим дисплеем, клавиатурой и мышью и вседальнейшее взаимодействия между программами и этими устройствами происходит сучастием Х сервера.

Х клиент – это программа которая написана для взаимодействия с Хсервером. Учитывая сетевые возможности сисметы Х Window клиент и сервер могутбыть физически разнесены и общаться через сеть.

Несмотря на то что Х сервер использует мультизадачные свойства ОС взаданный интервал времени только одно графическое окно может обрабатыватьпользовательский ввод, это окно называется активным.

Компоненты системы X Window

Среди компонент системы можно в первую очередь выделить:

·    Компьютерное оборудование

·    Операционную систему

·    Х сервер обеспечивающий взвимодействие меджуклиентами и дисплеем

·    Клиентские программы которые включают

·    Оконный менеджер для управления поведением окон

·    И непосредственно прикладные программы

В системе X Window очень часто употребительным термином являетсятермин “дисплей”. Чтобы не путать его с монитором (телевизор к которомуподкючается компьютер) раскроем его смысл. Дисплей это принципиально устройствовывода информации. Дисплей – это логическое понятие и один дисплей может включатьв себя несколько физических мониторов.

Экран это графическое битмап устройство которое после старта Хсервера становиться корневым окном. Оно содержит все остальные окна и прочиевизуальные элементы. Одним из вспомагательных но необязательных элементовсистемы X Window является Font Server, позволяющий передавать по сети шрифты наХ сервера.

Предварительное конфигурирование

Для работы в системе X Window прежде всего необходимо наличиепеременной окружения DISPLAY, файла /etc/X0.host (в системах X11R4/R5) а также работумеханизма резолвинга хостов (файл /etc/hosts и/или DNS и/или NIS). Переменнаяокружения DISPLAY устанавливается в соответствии с правилом:

export DISPLAY=Host:Display.Screen

Файлы /etc/Xn.hosts представляют собой текстовые файлы содержащие имена хостов которымразрешено подключаться к Х серверу с номером n (запускаемымкак /usr/bin/X11/X:n). При попытке подсоединения к Х серверу n необходимо в качестве номера screen в переменной окружения DISPLAY использовать n.   Конфигурация X серверов храниться в файлах Xnscreens которые соответствуют файлам /etc/Xn.hosts. При не настроенном механизме резолвинга хостов или в случаесетевых проблем возможно возникновение проблем или задержек в работе X Window.Для контроля доступа к Х серверу используется программа xhost.

xhost +                                 разрешает установку соединения слюбым клиентом

xhost -                                  запрещает установку соединения совсеми клиентом

xhost +hostname              разрешает установку соединения  от хоста host

xhost -hostname               запрещает установку соединения  от хоста host

Система X Windowиспользует следующие конфигурационные файлы:

                .Xdefaults             файлсодержит ресурсы общие для всех программ

                .x11start                файлсодержит список клиентов вызывающихся при старте X11

                .mwmrc                 файлопределяющий настройки оконного менеджера Motif.

                .app-defaults/*    индивидуалныенастройки клиентов

Если HOMEкаталог не содердит этих файлов их можно скопировать из системных файлов:

                cp/usr/lib/X11/sys.Xdefaults ~/.mwmrc

            cp/usr/lib/X11/sys.Xdefaults ~/.Xdefaults

Х сервер вначалеищет файлы в HOME каталоге и лишь не нашев их переходит к системным. Поумолчанию конфигурация Х сервера хранится в файле /etc/X11/X*screens. В нем определяются такие параметры как файл устройства, апаратнонезависимые параметры, глубина цвета, прозрачность окон, а также апаратнозависимые параметры. Полное описание всех параметров можно получить из файла

/usr/lib/X11/Xserver/info/screen/hp

Конфигурациооныйфайл для устройств ввода Х сервера имеет имя /etc/X11/X*devices.

4.1  Старт X Window

Для стартасистемы  X Window нужно запустить команду x11start. Онстартует программу xinit которая запускает Х сервер и клиентов а также оконныйменеджер в зависимости от конфигурационного файла .x11start.

4.2  X ресурсы

Ресурсыопределяют поведение программ (геометрия, цвета, шрифты, поведение клавиатуры,….). Существует несколько способов позволяющих их изменять:

·    Опции командной строки

·    .Xdefaults файл

·    загрузка ресурсов через менеджер ресурсов

·    application resource файлы (app-delaults файлы)

Менеджерресурсов xrdb

xrdb [option] filename

основные опции:

                -load                       ресурсызагружаемые из файла перезаписывают сущестивующие

                -merge                    ресурсызагружаемые из файла обьеденяются с сущестивующими

                -remove                 ресурсыуказаные в файле удаляются из собственности менеджера

ресурсов.

                -edit                        поместитьресурсы собственности менеджера в файл

Для заданияресурсов используют строку вида:

                [client_name] * resource: value

или

            [client_сlass] *resource:  value

Имена и классы клиентов

Каждый Х клиент имеет имя и класс. Имя определяет специфическогоклиента а класс категорию клиента. Ресурсы определенные через имя клиента имеютбольший приоритет перед теми что определены через класс клиента. Для лучшегопонимания ресурсы определенные через класс пишуться с большорй буквы. Назначитьимя клиенту можно при его старте:

xterm –name myTerminal

чтобы получить кним доступ достаточно загрузить в ресурс менеджер следующие строки:

            Xterm.name:                             myTerminal

            MyTerminal*background:                       green

Имена и классы ресурсов

Ресурсы как иклассы имеют имена и классы.  Индивидуальные пишутся с маленькой буквы. Ресурскласса всегда ссылается на класс ресурсов. Поэтому если ресурс *background: red  сделает все тоновые цвета красными, то *Background: red сделает красными те ресурсы которые принадлежат к классу Background к которым могут принадлежать cursorColor, pointerColor … Индивидуальные ресурсы всегда имеют приоритет перед ресурсамиклассов. Это демонстрирует следующий пример ресурсного файла:

            *Foreground:                 red

            Xterm*Foreground:        gray

            Xterm*foreground:         yellow

            Xterm*CursorColor:       green

В именахресурсов возможно употребление символа * на первомместе. Нарример ресурс *foreground будет обозначать цвет тона всех приложений, в отличии от xterm*foreground только xterm-a.

Типы ресурсов

Помимо того чтокаждое приложение может использовать свои собственные ресурсы, существуетогромное количество стандартизированых ресурсов. Напрример рассмотренные вышецвета которые можно задавать и в RGB представлении (соответствие между именемцвета и RGB содержится в файле /usr/X11/lib/rgb.txt).  Помимо них к стандартным ресурсам относятся геометрические(width, height, column, row), шрифты (Font, FontList, FontSet) и.т.п.

Управление шрифтами

В системе X11 шрифты бывают двух видов: bitmap (растровые) шрифты и  scalabletypeface (векторные). Растровый шришт состоит из наборафайлов в каждом из которых хранятся символы определенного размера. С растровымишрифтами напрямую может работать Х сервер и Font сервер. Векторный шрифт передтем как должен быть выведен на дисплей проходит серию математических обработокпосле которых он превращается в растровый определенного размера, начертанияи.т.п. Если Х сервер желает работать с векторными шрифтами, он должен ихполучить от Font сервера.

Настройкапутей поиска шрифтов. Команда xset.

 В качества источника шрифтов для Х сервера может выступать либодиректория, либо Font сервер который принимает соединения на определенный TCPпорт (tcp/<hostname>:portnumber). Путь поиска может быть установлен командой xset.

xset option 

где option может принимать следующие значения:

                q                                              выводитинформацию о системе X11 включая fontpath

-fp source[,source …]    удаляет источник с начала (-fp) или с конца (fp-) пути

fp- source [,source]       поиска шрифтов

+fp source[,source …]  добавляет источник к началу (+fp) или к концу (fp+) пути

fp+ source [,source]      поиска шрифтов

fp= source [,source]      назначает fontpath                    

fp default                      сбрасывает fontpath в значение по умолчанию

fp rehash                      заставляет сервер перечитать базу шрифтов (это нужно в тех

случаях когда изменялось содержимое директорий со

шрифтами)

Получениесписка шрифтов доступных в системе. Команда xlsfont

xlsfont [-option]

Где option

-display host:display               Х сервер с которого нужно получить листинг шрифтов

-l                                                      генерироватьмаленький листинг

-ll                                                     генерироватьбольшой листинг

-lll                                                    генерироватьочень большой листинг

-n                                                    количествоколонок для листинга

-w                                                    ширина каждойколонки для листинга

В выводимомлистинге могут быть как шрифты так и алиасы, последние имеют короткое название.

ИспользованиеFont сервера.

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

Запуск фонтсервера (если он не был запущен предварительно) осуществляется командой:

/usr/X11/bin/fs –daemon–port <TCP_port>

Для того чтобыфонт сервер запускался во время старта, нужно разрешить его автостарт выполнив:

                 /etc/set_parms   font_c-s

Конфигурационный файл фонт сервера находится в каталоге /etc/X11/fs/config. По сигналу SIGUSR1 он перечитывает свою конфигурацию.

Описаниешрифтов. XLFD формат.

Стандарт Х11предусматривает язык описания шрифтов XLFD (X Logical Font description).Согласно ему имя шрифта состоит из 15 позиций разделенных минусами:

FontNameRegistry-Foundry-FamilyName-Weightname-Slant-SetwidthName-AddStyle-Name-PixelSize-PointSize-ResolutionX-ResolutionY-Spacing-AverageWidth-CharSetRegistry-CharSetCoding

Каким именнобудет результирующее имя в XLFD формате зависит от типа фонт-запроса к Хсерверу. Возможные типы запросов:

                ReferenceXLFD                  Этот запрос идет при выполнениии команды xlsfonts и имя

берется из файла fonts.dir. Векторные шрифты при этом имеют PixelSize и PointSize нулевыми.

                RequestXLFD                     В результате этого запроса будет получено XLFD имя

запрашиваемого шрифта или его алиас из файла font.alias. При этомполя содержащие * (обозначающие любое значение) будут заменены на ?

resolved XLFD                     Это уже точное имяшрифта которое выддается сервером в ответ на запрос. Все поля являютсязаполненными, но результат может и не совпадать с исходным запросом.

XLFDсинтаксис

 

FontNameRegistry           авторитетный источник который зарегистрировал шрифт.Обычно пустое поле J

Foundry                                имя “оцифровщика”  шрифта

FamilyName                        трейд-марка или коммерческое имя шрифта

WeightName[ext]              относительный вес шрифта (жирность). Для векторныхшрифтов может обозначать темность или светлось (параметр ext)

Slant[ext]                             напрвление шрифта (roman, italic,oblique, …) для векторных шрифтов параметр задает наклов в угловых единицах.

SetwithName                      ширина юнита (сжатый или растянутый)

AddStyleName[ext]          название для уникальной идентификации шрифта (serife,cursive, …) В векторных шрифтах определят степень поворота или зеркальностьшрифта.

PixelSize[ext]                     высота шрифта в пикселях. Для векторных шрифтовпараметр указывает дополнительную растяжку по горизонтали.

PointSize[ext]                     размер кубика в поинтах.

ResolutionX                        Разрешение (горизонтальное и вертикальное)шрифта в

ResolutionY                        пикселях на инч. Если не указано сервервыбирает сам в зависимости от разрешения дистплея.

                                               

Spacing                                расстояние между юнитами в шрифте.(М – фиксированное,

Р – пропорциональное)

AverageWidth                    Cредняя ширина шрифта

CharacterSetRegistry      имя закрепленное X консорциумом за CharacterSetEncoding

CharacterSetEncoding    определяет кодировку

Файл font.dir

 

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

Файлfont.alias

Этот файл так же как и font.dir содержится в каталогахшрифтов и служит для лиасинга

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

            xset fp rehash

а такжерестартовывать по сигналу SIGUSR1 фонт сервер.

Администрированиерастровых шрифтов.

 

Для добавлениярастрового шрифта в систему нужно выполнить следующие действия:

·    Если шрифт не в .pcf формате сконвеертироватьего с помощью программы bdftopcf

·    Скомпрессировать шрифт утилитой compress

·    Скопировать в нужную директорию

·    Запустить mkfontdir длямодификации fonts.dir файла.

·    Если директория со шрифтами используется толькоХ сервером то выполнить xsetfp rehash, если она используется еще и фонт серверомто рестартовывать по сигналу SIGUSR1 фонт сервер.

Для удалениярастрового шрифта из системы Х11 необходимо:

·    Удалить фонт файл.

·    Запустить mkfontdir длямодификации fonts.dir файла.

·    Если директория со шрифтами используется толькоХ сервером то выполнить xsetfp rehash, если она используется еще и фонт серверомто рестартовывать по сигналу SIGUSR1 фонт сервер.

Для создания fonts.dir файла достаточно запустить mkfontdir указавей в качестве аргумента директорию со шрифтами.

Компилирование.BDF шрифтов в .PCF шрифты.

 

Растровые шрифтыв системе Х11 могут быть представлены в нескольких формах:

·    .pcf         Переносимый бинарный форматописания шрифта

·    .pcf.Z     компрессированный .pcf

·    .bdf         текстовый формат

·    .bdf.Z     компрессированный .bdf

·    .bcf         компрессированный .bdf

·    .snf         не переносимый бинарный форматшрифта  (использовался до X11R5)

·    .snf.Z      компрессированный .snf(использовался до X11R5)

·    .scf          компрессированный .snf(использовался до X11R5)

·    

Предпочтительным форматом для Х сервера является компрессированый.pcf.

Для конвертации .bdf в .pcf с одновременной компрессией можновоспользоваться командой:

bdftopcf font_file.bdf |compress > font_file.pcf.Z


4.  Программирование на HP-UX

 

Для создания выполняемых програм, нужно скомпилироватьисходный код где содержиться главная програма.

                Расмотрим пример компиляции.

$ cc –Aa myprog.c

                Процес компиляциипокадет все сообщения (статус, предупреждения, ошибки) на стандартный потоквывода ошибок (stderr). Послеэтого компилятор создаст файл a.out который уже можно запускать. Аналогично можно скомпилароватьФортрановскую прогамму командой f77. Если програма состоит из несколько файлов, то омпиляциябудет выглядет следующем образом:

$ cc –Aa main.c myfunc.c

main.c:

myfunc.c:

 

после этого можно будет запускать a.out.

Можно сказать что процес компиляции похожий как на рисунке:

/>


На самом деле процесс компиляции намноого сложнее. Этотпроцес компиляции занимает несколько этапов.

1)    Длякаждого исходного файла запускаеться компилятор который создает обьектный файл(если исходные коды написаны на разных языках програмирования, то для каждогозапускаеться тот  соотвествующий компилятор)

2)    Послекомпиляция (этап создания) обьектных файлов запускаеться линковщик (HP-UX linker (ld))

На картинке можете увидеть более детальный процескомпиляции:

/>


Для более детального просмтотра этапов прохождениякомпиляции, можно посмотреть задав опцию v (verbose)

$ cc -Aa -v main.c  myfunc.c

cc: CCOPTS is not set.

main.c:

/opt/langtools/lbin/cpp.ansi main.c/var/tmp/ctmAAAa16327 -D__hp9000s700 -D__hp9000s800 -D__hppa -D__hpux -D__unix-D_PA_RISC1_1

cc: Entering Preprocessor.

/opt/ansic/lbin/ccom/var/tmp/ctmAAAa16327 main.o-Oq00,al,ag,cn,Lm,sz,Ic,vo,lc,mf,Po,es,rs,sp,in,vc,pi,fa,pe,Rr,Fl,pv,pa,nf,cp,lx,st,ap,Pg,ug,lu,dp,fs,bp,wp!-Aa

myfunc.c:

/opt/langtools/lbin/cpp.ansi myfunc.c/var/tmp/ctmAAAa16327 -D__hp9000s700 -D__hp9000s800 -D__hppa -D__hpux -D__unix-D_PA_RISC1_1

cc: Entering Preprocessor.

/opt/ansic/lbin/ccom/var/tmp/ctmAAAa16327 myfunc.o-Oq00,al,ag,cn,Lm,sz,Ic,vo,lc,mf,Po,es,rs,sp,in,vc,pi,fa,pe,Rr,Fl,pv,pa,nf,cp,lx,st,ap,Pg,ug,lu,dp,fs,bp,wp!-Aa

cc: LPATH is/usr/lib/pa1.1:/usr/lib:/opt/langtools/lib:

/usr/ccs/bin/ld/opt/langtools/lib/crt0.o -u main main.o myfunc.o -lc

cc: Entering Link editor.

Из этого примера можно посмотреть такие этапы

cpp.ansi этоС препроцесор после этого запускаеться /lib/ccom – эта програма(компилятор) уже создает файлы.Последний этап это этап создания исполняемого кода, это  Линкер, которыесвязывает все обьекты .

Что такое Обьектный файл ?

Обьектный файл содержет машиные инструкции а данные скоторых линкеровщик создает исполняемую програму. Каждий обьектный файлсодержит НАЗВАНИЕ (symbol name) и ссылку на этоназвание.

Названия делятся на 3 категории:

1)    Локальныеобьявления (local definition) – это коды или данныекоторые могут использоваться только в том обьектном файле где они обьявленые.

2)    Глобальныеобьявления (global definition) – это обьявленияпрорцедур, функций, данных котоые могут быть доступны из других обьектных файлов

3)    Внешниессылки (extern references) – это обьявления которыеглобальный инаходяться в других обьектных файлах.

Для просмотра обявлений успользуеться програма nm.

Этап линкирования.

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

$ cc main.c

/bin/ld: Unsatisfied symbol:

                my_func (code)

Работа с библиотеками

 

Очень полезным средсвом для хранения сылски реализацийвнешних обьявлений есть библиотеки. Стандартная библиотека libcкоторая содержит «основные» функции для C,Fortran

Библиотеки называються libname.sfx

Name – название библиотеки, котораяидентефецирует библиотеку

Sfx —  если.а – архив, .sl – общедоступная библиотека.

Для того что б указать  компилятору библиотеку тоуказываеться через опцию –l. Например

--lm (подключает стандартнуматематическую библиотеку libm.a).

По умолчанию подключаються библиотеки libcl,libisamstub,libc.

По умолчанию библиотеки ищатся попутям /lib,/usr/lib,lib/libp. Можно задать пути где искать:

1)   Переменой коружения LPATH

2)    Опциялинкера -L

Также для каждой програмы входит обьектный файл /lib/crt0.o В этом файлесодержаться таочки входа в програму, простомтр аргументов и прочее.

Можна прочитать о фунциях которые есть в стандартныхбиблиотеках исполюзую man-page

Вызовы (функции) описываються следующим образом

Name(nL)

Name – название

N – 2-системные вызовы, 3-другиебиблиотеки

L – буква которая означает к которойбиблиотеке вызов относиться

Вот примеры:

Група Описание (2)

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

(3C)

Стандартные С вызовы. Находяться в libc

(3S)

Стандартные вызова input/output (stdio(3S)) Находяться в libc

(3M) Математические фунции. Для подключения используеться –lm или -lM (3G) Графические фунции (3I) Библиотека инструментариев (3X) Разные специализированые библиотеки Сравнительные оценки Архивных и Общедоступных библиотек Расширение .a .sl Обьектный код Делаеться с обьектного кода Делаеться с независимо-позиционого (PIC) обьектного кода.Делаеться компилятором с опцией +z или +Z. Создание

Составляеться обьектные файлы ar  командой

Составляеться PIC обьекты с ld командой Связывание адресса вызова Адресс определяется при линкировании програмы Адресс определяеться при выполнении програмы a.out Содержит в себе все вызовы и даные Содержит только таблицу где где содержаться адреса иназвание библитек При запуске Каждая програма содержит собственую копию библиотеки Все програмы используют одну бублиотеку, которая в памяти присутствующая только один раз

Опции компилятора cc

cс [option] files

·    -Amode

·    mode=c По умолчанию, стандартныйкомпилятор С (по Керниган,  Риттчи)

·    mode=a ANSI C  (ISO 9899:1990)

·    mode=e Расшириное ANSI C

·    -c   Отменить фазу редактирования связей исоздавать об'ектный файл даже в случае программы, состоящей только из одногомодуля.

·    -p Сгенерировать дополнительные команды дляподсчета числа обращений к каждой функции. Кроме того, если имеет место фазаредактирования связей, стандартная подпрограмма инициализации заменяется натакую, которая автоматически вызывает функцию monitor(3C) и обеспечивает записьфайла mount.out при нормальном завершении об'ектной программы. Профильвыполнения программы может быть затем получен при помощи команды prof(1).

·    -Dname=def определяет макрос дляпрепроцесорра (эквивалентно #define )

·    -E посылает на стандартный поток вывода(по умолчанию на stderr)

·    -g содержит дополнительную информациюдля  отладки

·    -Idir Изменить алгоритм поиска включаемых (посредством директивы #include)файлов, имена которых не начинаются с символа /, а именно: сначала искать вуказанном каталоге, а затем уже в каталогах стандартного списка. Так,включаемые файлы, чьи имена заданы в двойных кавычках, сначала ищутся вкаталоге, содержащем файл, затем в каталогах, указанных с помощью опции -I, азатем уже в каталогах стандартного списка. Включаемые файлы, чьи имена заданы вугловых скобках, не ищутся в каталоге, содержащем файл.

·    -lname включает библиотеку

·    -L dir dir= Дополнить каталогом список каталогов, которые содержат об ектныебиблиотечные модули [для редактирования связей посредством ld

·    -v расширынай информация о процессекомпиляции

·    -w не показывает предупреждений

·    -Wx,arglist передает аргументы (опции) arglist  дляпроцеса. x

может принимать значения:

·    d    Driver

·     p    Preprocessor

·     c    Compiler

·     a    Assembler

·      l    Linker

·    +z,+Z  Опция создает  PICкод

·    -O Включить оптимизацию обьектного кода

           

Создание архивной библиотеки. 

1)   Для открытия библиотеки необходимо создатьоььектные файлы. (в основном каждая функция представляет свой обьектный файл)

2)   Соеденить все обьекты в один архив командой ar сключем r

Описание команды ar

  ar  [-][d][r][q][t][p][m][x][v][c][l][s][позиционирующее_имя]

  а_файл [имя ...]

Команда arпредоставляет средства обслуживания группы файлов, об единенных в один архивныйфайл. Применяется главным образом для создания и изменения библиотечных файлов,используемых редактором связей. Может применяться и для других подобных целей.Магические цепочки и заголовки файлов состоят из печатаемых ASCII-символов, такчто если в состав архива входят только печатаемые файлы, то и архив в целомокажется печатаемым.

При созданииархива командой ar заголовки файлов строятся в формате, не зависящем отконкретной машины. Формат и структура мобильного архива подробно описаны в ar(4).Таблица имен архива (описанная там же) используется редактором связей [ld(1)]для сокращения числа проходов по библиотекам об ектных файлов. Команда arсоздает и поддерживает таблицу имен только при наличии в архиве хотя бы одногооб ектного файла. Таблица имен в случае ее создания помещается в начале архивав качестве файла с особым именем. Ни ссылка на этот файл, ни доступ к нему дляпользователя невозможны. При создании или изменении архива командой ar(1)таблица имен всякий раз перестраивается. Таблицу имен можно перестроитьпринудительно, воспользовавшись описанной ниже опцией s.

В отличие откомандных опций командный ключ составляет обязательную часть командной строкиar. Ключ (которому может предшествовать символ -) представляет собой один изсимволов набора drqtpmx. Аргументами же ключа могут служить один или несколькосимволов из набора vuaibcls. Позиционирующее_имя — это имя элемента архива,которое используется в качестве указателя конкретного места архива, куда должныпомещаться другие файлы. А_файл — это имя архивного файла. Под именамиподразумеваются имена файлов, входящих в архив. Символам, образующим ключ,приписан следующий смысл:

d Удалить указанные файлы из архива. r Заменить указанные файлы в архиве. Если в ключе наряду с r присутствует необязательный символ u, то замена будет произведена только для тех из указанных файлов, у которых дата последней модификации превышает соответствующую дату у одноименных файлов, хранящихся в архиве. Если ключ содержит признак позиционирования, т.е. один из необязательных символов abi, то в команде должен присутствовать аргумент позиционирующее_имя и в этом случае все новые файлы будут помещаться перед (b или i) или вслед за (a) файлом с таким именем. При отсутствии признака позиционирования новые файлы будут помещаться в конец архива. q Быстро поместить указанные файлы в конец архива. Использование символов позиционирования недопустимо. Проверка, имеются ли уже в архиве указанные файлы, командой не осуществляется. Данная возможность полезна только для того, чтобы избежать квадратичного роста временных затрат при наращивании больших архивов. Отказ от проверок может, напротив, повести к росту размеров архивного файла. t Вывести оглавление архива. Если имена не указаны, перечисляются все файлы архива; если имена указаны, выводятся только они. p Напечатать указанные файлы из архива. m Переместить указанные файлы в конец архива. Если ключ содержит признак позиционирования, то в команде должен присутствовать аргумент позиционирующее_имя, и тогда место, куда перемещаются файлы, будет определяться так же, как и для опции r. x Извлечь указанные файлы из архива и поместить в текущий каталог. Если имена не указаны, извлекаются все содержащиеся в архиве файлы. Операция не изменяет архивный файл.

Аргументам ключа приписан следующий смысл:

v Вывести подробное, файл за файлом, описание процедуры создания нового архивного файла из старого архива и указанных в команде файлов-компонентов. При совместном использовании ключа t и аргумента v выводится подробная информация о каждом файле. При совместном использовании x и v по мере извлечения файлов будут выводиться их имена. c Подавить сообщение, выдаваемое обычно при создании а_файла. l Помещать временные файлы в локальный (текущий рабочий) каталог, а не в подразумеваемый временный каталог TMPDIR. s Принудительно регенерировать таблицу имен архива, даже если вызов не предусматривает модификации содержимого архива. Эта команда полезна при восстановлении таблицы имен после применения к архиву команды Открытие Библиотек Распределеногодоступа

Первый шаг в создание общедоступнойбиблиотеки должен создать объектные файлы,

cодержащий переместимый код (PIC). Имеютсядва способа создать

PIC объектные файлы:

·    Компилировать исходные файлы с + z или + Zопция компилятора, описанная      ниже.

·    Записать программы на языке ассемблера,которые используют соответствующее адресование режимы

·    

+ z и + Z параметры вынуждают компиляторгенерировать PIC объектные файлы.

Пример

Предположите, что Вы имеете некоторыефункции C, сохраненные в length.c, которые конвертируют(преобразовывают) между Английскими и Метрическими модулямидлины. Для компилиции эти подпрограммы и создайние PIC объектных файлов скомпилятором C, Вы можете бы использовать эту команду:

     $ cc -Aa -c +z length.c

+zопция создает PIC.

Создание Общедоступной Библиотеки сld

Чтобы создавать общедоступную библиотеку отодного или большее количество PIC объектные файлы, используйте линкер ld, с -b опцией. По умолчанию, ld назоветбиблиотеку а.out. Вы можете изменять название с -o опцией.

Например, предположите, что Вы имеете триисходных файла C, содержащие подпрограммы, чтобы делать длину, объем, имассовые преобразования модуля. Они названы length.c, volume.c, и mass.c,соответственно. Делать общедоступную библиотеку от этих исходных файлов,сначала компилируют все три файла, использующие +z опцию, затем комбинируют заканчивающиеся .o файлы с ld. Показаны нижекоманды, которые Вы использовали бы, чтобы создать общедоступную библиотеку,названную libunits.sl:

 $ cc -Aa -c + z length.c volume.c mass.c

  length.c:

  volume.c:

  mass.c:c:    

 $ ld -b -o libunits.sl length.o volume.o mass.o

Как только библиотека создана, убедитесь наличия прав читения и выполнения.Но можна выставить права такой командой

 $ chmod +r+x libunits.sl

 

Например, если Вы имеете программу c названным convert.c, которыйвызываетподпрограммы с libunits.sl, Вы могли бы компилироватьИ связь это скомандой cc:

     $ cc -Aa convert.c libunits.sl

Как только выполнимая программа создана,библиотека не должна быть перемещена потому что

абсолютное имя пути библиотеки сохранено ввыполнимой программе

Модифицирование ОбщедоступнойБиблиотеки

Команда ld не может заменять или удалятьобъектные модули в общедоступной библиотеке. Поэтому, чтобы модифицироватьобщедоступную библиотеку, Вы должны повторно  связать библиотеку со всемиобъектными файлами, которые Вы хотите, чтобы  библиотека включила. Например,предположите, что Вы устанавливаете некоторые подпрограммы в length.c (отпредыдущего раздела) которые давали неправильные результаты. Чтобымодифицировать libunits.sl библиотеку, чтобы включить эти изменения(замены), Выиспользовали бы этот ряд команд: д:

     $ cc -Aa -c + z length.c

     $ ld -b -o libunits.sl length.o volume.o mass.o

Любые программы, которые используют этубиблиотеку, будут теперь использовать новые версии подпрограмм. То есть Вы недолжны повторно  связать никакие программы, которые используют этуобщедоступную библиотеку. Это — то, потому что подпрограммы в библиотекеприложены к программе во время выполнения.я.

Это — одно из преимуществ общедоступныхбиблиотек по библиотекам архива: если Вы изменяете(заменяете) библиотекуархивов, Вы должны повторно  связать любые программы, которые используютбиблиотеку архивов. С общедоступными библиотеками, Вы должны только освежитьбиблиотеку.

 

Применение make

Созданиепрограммы частенько начинается с маленького однофайлового проекта. Проходитнекоторое время и проект, как снежный ком, начинает обрастать файлами,заголовками, подключаемыми библиотеками, требуемыми опциями компиляции… и дляего сборки становится уже недостаточным сказать «cc -o file file.c».Когда же, через пару дней, однажды набранная магическая строчка, содержащая всенеобходимые для сборки проекта параметры компилятора, таинственно исчезает внедрах истории вашего командного интерпретатора, рождается естественное желаниеувековечить свои знания в виде, к примеру, шелл скрипта. Затем, возможно,захочется сделать этот скрипт управляемым параметрами, чтобы его можно былоиспользовать для разных целей… Однако, чудо юникса состоит в том, что есливам что-то понадобилось, значит кто-нибудь это уже сделал, и пришло времявспомнить о существовании команды make.

Рассмотримнесложную программу на C. Пусть программа prog состоит из пары файлов кодаmain.c и supp.c и используемого в каждом из них файла заголовков defs.h.Соответственно, для создания prog необходимо из пар (main.c defs.h) и (supp.cdefs.h) создать объектные файлы main.o и supp.o, а затем слинковать их в prog.При сборке вручную, выйдет что-то вроде:

cc-c main.c defs.h

cc-c supp.c defs.h

cc-o prog main.o supp.o

Еслимы в последствии изменим defs.h, нам понадобится полная перекомпиляция, а еслиизменим supp.c, то повторную компиляцию main.о можно и не выполнять. Казалосьбы, если для каждого файла, который мы должны получить в процессе компиляцииуказать, на основе каких файлов и с помощью какой команды он создается, топригодилась бы программа, которая во-первых, собирает из этой информацииправильную последовательность команд для получения требуемых результирующихфайлов и, во-вторых, инициирует создание требуемого файла только в случае, еслитакого файла не существует, или он старше, чем файлы от которых он зависит. Этоименно то, что делает команда make! Всю информацию о проекте make черпает изфайла Makefile, который обычно находится в том же каталоге, что и исходныефайлы проекта.

ПростейшийMakefile состоит из синтаксических конструкций всего двух типов: целей имакроопределений.

Цельв Makefile — это файл(ы), построение которого предполагается в процессекомпиляции проекта. Описание цели состоит из трех частей: имени цели, списказависимостей и списка команд интерпретатора sh, требуемых для построения цели.Имя цели — непустой список файлов, которые предполагается создать. Списокзависимостей — список файлов, из которых строится цель. Имя цели и списокзависимостей составляют заголовок цели, записываются в одну строку иразделяются двоеточием. Список команд записывается со следующей строки, причемвсе команды начинаются с обязательного символа табуляции. Возможнамногострочная запись заголовка или команд через применение символа"\" для экранирования конца строки. При вызове команды make, если ееаргументом явно не указана цель, будет обрабатываться первая найденная вMakefile цель, имя которой не начинается с символа ".". Примером дляпростого Makefile может послужить уже упоминавшаяся программа prog:

prog:main.o supp.o

                     cc-o prog main.o supp.o

main.osupp.o: defs.h

Впрведенном примере можно заметить ряд особенностей: в имени второй цели указаныдва файла и для этой же цели не указана команда компиляции, кроме того, нигдеявно не указана зависимость объектных файлов от "*.c"-файлов. Дело втом, что команда make имеет предопределенные правила для получения файлов сопределенными суффиксами. Так, для цели — объектного файла (суффикс".o") при обнаружении соответствующего файла с суффиксом".c", будет вызван компилятор «сс -с» с указанием впараметрах этого ".c"-файла и всех файлов — зависимостей. Более того,в этом случае явно не указанные ".c"-файлы make самостоятельно внесетв список зависимостей и будет реагировать их изменение так же, как и для явноуказанных зависимостей. Впрочем, ничто не мешает указать для данной целиальтернативную команду компиляции.

Вывероятно заметили, что в приведенном Makefile одни и те же объектные файлыперечисляются несколько раз. А что, если к ним добавится еще один? Дляупрощения таких ситуаций make поддерживает макроопределения.

Макроопределениеимеет вид «ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ». ЗНАЧЕНИЕ может являтьсяпроизвольной последовательностью символов, включая пробелы и обращения к значениямуже определенных переменных. В дальнейшем, в любом месте Makefile, гдевстретится обращение к переменной-макроопределению, вместо нее будетподставлено ее текущее значение. Обращение к значению переменной в любом местеMakefile выглядит как $(ПЕРЕМЕННАЯ) (скобки обязательны, если имя переменнойдлиннее одного символа). Значение еще не определенных переменных — пустаястрока. С учетом сказанного, можно преобразовать наш Makefile:

OBJS= main.o supp.o

prog:$(OBJS)

                     cc-o prog $(OBJS)

$(OBJS):defs.h

Теперьпредположим, что к проекту добавился второй заголовочный файл supp.h, которыйвключается только в supp.c. Тогда Makefile увеличится еще на одну строчку:

supp.o:supp.h

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

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

OBJS= main.o supp.o

prog:$(OBJS)

                     cc-o prog $(OBJS)

main.o:defs.h

supp.o:defs.h supp.h

ОбычноMakefile пишется так, чтобы простой запуск make приводил к компиляции проекта,однако, помимо компиляции, Makefile может использоваться и для выполнениядругих вспомогательных действий, напрямую не связанных с созданием каких-либофайлов. К таким действиям относится очистка проекта от всех результатовкомпиляции, или вызов процедуры инсталляции проекта в системе. Для выполненияподобных действий в Makefile могут быть указаны дополнительные цели, обращениек которым будет осуществляться указанием их имени аргументом вызова make(например, «make install»). Подобные вспомогательные цели носятназвание фальшивых, что связанно с отсутствием в проекте файлов,соответствующих их именам. Фальшивая цель может содержать список зависимостей идолжна содержать список команд для исполнения. Поскольку фальшивая цель неимеет соответствующего файла в проекте, при каждом обращении к ней make будетпытаться ее построить. Однако, возможно возникновение конфликтной ситуации,когда в каталоге проекта окажется файл с именем, соответствующим именифальшивой цели. Если для данного имени не определены файловые зависимости, онбудет всегда считаться актуальным (up to date) и цель выполняться не будет. Дляпредотвращения таких ситуаций make поддерживает «встроенную» переменную".PHONY", которой можно присвоить список имен целей, которые всегдадолжны считаться фальшивыми.

Теперьможно привести пример полного Makefile, пригодного для работы с проектом prog ипринять во внимание некоторые часто применяемые приемы:

OBJS= main.o supp.o

BINS= prog

PREFIX= /usr/local

INSTALL= install

INSOPTS= -s -m 755 -o 0 -g 0

CC= gcc

.PHONY= all clean install

all:$(BINS)

prog:$(OBJS)

                     $(CC)-o prog $(OBJS)

main.o:defs.h

supp.o:defs.h supp.h

clean:

                     rm-f $(BINS)

                     rm-f $(OBJS)

                     rm-f *~

                    

install:all

                     for$i in $(BINS); do \

                      $(INSTALL)$(INSOPTS) $$i $(PREFIX)/bin; \

                     done

Итак,у нас появились три фальшивых цели: all, clean и install. Цель all обычноиспользуется как псевдоним для сборки сложного проекта, содержащего несколькорезультирующих файлов (исполняемых, разделяемых библиотек, страниц документациии т.п.). Цель clean используется для полной очистки каталога проекта отрезультатов компиляции и «мусора» — резервных файлов, создаваемыхтекстовыми редакторами (они обычно заканчиваются символом "~"). Цельinstall используется для инсталляции проекта в операционной системе(приведенный пример расчитан на установку только исполняемых файлов). Следуетотметить повсеместное использование макроопределений — помимо всего, этот приемповышает читабельность. Обратите также внимание на определение переменной $(CC)- это встроенная переменная make и она неявно «сработает» и прикомпиляции объектных файлов.

Внутренние макросы
Мake поддерживает пять внутренних макросов, полезных при написании правилпостроения целевых файлов:

$*

Этот макросявляется именем файла без расширения из текущей зависимости; вычисляется толькодля подразумеваемых правил (см. Суффиксы).

$@

Этот макросзаменяется на полное имя целевого файла; вычисляется только для явно заданныхзависимостей.

$<

Вычисляетсятолько для подразумеваемых правил или для правила .DEFAULT. Этот макросзаменяется на имя файла, от которого по умолчанию зависит целевой файл. Так, вправиле .c.o макрос $< будет заменен на имя файла с расширением .c.Например, правило для изготовления оптимизированного об ектного файла из файлас расширением .c может быть таким:

             .c.o:

               cc -c -O $*.c

или

              .c.o:

                     cc -c -O$<

$?

Макрос $?можно использовать в явных правилах make-файла. Этот макрос заменяется насписок файлов-источников, которые изменялись позднее целевого файла.

$%

Этот макросприменяется только тогда, когда целевой файл указан в виде библ(файл.o), чтоозначает, что он находится в библиотеке библ. В этом случае $@ заменяется набибл (имя архива), а $% заменяется на настоящее имя файла, файл.o.

Четыре из этихмакросов имеют альтернативную форму. Если к любому из этих макросов добавленоF, то он заменяется на соответствующее макросу имя файла без имени каталога;если же добавлено D, то макрос заменяется на остальную часть значенияпервоначального макроса без последнего символа /, то есть на имя каталога. Так,$(@D) соответствует каталогу из $@. Если каталог не указан, то генерируетсятекущий каталог (.). Только макрос $? не имеет альтернативной формы.

Библиотеки

Еслицелевой файл или имя из списка зависимостей содержит скобки, то онорассматривается как имя архивной библиотеки, а цепочка символов в скобках — какимя элемента библиотеки. Так, и библ(файл.o), и $(БИБЛ)(файл.o) обозначаютбиблиотеку, содержащую файл.o (предполагается, что макрос БИБЛ былпредварительно определен). Выражение $(БИБЛ)(файл1.o файл2.o) недопустимо.Правила обработки библиотечных файлов имеют вид .XX.a, где XX — суффикс, покоторому будет получен элемент библиотеки. К сожалению, в текущей реализациитребуется, чтобы XX отличался от суффикса элемента библиотеки. Например,нельзя, чтобы библ(файл.o) зависел от файл.o явно. Наиболее общее использованиеинтерфейса работы с библиотеками следующее (предполагается, что исходнымиявляются файлы на языке C):

    lib: lib(file1.o) lib(file2.o) lib(file3.o)

       @echo lib is now up-to-date

    .c.a:

       $(CC) -c $(CFLAGS) $<

       $(AR) $(ARFLAGS) $@ $*.o

       rm -f $*.o

Фактически,правило .c.a, приведенное выше, встроено в make. Более интересный, но болееограниченный пример конструкции, поддерживающей работу с библиотеками:

    lib: lib(file1.o) lib(file2.o) lib(file3.o)

       $(CC) -c $(CFLAGS) $(?:.o=.c)

       $(AR) $(ARFLAGS) lib $?

       rm $?  @echo lib is now up-to-date

    .c.a:;

Здесьиспользуется режим подстановки расширений макросов. Список $? определен какмножество имен об ектных файлов (в библиотеке lib), чьи исходные C-файлы былиизменены. Подстановка заменяет .o на .c. (К сожалению, нельзя ещетрансформировать в .c~; однако, это может стать возможно в будущем). Заметимтакже, что запрещается правило .c.a:, создающее каждый об ектный файл один задругим. Эта конструкция значительно ускоряет обновление библиотек, ностановится весьма громоздкой, если библиотека содержит как программы на C, таки на ассемблере.

Отладчик ADBВызов ADB

DызываетczADB,  выполняя adb (1) команду.Синтаксис:

adb[-w] [-k] [-Idir] [-Ppid ] [objfile [corefile]

Где:

-w                             Разрешаетзапись в объектный файл.                                                                                                        

-k                             СообщаетADB, что объектные и основные файлы являются файлами ядра, так что ADB можетисполнять соответствующее управление памятью.                                                                                                                                  

-Idir                         Определяеткаталоги, который содержит команды для ADB.                                                          

-Ppid                        «Принимают»уже процесс выполнения для отладки.                                                                          

objfile                     Называетвыполнимый объектный файл.                                                                                                

corefile                    Называетосновной загрузочный модуль.                                                                                               

Обычно,вызывая ADB:

adba.out core

Илиболее просто:

adb

Потомучто настройка по умолчанию для объектного файла — a.out, и core файл — core.

Поставказнаку «минус» (-) для средств названия(имени) файла " игнорируетэтот параметр, " как в:

adba.out -

Чтобызаписывать в объектный файл при игнорировании core файла, можна напечатать:

adb-w a.out -

Чтобыотлаживать выполняющийся в настоящее время процесс, вызовите ADB,  печатая:

adb-Ppid a.out

Pidили " идентификатор процесса " может быть получен, используя ps (1)команда.

Потому что ADB прерывает нажатия клавиши, Вы не можетеиспользовать сигнал выхода из, чтобы выйти от ADB. Вы должны использовать явныйзапрос ADB $q или $Q (или CONTROL D) чтобы выйти от ADB.

 

ИспользованиеADB В интерактивном режиме

Вы работаете в интерактивном режиме с ADB, вводя запросы.

Общая форма для запроса:

[address] [,count] [command] [modifier]

ADB поддерживает текущий адрес, называемый«точкой». Этот адрес подобен в функции к текущему указателю в HP-UXредакторе, vi (1). Когда Вы указываете address, ADB устанавливает точку к тому расположению. ADB тогдавыполняет  команду command count раз. Вы можете вводить address и count  каквыражения. Вы создаете эти выражения от символов в пределах программы, которуюВы  можете  проверять и от десятичного числа,восьмеричных, и шестнадцатеричных целых чисел. Вот списки различных операторы для формирующихся выражений.

Формирующие выражение Операторы

Оператор          Операция       

+           Добавление   

—            Вычитание или Отрицание      

*           Умножение     

%          Целочисленный раздел(деление)       

~           Одноместный НЕ       

&           Поразрядный И          

|            Поразрядный Содержащий ИЛИ        

*           Серия к следующему множителю      

ADB исполняет арифметические операции навсех 32 битах.

ADB«помнит» последний(прошлый) набор оснований системы счисления. Выможете изменять(заменять) текущее основание системы счисления с $o, $d, или $xкоманды. В течение запуска, заданное по умолчанию основание системы счисленияшестнадцатерично. Если Вы изменяете(заменяете) основание системы счисления кдесятичному числу, весь последующий ввод и вывод целых чисел интерпретируетсякак десятичное число, пока другой спецификатор основания системы счисления неиспользуется.

Таблица2 списка некоторые обычно использовала команды ADB и их значение.

Обычно Используемый ADB Команды

Команда               Описание           

?              Печатает содержание от objfile.

/               Печатает содержание от corefile.               

=              Печатает значение «точки» (.) (адресс) .

:               Контрольной точки останова.    

$              Разные запросы.              

;               Разделитель команд.     

!               Выйти в Шелл.

CONTROLC         Заканчивает любую команду ADB.           

 

Отображение Информации

/>

Выможете запросить ADB расположения или в объектном файле или core файле. Запрос(?) показывает  содержание объектногофайла, в то время как / запрос исследует core файл. Как только Выинициализируете процесс (использование или:r или команда:e), или? или  / обращаются к расположениям вадресном пространстве выполняющегопроцесса.

Послелюбого? или / запросов, Вы можете определить формат, чтоADB должен использовать, чтобы печатать эту информацию. Таблица 3 списканекоторые обычно используемые команды формата.

Обычно Используемых Команды Формата

Команда               Описание           

c              Один байт как символ.   

b              Один байт как шестнадцатеричное значение.        

x              Два байта в шестнадцатеричном.              

X             Четыре байта в шестнадцатеричном.       

d              Два байта в десятичном числе.   

f              Четыре байта в единственном(отдельном) с плавающей запятой.   

F              Восемь байтов в двойном с плавающей запятой.  

i               Команда Precision Architecture HEWLETT-PACKARD.        

s              Символьная строка С нулевым символом в конце.               

a              Печатать в символической форме.             

n              Печатать newline.            

r               Печатать пустое пространство.  

^              Резервируют точку.        

Например,чтобы печатать первый шестнадцатеричный элемент массива длинных целых чисел,названных ints, Вы напечатали бы запрос:

ints/X

Этотзапрос устанавливает значение точки к значению таблицы идентификаторов ints.Это также устанавливает значение точечного приращения к четыре. " Точечноеприращение " является числом байтов, которые ADB печатает в требуемомформате.

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

ints/XD

Вэтом случае, ADB все еще устанавливает точку к ints, но точечное приращение — теперь восемь байтов.

Командаnewline — специальная команда, которая повторяет предыдущую команду. Командаnewline также использует значение точечного приращения, но команда не можетвсегда иметь значение. В этом контексте, однако, это означает повторятьпредыдущую команду, используя индекс одних и адрес точки плюс точечноеприращение. Так, в этом случае(регистре), команда newline устанавливает точку кints + 0x8 и печатает два длинных целого числа: первый как шестнадцатеричныйномер и второй как десятичное число. Вы можете также повторить команду newlineтак часто как хотите. Например, Вы могли быиспользовать эту методику, чтобы просмотреть разделы памяти.

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

ints/X4b

Какэти примеры, Вы можете предшествоватьлюбой команде формата с десятичным символом повторения.

Крометого, Вы можете использовать параметр индекса запроса ADB, чтобы повторить, полный формат командует определенным числом раз. Например, чтобы печатать тристроки, использующие вышеупомянутый формат, Вы напечатали бы запрос:

ints,3/X4bn

(nв конце команды печатает перевод каретки, который делает вывод более легким длячтения.)

Вэтом примере, ADB устанавливает значение точки к ints + 0x10, скорее чем ints.Это случается, потому что каждый раз ADB заново выполняет команду формата, этоустанавливает точку к точке плюс точечное приращение. Поэтому, значение точки — значение, которое точка имела в начале последнего(прошлого) выполнения командыформата. Точечное приращение — размер требуемого формата (в этомслучае(регистре), восемь байтов). Команда newline в это время установила быточку в ints + 0x18 и печать только одно повторение(копия) формата, потому чтозначение индекса сброшено к одному.

Чтобыпроверять текущее значение точки, Вы можете напечатать запрос:

.= a

=команда может печатать значение адреса в любом формате.

Выможете также использовать = команду, чтобы конвертировать(преобразовать) отодного ядра до другого. Например, Вы можете печатать значение «0x32»в восьмеричном, шестнадцатеричном, и представление десятичных чисел,  печатая:

0x32= oxd

ADB«помнит» сложный формат просьбы о каждом из?, /, и = команды.Например, после ввода предыдущего запроса, Вы можете печатать значение«0x64» в восьмеричном, шестнадцатеричном, и представление десятичныхчисел,  печатая:

0x64=

Тогда,потому что последний введенный / команда была ints/X4b, Вы можете напечатать:

ints/

Печататьчетыре байта в длинном шестнадцатеричном формате и четырех байтах в байтешестнадцатеричный формат.

Дополнительные команды печати

Команда            Описание       

$b         Печатают текущие контрольныеточки.          

$c          Печать располагает в стеке след.     

$d         Основание системы счислениязначения по умолчанию Набора, чтобы адресовать параметр.        

$e          Печатают внешние переменные.         

$f          Регистраторы С плавающей точкойкак единственная(отдельная) точность.

$F         Регистраторы С плавающей точкойкак двойная точность.   

$m         Печатают карты сегмента ADB.          

$r          Печатают общих регистраторов.       

$s          Смещение Набора для соответствиясимвола.          

$v          Печатают ADB переменные.   

$w         Вывод Набора выравнивает ширину.

Рекомендуеться также посмтотреть на лучшийОтладчик под Unix:

www.kiarchive.ru/pub/gnu/gnu-mirror/Manuals/ddd/html_mono/ddd.html


Отладчик XDB

XDB – отладчик дляотлаживания програм написаных на языках  C, HP FORTRAN, HP Pascal, and C++ ипонимает следующие команды:

xdb [-d dir] [-r file] [-R file] [-p file] [-Pprocess_ID] [-L] [-l library]

          [-i file] [-o file] [-e file] [-S num] [-s][objectfile [corefile]]

где

-d dir      определяетдополнительный каталог где размещены исходный коды

-r file      определяет рекордный файл

-R file    определяет файл restore, который был определен перед –p но после –r опции

-p file     определяет файлвоспоизведения действий (playback)

-P process_ID  Определяет process_ID до которого желаем «присоедениться» чтоб отправитьв 

режим отладки

 -L            определяет строчно-ориентированный интерфейс.

 -l library  определяетбиблиотеку (общедоступную) до которой желаете подсоедениться

-i file       переопределяетпоток ввода в файл или в устройство

-o file      переопределяет потоквывода в файл или в устройство

-e file      переопределяет потоквывода ошибок в файл или в устройство

-S num   устанавливает размеркеширования строки (по умолчанию 1024 что есть минимальный) –s  определяет всебиблиотеки (общедоступный) которые использует програма

Размер екрана будет в зависимостиот переменой окружения TERM или можно установитьиспользуя переменный LINES и COLUMNS.

При запуске xdb имеет3 окна:

·    Окно кода (содержит исходный код)

·    Окно  информации (содержит значения параметров и прочее)

·    Командное  окно, окно упраления

5.  Примеры команд

r запускаетпрограму с параметрами

R запускетпрограму без параметров

s пошаговыйзапусr (входит в  функции)

S пошаговыйзапусr (не входить в  функции)

к убитьпроцесс

q выйти изотладчика

с продолжитьвыполнения програмы (continue)

v 11 посмотреть 11 строку кода

+5 посмотрить на 5 строк ниже

-5   — выше

v my_function показатьфункцию

v test1.c просмотреть файл test1.c

v test1.c:40 просмотретьфайл test1.c на 40 строке

V посмотретьтекущуй стек (сотояний вызовов)

V 2 посмотретьтекущей стек на 2 уровня глубже

w 12 установитьразмер окна кода на 12

td показать код на asssembly языке (что б возвратиться к коду то еще раз нужнонабрать td)

ts показатькод и asssembly

s 6 запустить6 шагов

/ n=4 ищеткод n=4 (снизу)

? n=4 ищеткод n=4 (сверху)

b 42 устанавливаетточку останова в 42 строке

b 32 \4 в32 строке будет останавливаться програма 4 раза

bp устанавливаетточку останова на точке входа в програму

bp my_funс устанавливаетточку останова на точке входа в процедуру my_func

lb просмотретьточки останова

db 2 удалить2ю точку остнаова

db * удалитьвсе точки останова

p count просмотретьзначение count

p count\x просмотретьв шестнацатиричном виде

p num\D просмотретьпеременую в long типе как десятеричную

p. показатьпреведущее значение

p *(&.+42) показатьзначение на 42 байта дальше от преведуще-показаного значения

p my_struct показываетданые в структуре

p my_struct.nameпоказывает значение в структуры поля name

p *ptr значенияуказателя

p+ (p-) показыветследущий(преведущий) елемент

p num=num+20  увеличитьзначения на 20

t показываетстек

Справочнаятаблица команд и флагов XDB

 

h [topic]                     Print commands/syntaxes related to this topic.

          Helpwithout a topic prints the complete help text. Available topics

         include command names (short form) which print the syntax for and a

          tersedescription of the command.  Other topics are:

    assert   assertions;                                           macro       macros;

    bpset    set breakpoints;                                 misc        other commands,etc.;

    bpstat   view & modify breakpoints;          options     xdb command line;

    C++      C++ features;                                     proc        procedurerelated;

    cmdlist  command list features;                  record      write & use log files;

    control  process control;                                register    registers;

    data     view & modify data;                        screen      window modes;

    disasm   disassembly mode;                         signal      signal handling;

    formats  format specifiers;                           state       global state switches;

    help      thisdescription;                                  source      view source;

    list     list various items;                                  trace       trace stack orproc(s);

    locationslocation syntax;                             variables   variable syntax.

Process control:

r[arguments]                        Run child process with arguments.

R                                            Run child process with no arguments.

c [location]                            Continuefrom breakpoint with no signal, set temporary breakpoint at location.

C [location]                           Continuewith current signal, set temporary breakpoint at location.

s[number]                             Single step, follow procedure calls.

S [number]                            Singlestep, step over procedure calls.

g (line |#label)                      Go to line in current procedure.

g (+|-)[lines]                          Go forward/back 1 or given number of lines.

k                             Kill child process, if any.

Settingbreakpoints:

b [location][\count] [commands]   Set breakpoint.

ba [address][\count] [commands]  Set breakpoint at code address.

bb [depth][\count] [commands]     Set breakpoint at procedure beginning.

bi expr.proc[\count] [commands]                   Set an instance breakpoint.

bi [-c|-C] expr[commands]               Set an instance breakpoint.

bp[commands]                                   Set procedure breakpoints.

bpc [-c|-C]class [commands]           Set a class breakpoint.

bpo[[class]::]proc [commands]       Set breakpoints on overloaded functions.

bpt[commands]                                  Set procedure trace breakpoints.

bpx [commands]                                Set procedure exit breakpoints.

bt [(depth |proc)] [\count] [commands]  Trace procedure.

bu [depth][\count] [commands]     Set up-level breakpoint.

bx [depth][\count] [commands]     Set breakpoint at procedure exit.

bpg [commands]                                Set paragraph breakpoints.       (MPE-only)

tpg[commands]                                  Set paragraph trace breakpoints.(MPE-only)

txc                                         Toggle the exception stop-on-catch state.

txt                                                           Togglethe exception stop-on-throw state.

View andmodify breakpoint status:

lb                                                            List all breakpoints.

lx                                                            List exception stop-on-throw and -catch state.

db [number | *]                                    Deleteone or all breakpoints.

dp                                                          Delete procedure breakpoints.

Dpx                                                       Delete procedure exit breakpoints.

Dpt                                                        Delete procedure trace breakpoints.

dpg                                                        Delete paragraph [trace] breakpoints.(MPE-only)

ab [number |*]                                    Activate one or all breakpoints.

sb [number |*]                                     Suspend one or all breakpoints.

tb                                                           Toggle overall breakpoints state.

abccommands                                    Global breakpoint commands.

dbc                                                        Delete global breakpoint commands.

bc numberexpr                                    Set a breakpoint count.

xcccommands                                    Define the stop-on-catchcommand-list.

xtccommands                                     Define the stop-on-throw command-list.

i expr{commands} [{commands}]     Conditionally execute commands.  (Also: if)

{}                                           Group commands.

;                                              Separate commands.

Q                                                            Quiet breakpoint reporting.

 «any string»                                         Print string.

Sourceviewing:

L                                                            Show current location and its source line.

v[location]                                           View source at location insource window.

va[address]                                          View address in disassemblywindow.

V[depth]                                               View procedure at depthin source window.

top                                                         View procedure at top of stack.

up[number]                                          View procedure number levelshigher in stack.

down[number]                                    View procedure number levels lowerin stack.

+[number]                                            Move forward in sourcefile.

-[number]                                             Move backward in sourcefile.

/[string]                                                 Search forwards in sourcefile for string.

?[string]                                                  Searchbackwards for string.

n                                             Repeat previous search.

N                                                            Repeat previous search in opposite direction.

apm old_path[new_path]                 Add (prefix) path map for source files.

dpm [index |*]                                     Delete path map(s) for source files.

lpm                                                        List path maps in order of precedence.

D«dir»                                                    Add adirectory search path for source files.

ld                                            List all directories.

lf[string]                                                List all (or matching)files.

lsl                                           List all shared libraries.

lp[[class]::][string]                               List all (or matching)procedures.

lo[[class]::][string]                               List all (or matching)overloaded functions.

lcl[string]                                               List all (or matching)classes.

lct[string]                                              List all (or matching)class templates.

ltf[string]                                               List all (or matching)function expansions.

lft[string]                                               List all (or matching)function templates.

View andmodify data:

p expr[\format]                                   Print value of expression usingformat.

pexpr?format                                      Print address of expressionusing format.

p-[\format]                                           Print value of prev memorylocation using format.

p+[\format]                                          Print value of next memorylocation using format.

pclass::                                                 Print static members ofclass.

l[[class]::][proc[:depth]]                    List all parameters and locals ofproc.

t[depth]                                                 Trace stack.

T[depth]                                               Trace stack and showlocal variables.

tst                                           Toggle stub visibility.          (PA-RISC only)

lr[string]                                                List all (or matching)registers.

lc[string]                                                List all (or matching)commons.  (PA-RISC only)

lg[string]                                                List all (or matching)globals.

ls[string]                                                List all (or matching)special variables.

mm[string]                                           Show memory-map of all (ormatching) loaded shared -libraries.

f[«printf-style-format»]                      Set address printingformat.

disp item[\format]                              Display Cobol data item value usingformat.(MPE-only)

move val toitem                                 Move value «val» to cobol dataitem «item» (MPE-only)

pq <<sameas p>>              Print quietly.  Evaluate without printing.

ll[string]                                                 List all (or matching)labels.

lz                                            List all signals.

z [number] [i][r][s][Q]         Toggle flags (ignore, report, stop, Quiet) for signal.

Screen modes:

am                                                         Activate more (turn on pagination).

sm                                                          Suspend more (turn off pagination).

wnumber                                              Set size of source window.

td                                                           Toggle disassembly mode.

ts                                            Toggle split-screen mode.

fr                                            Display floating point registers.

gr                                            Display general registers.

tf                                            Toggle float register display precision (PA-RISC only).

sr                                            Display special registers.      (PA-RISC only)

u                                             Update screen.

U                                                            Refresh source & location windows onscreen.

+r                                                           Scroll floating point registers forward.

-r                                            Scroll floating point registers backward.

Assertions:

acommands                                        Create a new assertion with acommand list.

aa (number |*)                                    Activate one or all assertions.

da (number |*)                                    Delete one or all assertions.

la                                            List all assertions.

sa (number |*)                                     Suspend one or all assertions.

ta                                                           Toggle overall assertions state.

x[expr]                                                  Exit assertion mode,possibly aborting the assertion command list.

Macros:

def name[replacement-text]            Define a macro name.

lm [string]                                              Listall (or matching) macros.

tm                                                          Toggle the macro substitution mechanism.

undef (name |*)                                  Remove the macro definition for name orall.

Record andplayback:

tr[@]                                                      Toggle the record[record-all] mechanism.

<file                                                       Playback from file.

<<file                                                     Playback from filewith single stepping.

>file                                                       Record commands tofile.

>>file                                                     Append commands tofile.

>@file                                                   Record-all debuggercommands & output to file.

>>@file                                                 Append all debuggercommands & output to file.

                                ">>"is equivalent to ">" for the next four commands.

>                                             Show status of current recording file.

>@                                                         Show status of current record-all file.

>(t | f |c)                                                Turn recording on (t), or off(f), or close the recording file (c).

>@(t | f |c)                                            Turn record-all on (t), or off(f), or close the record-all file (c).

Misc:

ssfile                                                      Save (breakpoint,macro, assertion) state.

tc                                            Toggle case sensitivity in searches.

<carriage-return>                                Repeat previous command.

~                                             Repeat previous command.

![command-line]                                 Execute shell (with or withoutcommands).

q                                             Quit debugger.

$addr                                                    Unary operator, address of object.

$sizeof                                                  Unary operator, size of object.

$in                                                         Unary boolean operator, execution in procedure.

#[text]                                                   A comment.

I                                             Print debugger status.

M [(t | c) [expr[; expr ...]]]                  Print or set (text or core) maps.

tM                                                          Toggle between default and modifiable core maps.

VARIABLES

var                                                         Search current procedure and globals.

class::var                              Search class for variable.

[[class]::]proc:[class::]var                 Search procedure for variable.

[[class]::]proc:depth:[class::]var     Search procedure at depth on stack.

:var or::var                                          Search for global variable only.

.                                                               Shorthandfor last thing you looked at.

$var                                                       Define or use special variable.

$result                                                   Return value of last cmd line procedure call.

$signal                                                  Current child process signal number.

$lang                                                     Current language for expression evaluation.

$depth                                                  Default stack depth for local variables.

$print                                                     Displaymode for character data.

$line                                                      Current source line number.

$malloc                                                Debugger memory allocation (bytes).

$step                                                     Instr. count in non-debug before free-run.

$cplusplus                                            C++ feature control flags.

$regname                                             Hardware registers.

$fpa                                                      Treat fpa sequence as one instruction.(S300 only)

$fpa_reg                                               Address register for fpa sequences.   (S300 only)

LOCATIONS

line                                                         source line & code address (if any)

#label                                    "

file[:line]                               "

[file:]proc[:proc[...]][:line|#label]     "

[class]::proc[:line|#label]                   "

proc#line                                              code address (if any)

[class]::proc#line                                "

name@shared_lib                              Address of name in shared library

FORMATS

          Aformat has the form [count]formchar[size].  formchar's are:

 a                                                            String at address.

(b |B)                                                     Byte in decimal (eitherway).

(c |C)                                                     (Wide) character.

(d |D)                                                     (Long) decimal.

(e |E)                                                      E floating pointnotation (as double).

(f |F)                                                      F floating pointnotation (as double).

(g |G)                                                     G floating pointnotation (as double).

 i                                                             Machine instruction (disassembly).

(k |K)                                                     Formatted structuredisplay (with base classes).

 n                                                            «Normal» format, based ontype.

(o |O)                                                     (Long) octal.

 p                                                            Print name of procedure containingaddress.

(r |R)                                                      Print template ofobject (with base classes).

 s                                                            String from pointer.

 S                                                             Formattedstructure display.

(t |T)                                                      Print type of object(with base classes).

(u |U)                                                     (Long) unsigned decimal.

(w |W)                                                   Wide character string (ataddress).

(x |X)                                                     (Long) hexadecimal.

(z |Z)                                                      (Long) binary.

          Sizecan be a number or one of the following:

 b                            1 byte (char)

 s                            2 bytes (short)

 l                             4 bytes (long)

 D                           8 bytes (double — floating point formats only)

 L                           16 bytes (long double — floating point only)

6.  Системные вызовы и взаимодействие с UNIX.

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

UNIX — многозадачная система (мультипрограммная). Это означает, чтоодновременно может быть запущено много процессов. Процессор выполняет их врежиме разделения времени — выделяя по очереди квант времениодному процессу, затем другому, третьему… В результате создается впечатление параллельноговыполнения всех процессов (на многопроцессорных машинах параллельностьистинная). Процессам, ожидающим некоторого события, время процессора невыделяется. Более того, «спящий» процесс может быть временно откачан(т.е. скопирован из памяти машины) на диск, чтобы освободить память для другихпроцессов. Когда «спящий» процесс дождется события, он будет«разбужен» системой, переведен в ранг «готовых квыполнению» и, если был откачан будет возвращен с диска в память (но, можетбыть, на другое место в памяти!). Эта процедура носит название«своппинг» (swapping).

Можно запуститьнесколько процессов, выполняющих программу из одного и того же файла;при этом все они будут (если только специально не было предусмотрено иначе)независимыми друг от друга. Так, у каждого пользователя, работающего в системе,имеется свой собственный процесс-интерпретатор команд (своя копия),выполняющий программу из файла /bin/csh (или /bin/sh).

Процесспредставляет собой изолированный «мир», общающийся с другими«мирами» во Вселенной при помощи:

a) Аргументовфункции main:

       void main(int argc,char *argv[], char *envp[]);

Если мы наберемкоманду

       $ a.out a1 a2 a3

то функция mainпрограммы из файла a.out вызовется с

           argc    = 4  /*количество аргументов */

           argv[0] =«a.out»       argv[1] = «a1»

           argv[2] =«a2»          argv[3] = «a3»

           argv[4] = NULL

По соглашению argv[0]содержит имя выполняемого файла из которого загружена эта программа*.

b) Такназываемого «окружения» (или «среды») char *envp[],продублированного также в предопределенной переменной

       extern char **environ;

Окружениесостоит из строк вида

       "ИМЯПЕРЕМЕННОЙ=значение"

Массив этих строкзавершается NULL (как и argv). Для получения значения переменнойс именем ИМЯ существует стандартная функция

       char *getenv( char *ИМЯ);

Она выдает либо значение,либо NULL если переменной с таким именем нет.

c) Открытыхфайлов. По умолчанию (неявно) всегда открыты 3 канала:

                        ВВОД         В Ы ВО Д

     FILE *             stdin    stdout   stderr

     соответствует fd     0        1        2

     связан с        клавиатурой    дисплеем

    #include <stdio.h>

    main(ac, av) char **av; {

      execl("/bin/sleep",«Take it easy», «1000», NULL);

    }

Эти каналыдостаются процессу «в наследство» от запускающего процесса и связаныс дисплеем и клавиатурой, если только не были перенаправлены. Кроме того,программа может сама явно открывать файлы (при помощи open, creat,pipe, fopen). Всего программа может одновременно открыть до определенноеколичество  файлов в зависииости от настройки ядра.

d) Процесс имеетуникальный номер, который он может узнать вызовом

       int pid = getpid();

а также узнатьномер «родителя» вызовом

       int ppid = getppid();

Процессы могутпо этому номеру посылать друг другу сигналы:

       kill(pid /* кому */, sig/* номер сигнала */);

и реагировать наних

       signal (sig /*посигналу*/, f /*вызывать f(sig)*/);

e) Существуют идругие средства коммуникации процессов: семафоры, сообщения, общая память,сетевые коммуникации.

f) Существуютнекоторые другие параметры (контекст) процесса: например, его текущий каталог,который достается в наследство от процесса-«родителя», и может бытьзатем изменен системным вызовом

       chdir(char *имя_нового_каталога);

У каждогопроцесса есть свой собственный текущий рабочий каталог. К«прочим» характеристикам отнесем также: управляющий терминал; группу процессов(pgrp); идентификатор (номер) владельца процесса (uid),идентификатор группы владельца (gid), реакции и маски, заданные наразличные сигналы; и.т.п.

g) Изданиядругих запросов (системных вызовов) к операционной системе («богу»)для выполнения различных «внешних» операций.

h) Все остальныедействия происходят внутри процесса и никак не влияют на другие процессы иустройства («миры»). В частности, один процесс НИКАК не можетполучить доступ к памяти другого процесса, если тот не позволил ему это явно(механизм shared memory); адресные пространства процессов независимы иизолированы (равно и пространство ядра изолировано от памяти процессов).

Операционнаясистема выступает в качестве коммуникационной среды, связывающей«миры»-процессы, «миры»-внешние устройства (включаятерминал пользователя); а также в качестве распорядителя ресурсов«Вселенной», в частности — времени (по очереди выделяемого активнымпроцессам) и пространства (в памяти компьютера и на дисках).

Уже неоднократноупоминали «системные вызовы». Что же это такое? С точки зренияСи-программиста — это обычные функции. В них передают аргументы, они возвращаютзначения. Внешне они ничем не отличаются от написанных нами или библиотечныхфункций и вызываются из программ одинаковым с ними способом.

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

Поведение всехпрограмм в системе вытекает из поведения системных вызовов, которыми онипользуются. Даже то, что UNIX является многозадачной системой,непосредственно вытекает из наличия системных вызовов fork, exec,wait и спецификации их функционирования! То же можно сказать про язык Си- мобильность программы зависит в основном от набора используемых в ней библиотечныхфункций (и, в меньшей степени, от диалекта самого языка, который долженудовлетворять стандарту на язык Си). Если две разные системыпредоставляют все эти функции (которые могут быть по-разному реализованы, нодолжны делать одно и то же), то программа будет компилироваться и работать вобоих системах, более того, работать в них одинаково.

Сам термин«системный вызов» как раз означает «вызов системы для выполнениядействия», т.е. вызов функции в ядре системы. Ядро работает в привелегированномрежиме, в котором имеет доступ к некоторым системным таблицам*,регистрам и портам внешних устройств и диспетчера памяти, к которым обычнымпрограммам доступ аппаратно запрещен (в отличие от MS DOS, где всетаблицы ядра доступны пользовательским программам, что создает раздолье длявирусов). Системный вызов происходит в 2 этапа: сначала в пользовательскойпрограмме вызывается библиотечная функция-«корешок», тело которойнаписано на ассемблере и содержит команду генерации программного прерывания.Это — главное отличие от нормальных Си-функций — вызов по прерыванию. Вторымэтапом является реакция ядра на прерывание:

1.   переход в привелегированный режим;

2.   разбирательство, КТО обратился к ядру, иподключение u-area этого процесса к адресному пространству ядра (contextswitching);

3.   извлечение аргументов из памяти запросившегопроцесса;

4.   выяснение, ЧТО же хотят от ядра (один изаргументов, невидимый нам — это номер системного вызова);

5.   проверка корректности остальных аргументов;

6.   проверка прав процесса на допустимость выполнениятакого запроса;

7.   вызов тела требуемого системного вызова — этообычная Си-функция в ядре;

8.   возврат ответа в память процесса;

9.   выключение привелегированного режима;

10.   возврат из прерывания.

Во времясистемного вызова (шаг 7) процесс может «заснуть», дожидаясьнекоторого события (например, нажатия кнопки на клавиатуре). В это время ядропередаст управление другому процессу. Когда наш процесс будет«разбужен» (событие произошло) — он продолжит выполнение шагов системноговызова.

Большинствосистемных вызовов возвращают в программу в качестве своего значения признакуспеха: 0 — все сделано, (-1) — сисвызов завершился неудачей; либо некотороесодержательное значение при успехе (вроде дескриптора файла в open(), и(-1) при неудаче. В случае неудачного завершения в предопределенную переменную errnoзаносится номер ошибки, описывающий причину неудачи (коды ошибокпредопределены, описаны в include-файле <errno.h> и имеютвид Eчтото). Заметим, что при УДАЧЕ эта переменная просто неизменяется и может содержать любой мусор, поэтому проверять ее имеет смысллишь в случае, если ошибка действительно произошла:

    #include <errno.h>     /* коды ошибок */

    extern int errno;

    extern char *sys_errlist[];

    int value;

    if((value = sys_call(...))< 0 ){

       printf(«Error:%s(%d)\n», sys_errlist[errno],

                                errno);

       exit(errno); /*принудительное завершение программы */

    }

Предопределенныймассив sys_errlist, хранящийся в стандартной библиотеке,содержит строки-расшифровку смысла ошибок (по-английски). Посмотрите описаниефункции per- ror().

Время в UNIX.

Ниже приведены примеры как узнавать время:

. В системе UNIXвремя обрабатывается и хранится именно в виде числа секунд; в частности текущееастрономическое время можно узнать системным вызовом

    #include <sys/types.h>

    #include <time.h>

    time_t t = time(NULL); /* time(&t); */

Функция

    struct tm *tm = localtime(&t );

разлагает числосекунд на отдельные составляющие, содержащиеся в int-полях структуры:

    tm_year год           (надо прибавлять 1900)

    tm_yday  день вгоду   0..365

    tm_mon   номермесяца  0..11 (0 — Январь)

    tm_mday  датамесяца   1..31

    tm_wday  деньнедели   0..6  (0 — Воскресенье)

    tm_hour часы          0..23

    tm_min  минуты        0..59

    tm_sec  секунды       0..59

Номера месяца идня недели начинаются с нуля, чтобы вы могли использовать их в качествеиндексов:

    char *months[] = {«Январь», «Февраль», ..., «Декабрь» };

    printf( "%s\n", months[tm->tm_mon ] );

Часто бывает нужда передавать значениявремени в одной строке

Вот пример программы котораяпреобразовывает в ремя в такой формат:

/* Mon Jun 12 14:31:26 2000 */

#include <stdio.h>

#include <time.h>

main()     { /* команда date*/

time_t t =time(NULL);

char *s = ctime(&t);

printf("%s",s);

}

UNIX-машины имеют встроенные таймеры (как правило несколько) с довольновысоким разрешением. Некоторые из них могут использоваться как«будильники» с обратным отсчетом времени: в таймер загружаетсянекоторое значение; таймер ведет обратный отсчет, уменьшая загруженный счетчик;как только это время истекает — посылается сигнал процессу, загрузившемутаймер.

Вот как, кпримеру, выглядит функция задержки в микросекундах (миллионных долях секунды).Примечание: эту функцию не следует использовать вперемежку с функциями sleepи alarm.

    #include<sys/types.h>

    #include<signal.h>

    #include<sys/time.h>

    void do_nothing(){}

    /* Задержкана usec миллионных долей секунды (микросекунд) */

    void usleep(unsignedint usec) {

           struct itimerval        new, old;

            /* struct itimerval  содержит поля:

               struct timeval    it_interval;

               struct timeval    it_value;

               Где struct timeval содержит поля:

               long    tv_sec;    — число целых секунд

               long    tv_usec;   — число микросекунд

             */

           struct sigaction        new_vec, old_vec;

            if(usec == 0) return;

            /*Поле tv_sec  содержит число целых секунд.

              Поле tv_usec содержит число микросекунд.

              it_value    — это время, через которое В ПЕРВЫЙ раз

                            таймер «прозвонит»,

                            то есть пошлет нашему процессу

                            сигнал SIGALRM.

                            Время, равное нулю, немедленно остановит таймер.

              it_interval — это интервал времени, который будет загружаться

                            в таймер после каждого «звонка»

                            (но не в первый раз).

                            Время, равное нулю, остановит таймер

                            после его первого «звонка».

             */

           new.it_interval.tv_sec  = 0;

           new.it_interval.tv_usec = 0;

           new.it_value.tv_sec  = usec / 1000000;

           new.it_value.tv_usec = usec % 1000000;

            /*Сохраняем прежнюю реакцию на сигнал SIGALRM в old_vec,

              заносим в качестве новой реакции do_nothing()

             */

           new_vec.sa_handler = do_nothing;

            sigemptyset(&new_vec.sa_mask);

           new_vec.sa_flags = 0;

            sigaction(SIGALRM,&new_vec, &old_vec);

            /*Загрузка интервального таймера значением new, начало отсчета.

             *Прежнее значение спасти в old.

             *Вместо &old можно также NULL — не спасать.

             */

            setitimer(ITIMER_REAL,&new, &old);

            /*Ждать прихода сигнала SIGALRM */

            sigpause(SIGALRM);

            /*Восстановить реакцию на SIGALRM */

            sigaction(SIGALRM,&old_vec, (struct sigaction *) 0);

            sigrelse(SIGALRM);

            /*Восстановить прежние параметры таймера */

            setitimer(ITIMER_REAL,&old, (struct itimerval *) 0);

    }

   

Пример оспользования интервалов

    #include<stdio.h>

    #include <unistd.h>     /*_SC_CLK_TCK */

    #include <signal.h>     /*SIGALRM */

    #include <sys/time.h>   /* неиспользуется */

    #include <sys/times.h>  /* structtms */

    struct tms tms_stop,  tms_start;

    clock_t    real_stop,real_start;

    clock_t HZ;     /* число ticks всекунде */

    /* Засечь время момента старта процесса*/

    void hello(void){

            real_start = times(&tms_start);

    }

    /* Засечь время окончания процесса */

    void bye(int n){

            real_stop = times(&tms_stop);

    #ifdef CRONO

            /* Разность времен */

            tms_stop.tms_utime -=tms_start.tms_utime;

            tms_stop.tms_stime -=tms_start.tms_stime;

    #endif

            /* Распечатать времена */

            printf(«User  time          = %g seconds [%lu ticks]\n»,

              tms_stop.tms_utime /(double)HZ, tms_stop.tms_utime);

            printf(«Systemtime          = %g seconds [%lu ticks]\n»,

              tms_stop.tms_stime /(double)HZ, tms_stop.tms_stime);

            printf(«Children user  time = %g seconds [%lu ticks]\n»,

              tms_stop.tms_cutime /(double)HZ, tms_stop.tms_cutime);

            printf(«Children systemtime = %g seconds [%lu ticks]\n»,

              tms_stop.tms_cstime /(double)HZ, tms_stop.tms_cstime);

            printf(«Realtime            = %g seconds [%lu ticks]\n»,

              (real_stop — real_start) /(double)HZ, real_stop — real_start);

            exit(n);

    }

    /* По сигналу SIGALRM — завершитьпроцесс */

    void onalarm(int nsig){

            printf(«Выход #%d================\n», getpid());

            bye(0);

    }

    /* Порожденный процесс */

    void dochild(int n){

            hello();

            printf(«Старт #%d================\n», getpid());

            signal(SIGALRM, onalarm);

            /* Заказать сигнал SIGALRMчерез 1 + n*3 секунд */

            alarm(1 + n*3);

            for(;;){}       /* зациклитьсяв user mode */

    }

    #define NCHLD 4

    int main(int ac, char *av[]){

            int i;

            /* Узнать число тиков в секунде*/

            HZ = sysconf(_SC_CLK_TCK);

            setbuf(stdout, NULL);

            hello();

            for(i=0; i < NCHLD; i++)

                    if(fork() == 0)

                            dochild(i);

            while(wait(NULL) > 0);

            printf(«Выход MAIN=================\n»);

            bye(0);

            return 0;

    }

Сигналы.

Процессы в UNIXиспользуют много разных механизмов взаимодействия. Одним из них являются сигналы.

Сигналы — это асинхронныесобытия. Что это значит? Сначала объясним, что такое синхронные события:я два раза в день подхожу к почтовому ящику и проверяю — нет ли в нем почты(событий). Во-первых, я произвожу опрос — «нет ли для менясобытия?», в программе это выглядело бы как вызов функции опроса и, можетбыть, ожидания события. Во-вторых, я знаю, что почта может ко мнеприйти, поскольку я подписался на какие-то газеты. То есть я предварительно заказывалэти события.

Схема ссинхронными событиями очень распространена. Кассир сидит у кассы и ожидает,пока к нему в окошечко не заглянет клиент. Поезд периодически проезжает мимосветофора и останавливается, если горит красный. Функция Си пассивно«спит» до тех пор, пока ее не вызовут; однако она всегда готовавыполнить свою работу (обслужить клиента). Такое ожидающее заказа (события)действующее лицо называется сервер. После выполнения заказа сервер вновьпереходит в состояние ожидания вызова. Итак, если событие ожидается вспециальном месте и в определенные моменты времени (издается некий вызов дляОПРОСА) — это синхронные события. Канонический пример — функция gets,которая задержит выполнение программы, пока с клавиатуры не будет введенастрока. Большинство ожиданий внутри системных вызовов — синхронны. ЯдроОС выступает для программ пользователей в роли сервера, выполняющего сисвызовы(хотя и не только в этой роли — ядро иногда предпринимает и активные действия:передача процессора другому процессу через определенное время (режим разделениявремени), убивание процесса при ошибке, и.т.п.).

Сигналы — этоасинхронные события. Они приходят неожиданно, в любой момент времени — вродетелефонного звонка. Кроме того, их не требуется заказывать — сигнал процессуможет поступить совсем без повода. Аналогия из жизни такова: человек сидит ипишет письмо. Вдруг его окликают посреди фразы — он отвлекается, отвечает навопрос, и вновь продолжает прерванное занятие. Человек не ожидал этогооклика (быть может, он готов к нему, но он не озирался по сторонамспециально). Кроме того, сигнал мог поступить когда он писал 5-ое предложение,а мог — когда 34-ое. Момент времени, в который произойдет прерывание, нефиксирован.

Сигналы имеют номера,причем их количество ограничено — есть определенный список допустимых сигналов.Номера и мнемонические имена сигналов перечислены в includeфайле <signal.h>и имеют вид SIGнечто. Допустимы сигналы с номерами 1..NSIG-1,где NSIG определено в этом файле. При получении сигнала мы узнаем егономер, но не узнаем никакой иной информации: ни от кого поступил сигнал,ни что от нас хотят. Просто «звонит телефон». Чтобы получитьдополнительную информацию, наш процесс должен взять ее из другого известногоместа; например — прочесть заказ из некоторого файла, об имени которого всенаши программы заранее «договорились». Сигналы процессу могутпоступать тремя путями:

От другого процесса, который явно посылает его нам вызовом

         kill(pid,sig);

где pid — идентификатор (номер) процесса-получателя, а sig — номер сигнала.Послать сигнал можно только родственному процессу — запущенному тем жепользователем.

От операционной системы. Система может посылать процессу ряд сигналов, сигнализирующих об ошибках, например при обращении программы по несуществующему адресу или при ошибочном номере системного вызова. Такие сигналы обычно прекращают наш процесс. От пользователя — с клавиатуры терминала можно нажимом некоторых клавиш послать сигналы SIGINT и SIGQUIT. Собственно, сигнал посылается драйвером терминала при получении им с клавиатуры определенных символов. Так можно прервать зациклившуюся или надоевшую программу.

Процесс-получательдолжен как-то отреагировать на сигнал. Программа может:

проигнорировать сигнал (не ответить на звонок); перехватить сигнал (снять трубку), выполнить какие-то действия, затем продолжить прерванное занятие; быть убитой сигналом (звонок был подкреплен броском гранаты в окно);

В большинствеслучаев сигнал по умолчанию убивает процесс-получатель. Однако процесс можетизменить это умолчание и задать свою реакцию явно. Это делается вызовом signal:

    #include <signal.h>

    void (*signal(int sig,void (*react)() )) ();

Параметр reactможет иметь значение:

SIG_IGN

сигнал sig будет отнынеигнорироваться. Некоторые сигналы (например SIGKILL) невозможноперехватить или проигнорировать.

SIG_DFL

восстановить реакцию по умолчанию(обычно — смерть получателя). имя_функции Например

          void fr(gotsig){… }  /* обработчик */

         … signal(sig, fr);… /* задание реакции */

Тогда приполучении сигнала sig будет вызвана функция fr, в которую вкачестве аргумента системой будет передан номер сигнала, действительновызвавшего ее gotsig==sig. Это полезно, т.к. можно задать одну иту же функцию в качестве реакции для нескольких сигналов:

         … signal(sig1, fr); signal(sig2, fr); ...

После возвратаиз функции fr() программа продолжится с прерванного места. Передвызовом функции-обработчика реакция автоматически сбрасывается в реакцию поумолчанию SIG_DFL, а после выхода из обработчика сновавосстанавливается в fr. Это значит, что во время работыфункции-обработчика может прийти сигнал, который убьет программу.

Приведем список некоторыхсигналов; полное описание посмотрите в документации. Колонки таблицы: G — может быть перехвачен; D — по умолчанию убивает процесс (k),игнорируется (i); C — образуется дамп памяти процесса: файл core,который затем может быть исследован отладчиком adb; F — реакцияна сигнал сбрасывается; S — посылается обычно системой, а не явно.

    сигнал         G   D   C   F   S  смысл

    SIGTERM        +   k   -   +  -  завершить процесс

    SIGKILL        -   k   -   +  -  убить процесс

    SIGINT         +   k   -   +  -  прерывание с клавиш

    SIGQUIT        +   k   +   +  -  прерывание с клавиш

    SIGALRM        +   k   -   +  +  будильник

    SIGILL         +   k   +   -  +  запрещенная команда

    SIGBUS         +   k   +   +  +  обращение по неверному

    SIGSEGV        +   k   +   +  +     адресу

    SIGUSR1, USR2  +   i  -   +   -  пользовательские

    SIGCLD         +   i   -   +  +  смерть потомка

Сигнал SIGILL используется иногда для эмуляции команд с плавающей точкой, что происходит примерно так: при обнаружении «запрещенной» команды для отсутствующего процессора «плавающей» арифметики аппаратура дает прерывание и система посылает процессу сигнал SIGILL. По сигналу вызывается функция-эмулятор плавающей арифметики (подключаемая к выполняемому файлу автоматически), которая и обрабатывает требуемую команду. Это может происходить много раз, именно поэтому реакция на этот сигнал не сбрасывается. SIGALRM посылается в результате его заказа вызовом alarm() (см. ниже). Сигнал SIGCLD посылается процессу-родителю при выполнении процессом-потомком сисвызова exit (или при смерти вследствие получения сигнала). Обычно процессродитель при получении такого сигнала (если он его заказывал) реагирует, выполняя в обработчике сигнала вызов wait (см. ниже). По-умолчанию этот сигнал игнорируется. Реакция SIG_IGN не сбрасывается в SIG_DFL при приходе сигнала, т.е. сигнал игнорируется постоянно. Вызов signal возвращает старое значение реакции, которое может быть запомнено в переменную вида void (*f)(); а потом восстановлено. Синхронное ожидание (сисвызов) может иногда быть прервано асинхронным событием (сигналом), но об этом ниже. Деления просесса

Системный вызов fork()(вилка) создает новый процесс: копию процесса, издавшего вызов.Отличие этих процессов состоит только в возвращаемом fork-ом значении:

    0                   — в новом процессе.

    pid нового процесса — висходном.

Вызов forkможет завершиться неудачей если таблица процессов переполнена. Простейшийспособ сделать это:

    main(){

          while(1)

            if(! fork()) pause();

    }

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

Пайпы и FIFO-файлы.

Процессы могутобмениваться между собой информацией через файлы. Существуют файлы с необычнымповедением — так называемые FIFO-файлы (first in, first out),ведущие себя подобно очереди. У них указатели чтения и записи разделены.Работа с таким файлом напоминает проталкивание шаров через трубу — с одногоконца мы вталкиваем данные, с другого конца — вынимаем их. Операция чтения из пустой«трубы» проиостановит вызов read (и издавший его процесс) дотех пор, пока кто-нибудь не запишет в FIFOфайл какие-нибудь данные. Операцияпозиционирования указателя — lseek() — неприме- нима кFIFO-файлам. FIFO-файл создается системным вызовом

    #include <sys/types.h>

    #include <sys/stat.h>

       mknod( имяФайла, S_IFIFO| 0666, 0 );

где 0666 — кодыдоступа к файлу. При помощи FIFO-файла могут общаться даже неродственныепроцессы.

РазновидностьюFIFO-файла является безымянный FIFO-файл, предназначенный для обменаинформацией между процессом-отцом и процессом-сыном. Такой файл — канал связикак раз и называется термином «труба» или pipe. Он создаетсявызовом pipe:

    int conn[2];   pipe(conn);

Если быфайл-труба имел имя PIPEFILE, то вызов pipe можно было бы описатькак

    mknod("PIPEFILE",S_IFIFO | 0600, 0);

    conn[0] = open("PIPEFILE",O_RDONLY);

    conn[1] = open("PIPEFILE",O_WRONLY);

    unlink("PIPEFILE");

При вызове forkкаждому из двух процессов достанется в наследство пара дескрипторов:

                 pipe(conn);

                   fork();

    conn[0]----<----   ----<-----conn[1]

                    FIFO

    conn[1]---->----   ---->-----conn[0]

     процесс A                 процесс B

Пусть процесс Aбудет посылать информацию в процесс B. Тогда процесс A сделает:

    close(conn[0]);

    // т.к. не собирается ничего читать

    write(conn[1],… );

а процесс B

    close(conn[1]);

    // т.к. не собирается ничего писать

    read (conn[0],… );

Получаем в итоге:

    conn[1]---->----FIFO---->-----conn[0]

     процесс A                 процесс B

Обычно поступаютеще более элегантно, перенаправляя стандартный вывод A в канал conn[1]

    dup2 (conn[1], 1); close(conn[1]);

    write(1,… );   /* или printf*/

а стандартныйввод B — из канала conn[0]

    dup2(conn[0], 0); close(conn[0]);

    read(0,… );    /* или gets */

Этосоответствует конструкции

         $   A | B

записанной наязыке СиШелл.

Файл, выделяемыйпод pipe, имеет ограниченный размер (и поэтому обычно целиком оседает вбуферах в памяти машины). Как только он заполнен целиком — процесс, пишущий втрубу вызовом write, приостанавливается до появления свободного места втрубе. Это может привести к возникновению тупиковой ситуации, если писатьпрограмму неаккуратно. Пусть процесс A является сыном процесса B,и пусть процесс B издает вызов wait, не закрыв канал conn[0].Процесс же A очень много пишет в трубу conn[1]. Мы получаемситуацию, когда оба процесса спят:

A потому что труба переполнена, а процесс B ничего из нее нечитает, так как ждет окончания A;

B потому что процесс-сын A не окончился, а он не можетокончиться пока не допишет свое сообщение.

Решением служитзапрет процессу B делать вызов wait до тех пор, пока он непрочитает ВСЮ информацию из трубы (не получит EOF). Только сделав после этого close(conn[0]);процесс B имеет право сделать wait.

Если процесс Bзакроет свою сторону трубы close(conn[0]) прежде, чемпроцесс A закончит запись в нее, то при вызове write в процессе A,система пришлет процессу A сигнал SIGPIPE — «запись в канал,из которого никто не читает».

Нелокальный переход.

Теперь поговоримпро нелокальный переход. Стандартная функция setjmp позволяетустановить в программе «контрольную точку»*, а функция longjmpосуществляет прыжок в эту точку, выполняя за один раз выход сразу изнескольких вызванных функций (если надо)*. Эти функции неявляются системными вызовами, но поскольку они реализуются машинно-зависимымобразом, а используются чаще всего как реакция на некоторый сигнал, речь о нихидет в этом разделе. Вот как, например, выглядит рестарт программы попрерыванию с клавиатуры:

    #include <signal.h>

    #include <setjmp.h>

    jmp_buf jmp; /* контрольная точка */

    /* прыгнуть в контрольную точку */

    void onintr(nsig){ longjmp(jmp,nsig); }

    main(){

       int n;

       n = setjmp(jmp); /* установить контрольную точку */

       if( n ) printf( «Рестартпосле сигнала %d\n», n);

       signal (SIGINT, onintr);    /* реакция на сигнал */

       printf(«Начали\n»);

       ...

    }

setjmp возвращает 0 при запоминании контрольной точки. При прыжке вконтрольную точку при помощи longjmp, мы оказываемся снова в функции setjmp,и эта функция возвращает нам значение второго аргумента longjmp, в этомпримере — nsig.

Прыжок вконтрольную точку очень удобно использовать в алгоритмах перебора с возвратом (backtracking):либо — если ответ найден — прыжок на печать ответа, либо если ветвь переборазашла в тупик — прыжок в точку ветвления и выбор другой альтернативы. При этомможно делать прыжки и в рекурсивных вызовах одной и той же функции: с болеевысокого уровня рекурсии в вызов более низкого уровня (в этом случае jmp_bufлучше делать автоматической переменной — своей для каждого уровня вызовафункции).

Разделяемая память

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

shmid = shmget(key, size, flag);

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

virtaddr = shmat(id, addr, flags);

id — это ранее полученный дескриптор сегмента addr — желаемый процессом виртуальный адрес, который должен соответствовать началу сегмента в виртуальной памяти virtaddr — реальный виртуальный адрес начала сегмента не обязательно совпадает со значением прямого параметра addr если addr == 0, ядро выбирает наиболее удобный виртуальный адрес начала сегмента

shmdt(addr);

addr — виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shmat

shmctl(id, cmd, shsstatbuf);

cmd идентифицирует требуемое конкретное действие важна функция уничтожения сегмента разделяемой памяти Семафоры

Обобщениеклассического механизма семафоров общего вида Диекстры

Целесообразностьобобщения сомнительна

Обычноиспользовался облегченный вариант двоичных семафоров

Известеналгоритм реализации семафоров общего вида на основе двоичных

Семафор вОС UNIX:

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

Трисистемных вызова:

semget для создания и получения доступа к набору семафоров semop для манипулирования значениями семафоров semctl для выполнения управляющих операций над набором семафоров

id = semget(key, count, flag);

key, flag и id — обычный смысл count — число семафоров в наборе семафоров, обладающих одним и тем же ключом индивидуальный семафор идентифицируется дескриптором набора семафоров и номером семафора в наборе если набор семафоров с указанным ключом уже существует, то число семафоров в группе можно узнать с помощью системного вызова semctl

oldval = semop(id, oplist, count);

id — дескриптор группы семафоров oplist — массив описателей операций над семафорами группы count — размер этого массива возвращается значение последнего обработанного семафора

Элементмассива oplist:

номер семафора в указанном наборе семафоров операция флаги

Еслипроверка прав доступа проходит нормально

указанные в массиве oplist номера семафоров не выходят за пределы общего размера набора семафоров для каждого элемента массива oplist значение семафора изменяется в соответствии со значением поля «операция»

Значениеполя операции положительно

значение семафора увеличивается на единицу все процессы, ожидающие увеличения значения семафора, активизируются (пробуждаются)

Значениеполя операции равно нулю

если значение семафора равно нулю, выбирается следующий элемент массива oplist иначе число процессов, ожидающих нулевого значения семафора, увеличивается на единицу обратившийся процесс переводится в состояние ожидания (усыпляется)

Значениеполя операции отрицательно

(1) егоабсолютное значение меньше или равно значению семафора

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

(2) значениесемафора меньше абсолютной величины поля операции

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

Стремлениедобиться возможности избегать тупиковых ситуаций

Системный вызов semopвыполняется как атомарная операция

Флаг IPC_NOWAITзаставляет ядро ОС UNIX не блокировать текущий процесс

лишь сообщать в ответных параметрах о возникновении ситуации, приведшей бы к блокированию процесса

semctl(id, number, cmd, arg);

id — это дескриптор группы семафоров number — номер семафора в группе cmd — код операции arg — указатель на структуру, содержимое которой интерпретируется в зависимости от операции

Можно уничтожитьиндивидуальный семафор в указанной группе

Очереди сообщений

Четыресистемных вызова:

msgget для образования новой очереди сообщений или получения дескриптора существующей очереди msgsnd для посылки сообщения (его постановки в очередь сообщений) msgrcv для приема сообщения (выборки сообщения из очереди) msgctl для выполнения управляющих действий

msgqid = msgget(key, flag);

Сообщенияхранятся в виде связного списка

Декскрипторочереди сообщений — индекс в массиве заголовковочередей сообщений

Взаголовке очереди хранятся:

указатели на первое и последнее сообщение в данной очереди число сообщений общий размер в байтах сообщений, находящихся в очереди идентификаторы процессов, которые последними послали или приняли сообщение через данную очередь временные метки последних выполненных операций msgsnd, msgrsv и msgctl

/>msgsnd(msgqid, msg, count, flag);

msg — это указатель на структуру, содержащую целочисленный тип сообщения и символьный массив

·    count — задает размер сообщения в байтах

flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти

Условияуспешной постановки сообщения в очередь:

процесс должен иметь право на запись в очередь длина сообщения не должна превосходить верхний предел общая длина сообщений не должна превосходить установленного предела тип сообщения должен быть положительным целым числом

Процесспродолжает свое выполнение

Ядроактивизирует (пробуждает) все процессы, ожидающие поступления сообщений изочереди

Превышаетсяверхний предел суммарной длины сообщений

обратившийся процесс откладывается до разгрузки очереди но есть флаг IPC_NOWAIT (как для семафоров)

count = msgrcv(id, msg, maxcount, type, flag);

msg — указатель на структуру данных в адресном пространстве пользователя для размещения принятого сообщения maxcount — размер области данных (массива байтов) в структуре msg type специфицирует тип сообщения, которое желательно принять flag указывает ядру, что следует предпринять, если в указанной очереди сообщений отсутствует сообщение с указанным типом count — реальное число байтов, переданных пользователю

Значениемпараметра typeявляется нуль

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

Значение typeесть положительное целое число

выбирается первое сообщение с таким же типом

Значение typeесть отрицательное целое число

выбирается первое сообщение, значение типа которого меньше или равно абсолютному значению type

В очередиотсутствуют сообщения, соответствующие спецификации type

процесс откладывается до появления в очереди требуемого сообщения но есть флаг IPC_NOWAIT

msgctl(id, cmd, mstatbuf);

опрос состояния описателя очереди сообщений изменение его состояния уничтожение очереди сообщений

4.1  Старт системы

4.2  run levels

4.3  Остановка системы

4.4  Конфигурирование ядра системы

4.5  Инсталирование периферии на примереленточного накопителя.

4.6  Инсталирование софта

4.7  Управление процессами

7.  Старт системы.

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

·    Определение типа процессора

·    Инициализация и тест таймеров

·    Нахождение и инициализация видео консоли

·    Загрузка конфигурации с EEPROM

·    Инициализации системы ввода-вывода включаяпользовательский интерфейс и аудио

·    Распечатка на консоли copyright и другихбаннеров, типа процессора EEPROM статуса, количества памяти

·    Тестирование памяти  и распечатка общего количествапамяти и найденных в результате теста ошибок

·    Тест и инициализация системы прямого доступа кпамяти (DMA)

·    Поиск и распечатка информации о встроенныхинтерфейсных платах

·    Тест и инициализация SCSI интерфеса и интерфейсалокольной сети

·    Предложение о выборе вариантов загрузки

/>


При этом возможен вариант запгрузки как с SCSI устройства (диск,CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен бытьпредварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, вего задачи входит загрузка вторичного загрузчика операционной системы. Дляэтого загрузочный диск должен быть инициализирован определенным образом. Помимостандартной файловой системы он еще должен содержать так называемы LIF (LogicalInterchange Fomat) раздел в котором записан вторичный загрузчик и ряднеобходимых утилит. Посмотреть состав LIF блока можно с помощью команды lifls принимающей в качестве аргумента имя блочного устройства диска:

                lifls /dev/dsk/c0t5d0

                ISL           AUTO                 HPUX                    LABEL

Для создания LIF области используется команда lifinit(инициализируються только диски которые не являются подмонтированными файловымисистемами). Для записи в или копирования из LIF области используется утилита lifcp.Например, команда:

            lifcp /dev/dsk/c0t5d0:ISL a

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

                Послезавершения всех тестов и выполнения поиска возможных устройств загрузки в и вслучае если параметр SECURE записанный  в EEPROM равен OFF возможен вход в менюзагрузки boot ROM при нажатии на клавишу ESC. Если SECURE=OFF и процессзагрузки не прерывался нажатием ESC а также EEPROM параметр AUTOBOOT=ON, bootROM попытается загрузить из LIF области вторичный загрузчик ISL. Устройствозагрузки при этом выбирается из EEPROM параметра PRIMARY BOOT PATH. В случае неудачнойзагрузки, boot ROM будет грузить ISL из устройства имя которого записано вEEPROM параметре ALTERNATE BOOT PATH. Если не удается загрузиться и от туда,система выйдет в boot ROM меню. Для поиска всех возможных устройств загрузкиboot ROM имеет команду SEARCH. Для загрузки с какогото конкретного устройстванайденого командой SEARCH используется команда BOOT:

                boot [device_path] [isl]

запущеная безаргументов она приводит к загрузке системы из устройства адрес которогосодержится в PRIMARY BOOT PATH. Если указан аргумент isl то системазагрузит вторичный загрузчик ISL в интерактивный режим. Основные случаи когданеобходима загрузка не с основного устройства перечислены ниже:

·    На основном диске нет загрузочного ядра

·    LIF область диска повреждена

·    Корневая файловая система ОЧЕНЬ сильно запорчена

Примечание: В том случае если SECURE=ON (безопасный режим) нет никакойвозможности попасть в boot ROM меню за исключением как физически отключитьустройства первичной и вторичной загрузки.

                Еслибыл выбран интерактивный режим загрузки ISL то последний после загрузки, нестанет автоматически загружать ядро системы а перейдет в диалоговый режим. Вэтом режиме есть ряд команд  влияющих на загрузку системы. Например по команде700SUPPORT возможна загрузка с CDROM специальной версии ядра системыпредназначеной для восстановления системы в том случае если ядро основнойсистемы не загружается. Список утилит которые доступны для запуска ISL можноувидеть по команде LS. Основная утилита – HPUX, предназначенная для загрузкиядра системы. Для того чтоб посмоьреть содержимое директории /stand на устройстве загрузки по умолчанию нужновоспользоваться командой:

                ISL> HPUX ll disk (;0)/stand/

При загрузкеядра  возможно указание файла ядра отличного от того что используется поумолчанию (/stand/vmunix) для загрузки а также запустить ядро с определеннымипараметрами. Например команда:

                ISL> hpux/stand/vmunix.prev

загружает ядро сименем /stand/vmunix.prev (эту команду используют в тех случаях когда вновьсобранное ядро не хочет по какимто причинам запускаться и нужно загрузитьстарое ядро).

А команда:

            ISL> hpux –is/stand/vmunix

загружает ядро сименем /stand/vmunix в однопользовательский режим. Ситуации прикоторыхнеобходима загрузка в однопользовательский режим:

·    забыт пароль администратора и его нужно изменить

·    поврежден файл /etc/inittab

·    какой то из загрузочных скриптов по каким топричинам  зависает

 

Сразу же послеполучения управления ядро системы выполняет две задачи:

·    Находит и монтирует корневую файловую систему

·    Запускает процесс init и еслиядру не было указано дополнительных аргументов относительно run-level то init переводит систему на default run-level (обычно этомногопорльзовательский режим работы)

8.  Run-levels.

После успешногомонтирования корневой файловой системы ядро запускает процесс init. Отличительной особенностью этого процесса является то что егосоздает непосредственно ядро, он имеет PID=1 и не имеет родительского процесса,в отличии от остальных процессов получающихся в следствие системного вызоваfork(). Конфигурациооный файл программы init называется /etc/inittab. Приведем его формат:

            Id:run-levels:action:process

где

                id                             Отодно до четырехбуквенный  индекс который идентифицирует

строку файла inittab.

                run-level                определяетrun-level.в одной строке может быть несколько run-levels.

run-levels определяются как цифры от 0 до 6. Когда boot initпытается измнить run-level, все процессы которые не имеют run-level поляравному изменяемому run-level получают предупреждающий сигнал (SIGTERM) и текоторые не завершили работу по истечению 20-ти секундного интервала получатсигнал  (SIGKILL).Если run level не определен, то это подразумевает все runlevels, с 0 до 6.

                                                Этополе также может принимать три других значения “a”, “b” и “c”.

Строки имеющие эти значения в поле run-levelвыполняются только

когда пользовательский init процесс запрашивает их.(независимо от

текущего run level системы).

Они в корне отличается от run levels в которые bootinit никогда не

входит a, b, or c.  Также выполнение процессов из этихrun-levels

никогда не меняет текущий run level системы.

Более того, процессы запущенные с rul-level a, b, или c нетерминируются когда boot init изменяет run-level системы. Процессы терминируютсялишь когда соответствующая строка inittab помечена как off в поле action илиполностью удалена из inittab или система загружается в однопользовательскийрежим.

action                     определяет действия этойстроки файла, которые могут принимать следующие значения:

boot                        выполнять процесс тольково время чтения inittab исключительно при загрузке системы. Boot init стартуетпроцесс не дожидаясь его окончания и по его завершении не рестартует егозаново.

bootwait               выполнять процесс только во время чтения inittab исключительнопри загрузке системы. Boot init стартует процесс дожидается  его окончания и поего завершении не рестартует его заново.

initdefault           процесс выполняется только во время начальной

загрузки. Boot init использует эту строку если онасуществует для того чтобы определить в какой run-level входить в самомначале.   Если в этой строке указано несколько run-levels то запускается снаибольшим номером. Если run-level не указан то стартует по умолчанию run-levelc номером 6. Если строка initdefaul не найдена в /etc/inittabто при старте системы будет запрошено на какой run-level запускать систему.

off                          если процессасоцированный с этой строкой в данный момент запущен то послать емупредупреждающий сигнал (SIGTERM) и подождать 20 секунд его завершения, послечего принудительно завершить его сигналом SIGKILL. Если процесс не запущен –игнорировать эту строку.

once                       Когда boot init стартуетrun level который совпадает с указанным в этой строке он не дожидается егоокончания и после окончания не запускает его вновь. Если boot init запускаетновый run level но процесс все еще в запущеном состоянии от предыдущегоrun-level то процесс не перестартовывается.

ondemand            Эта инструкция есть синониминструкции respawn за исключением того что она используется только с “a”, “b”,или “c” значениями run-level.

powerfail               Запустить процессасоциированный с этой строкой только в том случае если boot init получит сигналpower-fail signal (SIGPWR).

powerwait             Запустить процесс асоциированныйс этой строкой

только в случае если boot init получит power-fail signal (SIGPWR) иждать пока процесс завершит работу перед запуском любых других процессов изinittab.

respawn                 Если процесс не запущен, тозапустить его не дожидаясь окончания (прподолжив сканирование inittab). Послезавершения процесса  запустить его заново. Если процесс запущен – то  ничего неделать продолжив сканирование inittab.

 sysinit                    процессы содержащиеся встроках этого типа будут запускаться перед тем как boot init попытается получитьдоступ к системной консоли. Это подразумевает что процессы будут запускатьсятолько для инициализации устройств на которых boot init может получать runlevel информацию. Boot init ожидает завершение процессов запущенных с этимпараметром.

wait                        Когда boot init запускаетrun-level с этим параметром, он ждет завершения процесса. Любые сканирования файла inittab пока boot init находится на томже run level являються причинойигнорирования этой строки в файле inittab.

process                   это шелл скрипт который запускаетсяиз шела созданного системным вызовом fork() как «sh -c 'exec command'.

Запуск  init может сопровождаться следующими аргументами:

/sbin/init[0|1|2|3|4|5|6|S|s|Q|q|a|b|c]

агрументыозначают следующее:

0-6          перевод системы на уровень от 0 до 6

a|b|c       выполнение действий из файла из строк inittab eкоторыепомечены как

специальный run-level a, b, или c без изменениязначения текущего run-level.

Q|q          реинициализация файла  inittab без изменения значениятекущего run-level

S|s           перевод системы в однопользовательский режим, при этомлогическая

системная консоль /dev/syscon изменяется на тоттерминал с которого была

запущена команда.

Остановка системы

Для остановки системы Вы должны иметь права администратора(пользователь с UID=0). Различают два вида остановки системы, первый этоперевод системы в однопользовательский режим, при котором все пользовательскиеи системные процессы работающие в многопользовательском режиме завершаются, идоступ к машине остается лишь через логическую системную консоль (тот терминалс которого была запущена команда). Такой режим часто бывает необходим во времябэкапа или восстановления данных, при установке нового оборудования илипрограмного обеспечения. После этого для возврата назад в многопользовательскийрежим нужно воспользоваться командой init. Второй вид остановки системы – этополная остановка системы с последующим выключением питания. Остановка системыможет быть произведена как с применением команд hpux, так  и с использованиемSAM. При использовании SAM в разделе Routine Tasks выбрать пункт Systemshutdown а затем тип шатдауна:

·    Halt system                                  — полная остановка системы

·    Reboot                                           — перезагрузка системы

·    Go to single user state                 — перевод системы в однопользовательский режим

Прииспользовании hpux комманд необходимо выполнить переход в корневой каталог(т.к. нельзя размонтировать файловые системы которые используются просцессами),а затем выполнить команду shutdown с одним из параметров:

·    cd /

·    shutdown–h now                      — немедленная остановкасистемы

·    shutdown–r now                       — немедленная перезагрузкасистемы

·    shutdown                                    — немедленный перевод системы в

  однопользовательский режим

·    shutdown–h 300                 — остановка системы через пятьминут.

  При этом раз в всем залогиненым пользователям

будет посылаться уведомление о предстоящей

остановке системы.

Команда shutdownпереключает  логическую системную консоль /dev/syscon изменяется на тоттерминал с которого была запущена команда. shutdownиспользует программу /usr/sbin/wall для посылки сообщения о остановке или перезагрузки системы на всетерминалы на которых есть асктивные пользователи. По умолчанию лишьадминистратор системы обладает правами на остановку системы, однако существуетфайл /etc/shutdown.allow который позволяет выполнять остановку системы (но не перевод воднопользовательский режим)  пользователям не имеющих администраторских прав. Вэтом файле указывается имя пользователя и имя системы (для случая кластеров)которую пользователь может остановить. Симвод # исполдьзуется для комментариев,символ + обозначает любое имя. Например:

# пользователь user1 можетостанавливать систему systemA и systemB

systemA user1

systemB user1

# администратор можетостанавливать все системы

+ root

# любой пользователь можетостановить систему systemC

systemC  +

Отсутствие файла/etc/shutdown.allow или отсутствие в нем администратора (root) не может помешатьадминистратору остановить систему.

После запуска, shutdown выполняет:

·    сброс на диск всех суперблоков файловых систем находящихсяв памяти

·     установку real UID в 0

·     широковещательную посылку сообщения всемпользователям

·     запуск /sbin/rc длявыполнения корректного завершения всех основных системных и пользовательскихпрограмм

·     выполнение  пргораммы reboot для реальнойостановки или перезагрузки системы.

Так же как и пристарте, во время остановки системы используется скрипт /etc/rc. Еслистартовый скрипт линк (например /sbin/rcN.d/S123test) впоследовательности N имеет стоп действие, соответствующий остановочный скриптдолжен быть помещен в последовательность

N-1 (/sbin/rcN-1.d/K200test).  Действия запущенные на уровне N должны быть остановлены науровне N-1. Поэтому остановка системы (т.е., переход с уровня 3 напрямую вуровень 0) приведет к корректному завершению всех подсистем путем вызовасоответствующих остановочных скриптов.

Помомо команды shutdown существует команда reboootкоторая выполняет похожие действия. Например reboot –hвызывает остановку системы а reboot без параметров перезагрузку. Между командами reboot и shutdown есть принципиальная разница. reboot всемпроцессам в системе (кроме самой себя J) посылает 9-й сигнал, который процесс неможет перехватить или обработать и после этого вызывает остановку илиперезагрузку системы. Поэтому не рекомендуется использовать эту команду всистемах где есть критически важные приложения (например сервера баз данных)которые требуют корректной остановки.

Конфигурирование ядра системы

 

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

·    Добавление или удаление периферии (драйверовустройств) а также псевдодрайверов. В случае удаления периферии удалять драйверустройства из ядра совсем не обязательно, но крайне желательно, т.к. в этомслучае ядро будет меньше по обьему и будет работать более эффектино. Прежде чемудалять драйвер устройства убедитесь не зависят ли от него драйвера другихустройств проверив файлы в директории /usr/conf/master.d в таблицахзависимости в секции DRIVER_DEPENDENCY. Особое внимание следует обратить нафайл core-hpux.

·    Изменение системных параметров (tunableparameters). В тех случаях когда система работает с большим количествомпользователей часто возникает необходимость изменения стандартных системныхпараметров. Эти параметры определяются в секции TUNABLE в файлах /usr/conf/master.d. Большинство из них находится в файле core-hpux.

·    Инсталирование специализированного програмногообеспечения HP (подсистем). Если вы добавляете в систему специализированноепрограмное обеспечение например поддержку LAN,  ATM, FDDI и.т.п в этом случаетакже требуется модификация ядра.

·    Добавление файловых систем отлдичных от HFS.

·    Добавление, удаление или модификация swap и(или) dump областей, устройства консоли или корневой файловой системы.

Драйвера посвоим возможностям а также по методу доступа и управлению ими можно разделитьна три основных типа:

·    Символьные драйвера. Работа с этими драйверамипроисходит в побайтном режиме без использования буферного кэша. К такимдрайверам можно отнести драйвера таких устройств как драйвера последовательныхпортов, терминалов, магнитных лент …

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

·    Драйвера низкого уровня (raw drivers) Этот типдрайверов производит обмен с блочными устройствами напрямую минуя буферный кэшс ситемы.

Кроме драйверовустройств существует множество других драйверов не имеющих непосредственногоотношения к периферии компьютера. Такие драйвера называются псевдодрайверами.Вот примеры некоторых из них:

                /dev/kmem           обеспечиваетдоступ к физической памяти компьютера

                /dev/mem             обеспечиваетдоступ к виртуальной памяти ядра

/dev/null                нулевое устройство.Призаписи в него данные удаляются, а при чтении считывается 0 байт

lvm                         (Logical Volume Manager)обеспечивает построение и доступ к логическим дискам

Драйвераадресуются старшим номером устройства (major number). Помимо него такжесуществует младший номер (minor number) для адресации одного из клоновдрайвера. Например в случае с драйвером диска младший номер может означатьномер диска.

$ ls -l /dev/dsk/

total 0

brw-r--r--   1 root       sys        31 0x002000 Jun 10  1996 c0t2d0

brw-r--r--   1 root      sys         31 0x005000 Jun 10  1996 c0t5d0

brw-r--r--   1 root      sys         31 0x006000 Jun 10  1996 c0t6d0

$ ls -l /dev/rdsk/

total 0

crw-r-----   1 root      sys        188 0x002000 Jun 10  1996 c0t2d0

crw-r-----   1 root      sys        188 0x005000 Jan  3 16:47 c0t5d0

crw-r-----   1 root      sys        188 0x006000 Jun 10  1996 c0t6d0

Первая командавыводит файлы блочных дисковых устройств, вторая файлы raw дисковых устройств.Как создаются файлы устройств будет показано чуть позже. Доступ к драйверуосуществляется через специальную структуру данных называемою коммутаторомустройств каждый элемент которой содержит указатели на соответствующие функциидрайвера (d_open(), d_close(), d_strategy(), d_read(), d_write(), d_ioctl,d_xpoll(), d_intr(), …), так называемые точки входа. Старший номер являетсяуказателем на элемент коммутатора устройств. Блочные и символьные устройстваимеют свои собственные коммутаторы. Список драйверов можно посмотретьвоспользовавшись программой lsdev.

9.   Изменение системных параметров

К одним изосновных системных параметров относится параметр MAXUSERS который являетсямакросом на основании которого вычисляются множество других параметров(например nproc вычисляется как 20+8*MAXUSERS). Этот параметр не указывает, какможет показаться на первый взгляд на максимальное число пользователей всистеме. На системах с небольшим количеством пользователей (рабочие станции) онобычно равен 32, на больших системах (T500) его значение может превышать 200.Перечислим краткий список основных системных параметров:

Параметр

Значение по умолчанию

Описание

dbc_max_pct 50 Максимальный размер буферного кэша в процентах от обьема RAM maxdsiz 67108864 Максимальный размер сегмента данных maxssiz 8388608 Максимальный размер стека maxtsiz 67108864 Максимальный размер сегмента кода maxfiles 60 Максимальное количество открытых файлов на процесс maxuprc 75 Максимальное число процессов пользователя maxusers 32 Макрос через который определяются большинство других параметров nfile 2172 Максимальное число открытых файлов в системе nflock 200 Максимальное количество заблокированных файлов npty 60 Максимальное количество псевдотерминалов в системе semmns 128 Максимальное количество семафоров shmmax 67108864 Максимальный обьем разделяемой памяти shmmni 200 Максимальное количество идентификаторов разделяемой памяти shmseg 120 Максимальное количество сегментов разделяемой памяти на процесс

Для изменениясистемных параметров можно воспользоваться утилитой SAM либо выполнитьизменения конфигурационных файлов и пересобрать ядро вручную. При использованииSAM после запуска sam необходимо:

·    Открыть меню “SAM Kernel Configuration”

·    Выбрать “Configurable parameters”

·    Выбрать нужный параметр из списка

·    Активировать пункт меню “Actions->ModifyConfigurable Parameter”

·    Ввести новое значения параметра

После выхода израздела “Configurable parameters” SAM предложит создать новое ядро иперезагрузить систему.

Конфигурированиеядра с использованием команд HP-UX.

 

Для этогонеобходимо выполнить следующую последовательность действий:

·    cd/stand/buil

·    /usr/lbin/sysadm/system_prep–v –s system

Этот скрипт сосздает файл system являющийся шаблономконфигурационного файла ядра

·    visystem

Редактируем файл ядра

·    mk_kernel–s system

Компилируем ядро. Новое ядро будет содержаться в файле/stand/build/vmunix_test

·    mv/stand/vmunix /stand/vmunix.prev

mv /stand/system/stand/system.prev

Создаем резервные копии старого ядра и конфигурационного файла

·    mv/stand/build/vmunix_test /stand/vmunix

mv/stand/build/system /stand

Перемещаем ядро в директорию из которой идет загрузка

·    shutdown–r now

выполняем перезагрузку системы

Инсталирование периферии

 

Файлыустройств

Обычно файлы устройств располагаются вкаталоге /dev и cуществует специальное соглашение по поводу их имен. Именафайлов устройств как правило маркируются в соответствии со следующимсоглашением: c#t#d#[s#]:

                c#           представляеткласс интерфейса или интерфейсной карты.

            t#         адрес устройства на шине. Обычно он выставляется физически

переключателями расположеными на устройстве.

            d#        номер устройства. (для SCSI устройств это логический номерустройства LUN)

            s#         необязательный параметр показывающий номер секции устройства.Например для дисков он показывает номер портиции, 0 – указывает на целый диск.

Утилиты lssf иioscan могут помочь в определении интерфейса к которому подключено то или иноеустройство. Например:

bash-2.04$ lssf/dev/dsk/c0t6d0

sdisk card instance 0 SCSItarget 6 SCSI LUN 0 section 0 at address 2/0/1.6.0 /dev/dsk/c0t6d0

bash-2.04$ lssf /dev/null

pseudo driver mm minor0x000002 /dev/null

 

Системная конфигурация

Утилита ioscan является одной из наиболее полезных утилит для просмотра системнойинформации. Ее можно использовать для построения аппаратного адреса устройства.В простейшем виде ioscanпоказывает аппартный путь (адрес), класс устройства иописание. Опции –u (используемые устройства) или –k (структуры ядра) даютбыстрый результат без сканирования оборудования.

# /usr/sbin/ioscan

H/W Path  Class                  Description

=============================================

           bc

1         graphics                        Graphics

2         ba                                             Core I/O Adapter

2/0/1            ext_bus                Built-in SCSI

2/0/1.2              target

2/0/1.2.0              disk              TOSHIBA CD-ROM XM-5401TA

2/0/1.5              target

2/0/1.5.0              disk              SEAGATE ST32151N

2/0/1.6              target

2/0/1.6.0              disk              SEAGATE ST32151N

2/0/1.7              target

2/0/1.7.0              ctl                 Initiator

2/0/2             lan                                    Built-inLAN

2/0/4            tty                                    Built-in RS-232C

2/0/6            ext_bus                Built-in Parallel Interface

2/0/8            audio                    Built-in Audio

2/0/10           pc                       Built-in Floppy Drive

2/0/11            ps2                     Built-in Keyboard

4         ba                                             EISA Adapter

5         ba                                             Core I/O Adapter

5/0/1            hil                                     Built-in HIL

5/0/2            tty                                    Built-in RS-232C

8          processor                    Processor

9         memory                        Memory

#

 

Использованиеключа –f  приводит к выдаче полной информации включая номер интерфейса илиинтерфейсной карты.

Class      I  H/W Path   Driver      S/W State   H/W Type     Description

================================================================

bc             0                   root              CLAIMED   BUS_NEXUS

graphics  0  1              graph3         CLAIMED    INTERFACE    Graphics

ba           0  2               bus_adapter CLAIMED   BUS_NEXUS   Core I/O Adapter

ext_bus   0  2/0/1        c720             CLAIMED    INTERFACE    Built-in SCSI

target      0  2/0/1.2      tgt                CLAIMED    DEVICE

disk         0  2/0/1.2.0   sdisk            CLAIMED    DEVICE        TOSHIBA CD-ROMXM-5401TA

target      1  2/0/1.5      tgt                CLAIMED    DEVICE

disk         1  2/0/1.5.0   sdisk            CLAIMED    DEVICE            SEAGATE ST32151N

target      2  2/0/1.6      tgt                CLAIMED    DEVICE

disk         2  2/0/1.6.0   sdisk            CLAIMED    DEVICE            SEAGATE ST32151N

target      3  2/0/1.7      tgt                 CLAIMED    DEVICE

ctl            0  2/0/1.7.0   sctl               CLAIMED    DEVICE            Initiator

lan           0  2/0/2        lan2              CLAIMED     INTERFACE     Built-in LAN

tty            0  2/0/4       asio0             CLAIMED     INTERFACE     Built-in RS-232C

ext_bus   1  2/0/6        CentIf           CLAIMED     INTERFACE     Built-in ParallelInterface

audio       0  2/0/8        audio            CLAIMED     INTERFACE     Built-in Audio

pc            0  2/0/10      fdc                CLAIMED     INTERFACE     Built-in Floppy Drive

ps2          0  2/0/11      ps2               CLAIMED     INTERFACE     Built-in Keyboard

ba            2  4              eisa              CLAIMED     BUS_NEXUS    EISA Adapter

ba            1  5              bus_adapter CLAIMED     BUS_NEXUS    Core I/O Adapter

hil            0  5/0/1         hil                CLAIMED     INTERFACE      Built-in HIL

tty            1  5/0/2        asio0            CLAIMED     INTERFACE      Built-in RS-232C

processor 0  8             processor     CLAIMED     PROCESSOR    Processor

memory    0  9             memory       CLAIMED     MEMORY           Memory

Использованиеключа –n приводит к тому что ioscan дополнительно выдает информацию о файле устройства:

target      0  2/0/1.2   tgt           CLAIMED   DEVICE

disk        0  2/0/1.2.0 sdisk       CLAIMED    DEVICE TOSHIBA CD-ROM XM-5401TA

                        /dev/dsk/c0t2d0   /dev/rdsk/c0t2d0

target     1  2/0/1.5   tgt            CLAIMED    DEVICE

disk        1  2/0/1.5.0 sdisk       CLAIMED    DEVICE  SEAGATE ST32151N

                        /dev/dsk/c0t5d0   /dev/rdsk/c0t5d0

В том случаекогда драйвер устройства не может быть автоматически сконфигурирован исоответствующий файл устройства оказывается несозданным приходится создаватьего вручную с помощью команд mkfs или mknod. Ядро взаимодействует с аппаратным обеспечением ассоциируя имядрайвера и аппаратный адрес. Стандартный интерфейс HP-UX к драйверампоставляется вместе с библиотекой /usr/conf/lib/libhp-ux.a. Ядрораспознает интерфейсные драйвера и драйвера устройств через младшие и старшиенгомера “прошитые“ в файлах устройств.


/>


 

 

Старший номер(major number)

 

Старший номер,как уже было сказано раньше является индексом в таблице переключателя устройствядра. Для нахождения правильного старшего номера можно воспользоватьсяпрограммой lsdev. Она считывает заголовки и список драйверов сконфигурированных вядре с ихними блочными и символьными старшими номерами. Номера выводятся вдесятичной форме, -1 означает либо то что устройство является модулем, драйвернесконфигурирован либо драйвер не поддерживает какогото из режимов (блочногоили символьного).

 

Младший номер(minor number)

 

Младший номеропределяет собой: расположение устройства и его драйвер-зависимые характеристики. Некоторые примеры младших номеров файлов устройств приведенониже. Более полную информацию можно почерпнуть  из руководства “ConfiguringHP-UX for Peripherals”.

SCSI Diskdevice. Рассмотрим что означает младший номер0x023000 у SCSI устройства.

bits

8-11

12-15

16-19

20-23

24-27

28-31

Binary

0000 0010 0011 0000 0000 0000

hex

2 3

0000 0010            Первые восемь бит идентифицируютинтерфейс или интерфейсную карту

                0011                       SCSIадрес диска

оставшиеся битынулевые.

SCSIленточный накопитель.

 

Bits 16-19

20-23

24-27

28-31

Binary

SCSI номер SCSI LUN

24 – поведение как у BSD систем при закрытии

25 – без перемотки

26 – конфигурационный метод (если 1 то биты от 27 до 31 означают индекс, если 0 то плотность записи)

27-31 Индекс/плотность записи

Создавать файлыустройств можно с помощью команды mknod.  Она имеет следующийсинтаксис:

                mknod file_name[c|b] major minor

 

например

            mknod /dev/null c 30x000002

4.8  Инсталирование периферии на примереленточного накопителя.

 

Прежде чемперейти к включению ленточного накопителя нужно убедится в том что его SCSI idне совпадает ни с одним из уже установленных устройств (диски, CD-ROM, …).После физического подключения накопителя к SCSI шине необходимо в ядро. Вслучае использования SAM для этого необходимо войти в раздел Kernel Configuration ->Drivers, в списке драйверов найти stape, и активировать его выбрав опцию Actions -> Add driverto Kernel. После выхода из окна конфигурации ядра SAMпредложит перестроить я дро и перегрузить компьютер, также создаст всенеобходимые файлы устройств в каталоге /dev/rmt. Всетоже самое можно сделать используя командыв hpux как это было указано выше. Вкачестве имя драйвера нужно использовать stape.

                # cd /stand/build

            #/usr/lbin/sysadm/system_prep –v –s system

            # vi system

            # /usr/sbin/mk_kernel –ssystem

            # mv /stand/system/stand/system.prev

            # mv /stand/vmunix/stand/vmunix.prev

            # mv /stand/build/system/stand/system.prev

            # mv/stand/build/vmunix_test /stand/vmunix

            # shutdown –r now

            # ioscan –f –C tape

           

Class     I  H/W Path  Driver      S/W State   H/W Type     Description

================================================================

tape      0  2/0/1.3.0 stape       CLAIMED     DEVICE       HP      HP35480A

# lsdev | grep tape

      205         -1         stape           tape

# mkdir /dev/rmt

# cd /dev/rmt

# mknod 0m c 205 0x003000

# mknod 0mn c 205 0x003040

# mknod 0mnb c 205 0x0030c0

Примечание:младшие номера для файла устройств можно узнать из файла/usr/include/sys/mtio.h (раздел  Masks for minor number bits )

4.9    Инсталирование софта

 

Для работы спрограммными пакетами существует целая серия команд. Эти команды носят названиеSD-UX команды. Приведем список основных из них:

                swintsall                 инсталированиепрограммных пакетов

                swremove              удалениепрограммных пакетов

                swlist                      списокинсталированого програмного обеспечения

                swacl                      просмотри модификация прав для защиты программных компонент

 Управлениепроцессами

Чтотакое процесс ?

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

·    програмнымиданными (переменные, массивы, записи …)

·    номеромпроцесса PID, номеромпроцесса родителя PPID,и номером группыпроцессов PGID

·    идентификаторомпользователя и группы PID,GID

·    информацией ооткрытых файлах

·    текущейрабочей директорией

Взаимоотношенияпроцессов

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

swapper)принадлежат к группам процессов.

ПроцессIDиродительский процесс ID.

Вовремя создания процесса HP-UXназначает емууникальный номер известный как процесс ID (PID), именно по этому номеру ядроидентифицирует процесс при выполнении системных вызовов. Помомо PID процесс имеет параметр как PPID (PID родителя). Используя программу psможно посмотреть этипараметры:

                $ps -f

                UID   PID  PPID   C    STIME TTY    TIME  COMMAND

                torry 3865  3699  2 13:35:43 ttyp3  0:00  ps -f

                torry 3699  3698  0 12:58:21 ttyp3  0:00  ksh

Идентификаторыпользователя и группы. (реальные и эффективные)

ПомимоPID и PPID процесс имеет еще рядидентификационных номеров:

                *реальный идентификатор пользователя (a real user ID)

                *реальный идентификатор  группы (a real group ID)

                *эффективный идентификатор пользователя (effective user ID)

                *эффективный идентификатор группы effective group ID.

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

                %id

            uid=513(torry) gid=20(users)

            %grep 513 /etc/passwd

            torry:EqqHevH:513:20:TorryHo,[44MY],474-1969 ,:/home/torry:/usr/bin/csh

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

Эффективныйидентификатор пользователя игруппы остаютьсяустановленными до:

                *окончания процесса.

 

*пока они не заменяться при выполнении системного вызова exec() программы c   

   установленными битами setuid или setgid.

*пока эффективный, реальный или сохраненные идентификаторы группы и             пользователя не будут установлены системными вызовами setuid(), setgid(),setresuid().

Группыпроцессов

Каждыйпроцесс за исключением системных процессов таких как  init и swapperпринадлежат к группе процессов. Когда созхдается задание, шелл присваивает всемпроцессам в задании одну и туже группу процессов. Сигналы при этом могутраспостраняться на все процессы в группе, в этом и заключается преимуществоуправления заданиями. Каждая группа процессов идентифицируется целым числомкоторое называется ProcessGroup ID (PGID). PGID угруппы процессов равен PIDлидера группы –создателя группы. Все процессы в группе имеют одинаковый GID. PGID не может быть использовансистемой пока живет группа процессов. Время жизни группы процессов определяетсякак период времени между созданием группы и когда процесс покидает группу.Процесс покидает группу если:

                *когда другой процесс вызывает wait() или waitpid() функции на неактивныйпроцесс.

                *при вызове setsid или setpgid системных вызовов.

Спискидоступа группы

Каждыйпроцесс имеет до NGROUPS_MAX списков групп  к которым он может принадлежать.

NGROUPS_MAXопределено в /usr/include/limits.h, и обычно равняется 20. Процессу разрешаетсяполучать доступ к файлам с групповымим правами любой из списка групп. Спискидоступа. Групповые права доступа контролируются командой chgrp.

Сессии

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

Процессыи терминальноевзаимодействие.

Каждаясессия имеет управляющий терминал. Лидер сессии подключенный к управляющемутерминалу называется еще контрольным процессом. Исключением являются процессы-демоны (cron,inetd, …) которые неимеют управляющего терминала. Все процессы принадлежащих к одной сессиииспользуют управляющий терминал как стандартное устройство ввода, вывода иошибок. В любой момент времени лишь одна группа процессов в сессии можетнаходится не в фоновом выполнении и она имеет исключительные права на работу суправляющим терминалом.

 

Попыткичтения фоновой группой процессов

Еслипроцесс из фоновой группы пытается читать из управляющего терминала, этойгруппе посылается сигнал SIGTTIN, который по умолчанию приостанавливаетпроцесс. В любом случае системный вызов read() возвращает –1.

Попыткичтения фоновой группой процессов

Еслипроцесс в фоновой группе пытается записать в управляющий терминал, группапроцессов получает при этом сигнал SIGTTOU, который по умолчанию останавливаетпроцесс.

Созданиепроцессов

Одинпроцесс может создать другой через:

                *паралельное выполнение другой программы

               

*выполнениедругой программы с ожиданием ее окончания

Насистемном уровне процесс создается во время вызова системного вызова fork() или vfork().

Системныйвызов fork()

Этотсистемный вызов создает новый процесс путем клонирования существующего. Встарых реализациях HP-UX, система копировала полностью сегмент данных процесса,что негативно сказывалось на скорости и эффективности работы системы. Сейчасреализуется механизм известный как copy-on-write (на самом деле HP-UX реализует механизм copy-on-access), который позволяет использоватьобщие страницы памяти до момента записи.

Системныйвызов vfork()

Приложениякоторым нужно создать независимый процесс могут делать это более эффективноесли вместо fork()будут использовать vfork().Использование vfork оправданотолько когда процесс потомок сразуже выполняет exec() или _exit() системныевызовы.  При использовании vfork, потомок использует виртуальное адресное пространствородителя, поэтому оба процесса не могут работать одновременно. Процесс родительпри этом засыпает.

Системныйвызов exec()

Оченьчасто после вызова fork()процесс запускает exec() на выполнениедругой программы, приэтом происходит перезапись сегмента кода и данных новым процессом.

 

Открытыефайлы

Присистемных вызовах fork()и vfork() происходит наследование процессомпотомков всех открытых файловых дискрипторов. Для системных параметраопределяют ограничение на количество открытых файлов на процесс: maxfiles и maxfiles_lim. Параметр maxfiles определяетмягкий лимит как много открытых файлов может иметь процесс. Мягкий лимитнаследуется после вызовов fork()vfork(). Параметр maxfiles_lim опреджеляет жесткий лимит наколичество открытых файлов на один процесс. maxfilesдолжен быть меньше или равен  maxfiles_lim. Мягкий лимит процесс наследуетот своего родителя, который может быть уменьшен или увеличен до жесткого лимита(такое может сделать только процесс с правами администратора) с использованиемсистемного вызова setrlimit().

 

Завершениепроцессов

                                               

Процессзавершается если:

                *Он успешно окончил свое выполнение

                *Процесс завершил.себя вызвав системный вызов exit()

                *Процесс получил сигнал на с фатальным действием

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

Командыуправления процессами.

Управлятьпроцессами можно либо с использованием команд HP-UX либо с использованием утилиты SAM. Наиболее часто используемыекоманды будут описаны ниже.

Командаps(process status)

Командаps показывает следующие параметрыпроцессов:

                *идентификатор пользователя User ID

                *идентификатор процесса Process ID

                *идентификатор родительского процессаParent process ID

                *командную строку породившую процесс

                *терминал с которого была запущена комманда

                *время (relatime CPU) котороебыло затрачено процессором на выполнение процесса.

Запущеннаябез опций она показывает process ID, terminal ID (tty), real CPU time usage, имякоманды которую запустил на выполнение пользователь. С ключем –f  ps также показывает имяпользователя, PPID,и время с моментакогда процесс был fork-нут.

$ ps -f

     UID  PID  PPID  C    STIME TTY      TIME COMMAND

  torry  3286  2016  9 16:19:03 ttyp1      0:00 ps -f

  torry  2570525649  0 08:47:58 ttyp1    0:02 -ksh  /home/torry [ksh]

  torry  2016  25705 0 15:13:02 ttyp1     0:24 vi    processes.tag

Опция–e приводит к выдаче информации овсех активных процессах в системе. Опция -l (long) дополнительно показываетсостояние процесса (S), параметр nice (NI), адрес процесса в памяти (ADDR),приоритет (PRI), и размер в блоках (SZ) образа процесса.

$ ps -l

F S  UID   PID  PPID  C PRI NI     ADDR   SZ    WCHAN TTY   TIME COMD

1 R   51311009  7793  5 179 20   d6e200   16          ttyu4 0:00 ps

1 S     0 7792   133 15 154 20      e06100   13   214fb0 ttyu4 0:00 rlogind

1 S   513 7793  7792 16 168 20   df5a80    52 7ffe6000 ttyu4 0:00 csh

Относительныеприоритеты процессов — nice и renice

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

Командаrenice позволяет  изменять приоритетыуже запущеных процессов.

Программыдля мониторинга производительности системы

top

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

sar

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

 

vmstat

Выдаетинформацию об использовании виртуальной памяти и активность CPU.

iostat

Выдаетинформацию об дисковой активности ввода-вывода, терминальной активностистатистику CPU.

Управление процессами и ядро системы

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

Приоритетыпроцесса

 

Всепроцессы в HP-UXмогут находится вдвух режимах:пользовательскийрежим и режим ядра. Когда процесс переключается в режим ядра (например присистемном вызове) он исполняет  код ядра и пользуется стеком ядра. Взависимости от приоритета и наличия других процессов процесса планировцикпроцессов может выделять ему больше или меньше квантов процессорного времени.

Приоритетыможно разделить на две части: диапазон POSIX standard приоритетов и диапазхон HP-UXприоритетов.POSIX standard приоритеты всегда выше чем все другие HP-UX приоритеты. Процесскоторый имеет меньшее числовое значение приоритета имеет преимущество привыполнении над процессом с большим цифровым значением приоритета. Следующийсписок выводит по категориям диапазоны приоритетов от большого к маленькому:

   1.  POSIX standard приоритеты (системный параметр)

POSIXstandard приоритеты, известные как RTSCHED приоритеты, являются самыми

высокимиприоритетами. Количество RTSCHED приоритетов есть системныйпараметр

                (rtsched_numpri),устанавливаемый между 32 и 512 (default 32).

   

   2.  приоритеты реального времени (0-127)

                Зарезервированыдля процессов SCHED_RTPRIO стартующих с системного вызова

rtprio()

   

   3.  Системные приоритеты (128-177)

                Используютсясистемными процессами.

   

   4.  Пользовательские приоритеты (178-255)

                Устанавливаютсяпользовательским процессам.

Ядроможет изменять приоритеты процессов разделения времени (128-255) но непроцессов реального времени (0-127).

Состояниепроцесса

Впроцессе своей жизни процесс может менять несколько раз свое состояние.Процессыразмиещаются в очередях выполнения планировщика процесса в соответствии с ихсостоянием как определено в файле /usr/include/sys/proc.h. События, такие какполучение сигнала могут переводить процесс из одного состояния в другое.

Процессможет находится в одном из следующих состояний:

                *idle – процесс простаивает в очереди выполнения планировщика.

* run -    процесс выполняется вочереди планировщика либо в пользовательском режиме либо в режиме ядра.

                *stopped – процесс остановлен сигналом либо процессом родителем.

*sleep – процесс не выполняется пока он находится в спящем состоянии в очереди

(например он ждет окончанияоперации ввода-вывода)

*zombie – процесс уже фактически не существует, но так как он оставил дляродителя

некоторыенепрочитанные данные о своем выполнении он не может осуществить завершение.

Когдапрограмма запускает прооцесс, ядро выделяет для него сроку из своей таблицы процессови процесс находится в idleсостоянии. Затемпосле получения ресурсови попадания в очередь он находится в состоянии run. Если процесс получкает сигналSIGSTOP или его переводлят в режи трассировки, он переходит в stop состояние.После получения сигнала SIGCONT signal, процесс возвращается в состояние run. Если запущеный процесс  ждетосвобождение какихто ресурсов (семафор) или завершения операции вво-да вывода –он переходит в спящее состояние. Спящий процесс может быть отсваплен в первуюочередь.Как только процесс заканчивает свою работу он переходит в состояниеzombie.


1. Файловаясистема HFS.

2. Менеджер логических дисков LVM

3. Особенности файловой системы VxFS

4. Операциинад файловой системой

 

10.      1. Файловая система HFS.

Одной изиспольуемых HP-UX файловых систем является High Performance File System (HPFS,HFS) известная также как MCKusic или BSD файловая система. Файловая система этоструктура данных существующая на дисковых устройствах позволяющая сохранять иполучать доступ к информации хранящейся в ней в иерархическом виде. Существуетряд причин исходя из которых информацию хранящуюся на дисковых носителяхприходится организовывать в виде нескольких файловых систем, к ним можнноотнестиЖ

·    Если суммарный обьем данных превышает обьемподдерживаемый одной файловой системой

·    Для увеличения производительности системы,разнося данные имеющие разную структуру (средний размер файла, наличияограничения на дисковое пространство для пользователей) на разные файловые системыили данные к которым идет частый доступ разносятся на разные физическиеустройства.

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

В общих чертахфайловую систему HP-UX состоит из дерева каталогов (директорий) расположеныхиерархически с корневым  каталогом в вершине. Все файловые системы имеютсвойство “монтируемости” заключающееся в том что любая файловая система можетбыть смонтирована  (прикреплена) к существующей директории. Любуюсмонтированную файловую систему кроме корневой можно размонтировать.Монтирование корневой файловой системы осуществляет ядро, сразу же послезагрузки.

Структура файловой системы HFS

 

Все HFS файловыесистемы имеют в своем составе следующие структуры:

·    Главный суперблок

·    Набор групп цилиндров

Структуры данныхиспользуемые в файловой системе содержатся в файле /usr/include/sys/fs.h. Первичный суперблок это непрерывный блок данных размеров 8К размещающийсяперед началом файловой системы который содержит статическую информацию офайловой системы в момент ее создания (или последнего расширения):

·    Размер файловой системы

·    Количество inodes которые может хранить файловаясистема

·    Позиция свободного места на диске

·    Количество групп цилинров

·    Позиции суперблоков, крупп цилиндро, блоковinodes и блоков данных

·    Размер блока и фрагмента

Главный суперблок

 

Помимо этогоглавный суперблок содержит вспомагательную информацию о том когда последний размонтировалась, модифицировалась и проверялась файловая система. Потому что главный суперблок содержит исключительно важную информацию о файловой системе,HP-UX всегда хранит его копии в каждой группе цилиндров. Одна из копий загружаетсяв память после загрузки.  Главный суперблок размещается в самом начале файловойсистемы и каждая группа цилиндпров имеет имеет свою копию суперблока. Такимобразом достигается резервирование критически важной информации. Суперблокигрупп цилиндров на диске обновляются каждый раз когда выполняется команда sync или когда файловая система размонтируется. В файле /etc/sbtab присутствует запись положения всех суперблоков файловых систем.

Группы цилиндров

Группа цилиндров– это группа дисковых цилиндров идущих подряд. Цилиндр представляет собойсовокупность треков каждый из которых размещен на одинаковом расстоянии отцентра поверхности дискового носителя. Все треки в цилиндрк доступны за однуоперацию чтения/записи дисковой головки. В целях повышения производительности,цилиндры группируются (по умолчанию 16 цилиндров) в группы цилиндров. Каждаягруппа цилиндров имеет свой набор inodes и свою карту свободного пространства вгруппе. Такая организация хранения позволяеет минимизировать время поискаданных файла в группе цилиндров. Приведем структуру группы цилиндров:

Структура

Размер

Главный суперблок 1

8 Кб Запасной суперблок 8 Кб Информация группы цилиндров 1 блок (4 Кб или 8 Кб) Таблица inodes

Переменный 2

Блоки данных

0 или более блоков 3

                               

                                1 только для первой группы цилиндров

                                2 см. раздел inodes

                                3 см. раздел блоки данных

Разделинформации о группе цилиндров хранит динамические параметры группы цилиндров,такие как:

·    Количество inodes и блоков данных в группецилиндров

·    Указатели на последний использованый блок, фрагмент и inode

·    Количество свободных фрагментов

·    Карту использованных inodes

·    Карту свободных блоков

Информация огруппе цилиндров занимет один блок (размер блока определяется присозданиифайловой системы и обычно равен либо четырем либо восьми килобайтам).

Inodes

Кроме храненияинформации о состоянии файловой системы, группы цилиндров хранят ключевуюинформацию о inodes файловой системы – индексам файлов данных (и директорий).Дисковая inode содержит следующую информацию о файле:

·    Тип файла и атрибуты доступа

·    Количество ссылок на файл

·    Владельца и группу файла

·    Размер файла в байтах

·    Временные метки (время последнего обращения,последней модификации)

·    Указатели на блоки файловой системы содержащихданные

Когда файлоткрыт процессом, информация о его inode находится в памяти ядра (in-coreinode) в сочетании с доаполнительными атрибутами, такими как:

·    Статус inode, включая факт блокировки inode,отличается ли in-core inode от дисковой inode в следствие модификации файла,является ли файл точкой монтирования файловой системы …

·    Цифровой адрес файловой системы содержащий файл

·    Указатель на другие in-core inodes выстроенные ввиде списка.

Если inodeуказывает на специальный (не регулярный) файл, то с ним ассоциируютсядополнительные параметры, такие как является ли файл  FIFO или pipe, символьнымили блочным устройством или же директорией. Когда создается файловая система(команда newfs),  создаются inodes. Количество inodes ограничивает количествофайлов в файловой системе. При создании файловой системы по умолчанию системаподразумевает что в среднем на одну inode припадает 2048 байт данных, что вбольшинстве случаев является более чем достаточным количеством. Иногда,возможна ситуация когда ядро сигнализирует об ошибке переполнения таблицыin-core inodes (inode: table is full). В этом случае необходимо изменитьразмер этой таблицы увеличив системный параметр ядра ninode.

Блоки данных

 

Послесуперблока, данных о группе цилиндров и таблице inodes идет местозарезервированное под блоки данных. HP-UX поддерживает блоки размером 4,8,16,32и 64Кб.  Размер блока задается при создании файловой системы (команда newfs). Большойразмер блока дает выиграш в скорости передачи данных при работе с большимифайламино при этом является причиной неэффективного использования дисковогопространства приработе с маленькими (которых большинство в HP-UX) файлами.Поэтому в целях экономии дискового пространства блок может быть разделен нанесколько фрагментов (1,2 или 4Кб). Размер фрагмента также определяется присоздании файловой системы и не может иметь размер меньше чем одна восьмаяразмера блока.

11.      />/>/>/>/>/>

1

2

.

.

12

  />/>/>/>/>/>/>

Третий уровень ссылок

 

Второй уровень ссылок

 

Первый уровень ссылок

 

Данные файла

  />/>/>/>/>/>/>/>/>

Блоки адресуемые      1 напрямую                    2

                                   .

                                 .

                                 .

                                12

 

Временные метки

 

Размер файла в байтах

 

Владелец / группа

 

Ссылки на файл

  Доступ к блокам данных/> /> /> /> />

Тип файла и атрибуты

  /> /> /> />

Как было указановыше, inode содержит указатель на блоки данных. В зависимости от размера файладанные содержащиеся в файлах могут быть доступны напрямую через указателисодержащиеся в inode, либо через двойную или тройную ссылку. Первый уровеньссылок позволяет адресовать непосредственно из inode 12 блоков данных,  если этогоне достаточно для адресации файла соответствующего размера то 12-й блокиспользуется для адресации второго уровня. Размер ссылки составляет 4 байта,поэтому при размере блока в 4096 байт он может адресовать 1024 блока данных.Аналогичным образом осуществляется адресация третьего уровня. При этомограничение на максимальный размер файла практически снимается. Помимоуказателя на блок, inode хранит указатель на фрагмент. Этот указатель можетбыть интерпретирован как ссылка на целый блок или оддин или несколько егофрагментов. Если обьем данных файла такой что последний блок остается неполностью заполненным то при этом используются фрагмент(ы). Рассмотрим этотслучай на примере 20К файла хранимого в 8К блоках. Файл будет хранится в 2-хполных блоках и 4-х фрагментах. Этот случай изображен на рисунке:

/> /> /> /> /> /> /> /> /> /> /> <td/> /> <td/> /> <td/> /> />

                                 Размер файла

/>                                                                                                       8             15   24           31   40  43    46

/> /> /> /> /> /> <td/> /> />

/>/>                                                                1

                               

/>                                                                2

/>          блоки адреceсуемые              3

               напрямую с inode

                                                                4

                                                           12

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

Распределениедискового места.

 

Свободное место надиске определяется через битовую карту ассоциированную с каждой группойцилиндров. Битовая карта содержит один бит для каждого фрагмента. Дляопределения свободен ли блок, система проверяет смежные фрагменты. Пример куска битовой карты для файловойсистемы использующей 1024-х байтные фрагменты и 8192-х байтные блоки показанниже:

Битовая карта 00000000 00000011 11111100 11111111 Номера фрагментов 0-7 8-15 16-23 24-31 Номера блоков 1 2 3

Фрагменты сномерами 14-21 в этом примере сободны (отмечены 1), а фрагменты 0-13и 22-23 уже заняты. Любые восемь подряд идущих фрагментов не могут составлятьблок, только восемь фрагментов выровненных по границе блока могут составитьблок. HP-UX пытается положить всевсе файлы находящиеся в одной директории в одну и туже группу цилиндров.Новосозданные директории помещаются в те группы цилиндров где наибольшееколичество свободных inodes и наименьшее количестводиректорий. Если размер файла превішает порог определяемій параметром maxbpg (определяется при создании файловойсистемі и может меняться в дальнейшем) то HP-UX начинает выделять свободные блоки из другойгруппы цилиндров. Это позволяет более тесно группировать в одну группуцилиндров файлы находящиеся в одной директории  путем размазывания большихфайлов по нескольким группам цилинров.

Модификация файлов в HP-UX

 

Каждій раз когдапроисходит запись в файл, данные сначала записываются в буферный кэш находящийся в памяти. Физический диск обновляется ассинхроннопо отношению к кэшу. Изменение данныхна диске принадлежащие к определенной inode происходит позже, за исключериемесли файл біл откріт в синхронном режиме (параметр O_SYNC O_SYNCIO в системныхвызовах open() и fcntl()). Еслисистема останавливается без сброса буферов на диск то файловая система приходитв сосотояние с нарушеной целостностью. В єтом случае необходимо еевосстановление утилитой fsck. Команда sync может быть использована для принудительногосброса буферов на диск в любой момент времени. Системнійдемон syncer выполняетпериодический сброс буферов на диск. Приведем список изменений происходящих вфаловой системе при выполнении некоторых основных операций над ней:

                Главный суперблок                          сбрасываетсяна диск при выполнениии команды

umount или команды sync при условии что файловая

система быламодифицирована

                Inodes                                                    взависимости от параметра ядра fs_asyncинформация

                                                                                Обновляетсялибо синхронно либо ассинхронно по

Отношению к буферному кєшу

                Блокиданных                                     In-core блоки (директории, файлы, пайпы, симлинки,

FIFO) записываются на диск после модификации. Блоки данных файлов буферизируются.Физически запись на диск происходит когда выполняется команда sync или системный вызов fsync() или непосредственно послемодификации если на файл при открытии установлен флаг O_SYNC.

Информацияо группе                      эта информациясбрасывается на диск после цилиндров                                     выполнения sync (fsync).

Замечание: команда reboot–n перегружает систему без сбросабуферов на диск. Эту команду нужно использовать послевыполнения проверки и устранения сбоев корневой файлой системы. Остальныефайловые системы необходимо проверять только в отмонтированном состоянии.

 

Менджер логических дисков LVM

 

Перед появлениемHP-UX 10.* управление дисками в сриях HP 800 и HP 700 осуществлялось различнымобразом. В серии 800 была возможность разбивки диска на жестко определенныепартиции, а также управление через LVM. В серии 700 таких возможностей не было,и единственное что можно было использовать – так это использование целого дискадля создания файловой системы. С появлением HP-UX 10.* ситуация радикальноизменилась, LVM стал доступен на обеих сериях и является рекомендуемыминструментом для работы с файловыми системами. Он представляет собой псевдодрайверядра системы эмулирующий логические диски.

Что такоеLogical Volumes и в каких случаях их следует использовать?

 

Logical Volumes(LV) это набор дисковых участков с одного или более дисков организованных втаком виде, что операционная система видит их как один логический диск.  Как ифизические дискиони могут быть использованы для поддержки файловых систем, rawобластей данных, swap или dump областей. Использование LV оправдано в случаяхбольших файловых систем которые не умещаются на одном диске и (или) нуждаются впоследующем расширении а также в случаях когда необходимо организоватьрезервирование (зеркалирование) данных или когда к файловой системепредъявляются жесткие требования по производительности.

/> /> /> /> /> /> /> /> /> <td/> /> <td/> /> />

/>

 

/>

/>

 

/>

   Physical Volumes

        (диски)

/> /> /> /> /> /> /> /> /> /> />

/dev/dsk/c0t5d0

  <td/>

/dev/dsk/c0t6d0

  <td/>

/dev/dsk/c0t7d0

  /> /> <td/> /> /> /> /> />

     VolumeGroups

       (пулдисков)

/>


Дляиспользования LVM диски должны быть инициализированны как physical volumes.Physical volumes идентифицируются именами ссответствующихфайлов-устройств дисков /dev/dsk/cntndnи/dev/rdsk/cntndn.Затем из одного или нескольких дисков собирается volumegroup.  Один физический диск может принадлежать только к одной volumegroup. Максимальное число volume group которое может быть в системеопределяется параметром maxvgs. Одна volume group может содержать неболее 255 физических дисков. Дисковое пространство из volume group распределяетсямежду одной или несколькими logical volumes. Дисковое пространство из logicalvolumes может быть использовано для создания файловой системы, под swap илиdump области.  LVM разбивает каждый диск на набор адресуемых блоков называемых physicalextents. Их размер определяется во время создания volume group иодинаков для всех дисков входящих в volumes group. Размер physicalextents варьируется от 1 до 256 Мб, по умолчанию он равен 4Мб. Базовымблоком для адресации logical volumes является logical extent, оннапрямую отображается в physical extents. В HP-UX команды показывающие этиотображения имеют названия pvdisplay иlvdisplay:

# pvdisplay/dev/dsk/c0t5d0

— Physical volumes ---

PVName                              /dev/dsk/c0t5d0

VGName                              /dev/vg00

PVStatus                              available

Allocatable                           yes

VGDA                                    2

CurLV                                   9

PE Size(Mbytes)                 4

TotalPE                                 511

FreePE                                 81

AllocatedPE                         430

StalePE                                0

IO Timeout(Seconds)        default

# lvdisplay/dev/vg00/lvol1

— Logicalvolumes ---

LVName                               /dev/vg00/lvol1

VGName                              /dev/vg00

LVPermission                     read/write

LVStatus                               available/syncd

Mirrorcopies                        0

ConsistencyRecovery       MWC

Schedule                              parallel

LV Size(Mbytes)                 48

CurrentLE                            12

AllocatedPE                         12

Stripes                                  0

Stripe Size(Kbytes)            0

Badblock                              off

Allocation                             strict/contiguous

Если logicalvolumes используется для корневой (root) файловой системы, первичной swapобласти или dump области, physical extents должны распределяться методомcontiguous. Это означает что между они должны следовать непрерывно наодном физическом диске и между ними не должно возникать прпомежутков. Другие logicalvolumes использующиеся для некорневых файловых систем могут не следоватьэтому ограничению.

Для определения требуемого объема  logical volume необходимогодля создания файловой системы можно  использовать следующую диаграмму:

/>


               

Управление Logical Volumes (LV)

 

Системнаяутилита SAM позволяет выполнять большинство но не все операции над LV. К темзадачам с которыми она справляется можно отнести:

·    Создание и удаление volume groups.

·    Добавление и удаление дисков из volume groups.

·    Создание, удаление и модификация logicalvolumes.

·    Создание и увеличение обьема файловых системнаходящихся на logical volumes.

·    Cоздание и модификация swap и dump logicalvolumes.

Для этого, послезапуска SAM нужно войти в раздел “Disks and file systems”  а затем в один изнужных подразделов. Все дальнейшие действия выполняются с использованиемграфической оболочки и являются интуитивно понятными. Все тоже самое можновыполнить используя команды HP-UX.

Созданиеphysical volume (PV).

            pvcreate /dev/rdsk/c0t6d0

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

Помещение PVв одну из volume groups (VG)

 

Если необходимосоздать новую VG, то в самом начале нужно сделать директорию дляфайлов-устройств отвечающих за данную VG:

            mkdir /dev/vgnn

                cd /dev/vgnn

Затем нужносоздать необходимые файлы устройств:

                mknod/dev/vgnn/groupc 64 0xNN0000

 

В качествестаршего номера устройства всегда нужно использовать 64, 0xNN0000 является младшим номером устройств и NN представляетсобой уникальный среди всех VG номер. Теперь можно приступать к созданию VG:

            vgcreate /dev/vgnn/dev/dsk/c0t6d0 …

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

СозданиеLogical Volume.

               

lvcreate /dev/vgNN

После чегопоявится блочные и символьные файлы устройств  /dev/vgNN/lvoln и /dev/vgNN/rlvoln. LVM сам выберет подходящий номер n. Длясоздания LV с именем отличным от того что создается по умолчанию нужновоспользоваться опцией –n. Данный LV будет иметь нулевой размер, в дальнейшемего можно увеличить. Также указав опцию –L можно создать LV  заранеенеобходимого размера (в Мб), при этом реальный размер LV будет округлен в большуюсторону и кратен целому количеству physical extents.

Задачи котоыеможно выполнить только с использованием комманд HP-UX

 

К ним можноотнести:

·    Расширение LV за счет определенного диска

·    Создание корневой (root) VG и корневого LV

·    Резервное копирование и восстановлениеконфигурации VG

·    Перемещение данных с одного LVM диска на другой

·    Уменьшение размера LV

Расширение LVза счет определенного диска

 

Допустим имеетсянеобходимость создать LV на 120Мб, причем первые 60 Мб необходимо взять содного диска а оставшиеся 60 с другого. Так поступают часто в случаях когданеобходимо повысить производительность файловой системы за счет паралельногоиспользования нескольких дисков. Вначале создаем LV нулевого размера:

            lvcreate –n lvol11/dev/vg00

затем выполняемнеобходимые расширение ее обьема за счет определенных дисков:

            lvextend –L 60/dev/vg00/lvol11 /dev/dsk/c0t5d0

            lvextend –L 60/dev/vg00/lvol11 /dev/dsk/c0t6d0


Создание корневой VG и корневого LV

 

Корневой VG этоVG который используется системой при загрузке. На нем размещается LV содержащийкорневую файловую систему, первичный swap и dump области. Ниже приводятся этапыпоследовательного создания корневого VG. Во-первых создается PV на которомразмещается LIF раздел в котором находятся загрузочные утилиты. Для этого вкоманде pvcreate используется опция -B:

                pvcreate           -B/dev/rdsk/c0t6d0

Создаем корневойLV:

                vgcreate /dev/vgroot/dev/dsk/c0t6d0

               

Помещаемзагрузочные утилиты в LIF область VG:

            mkboot /dev/rdsk/c0t6d0

Записываем в LIFобласть AUTO файл:

                mkboot –a “hpux(;0)/stand/vmunix” /dev/rdsk/c0t6d0

После выполнениявсех этих действий корневая VG готова к созданию на ней LV. Корневой LV долженбыть самым первым в этой VG, и следовать сразу за boot областью. Это значит чтоон должен начинаться с нулевого physical extent. Теперь можно переходить ксозданию корневого LV, при его создании нужно включить опцию “смежный LV” (-C)и запретить перемещение bad блоков (-r):

            lvcreate –C y –r n –n root/dev/vgroot

            lvextend –L 160/dev/vgroot/root /dev/dsk/c0t6d0

В конеценеобходимо пометить сосзданный LV как корневой:

                lvlnboot –r/dev/vgroot/root

Резервное копирование исвосстановление конфигурации Volume Groups

 

Для создания резервной копии конфигурации VG нужно воспользоватьсякомандой vgcfgbackup. Пежде чем выполнять эту команду нужно убедится что все LV в даннойVG находятся в состоянии available/syncd (для этого можно воспользоватьсякомандой vgdisplay–v). По умолчанию команда vgcfgbackup сохраняет конфигурационый файл VG под именем /etc/lvmconf/volume_group_name.conf. Это имя можно переопределить задав опцию –f.

                Восстановлениеконфигурации выполняется командой vgcfgrestore. Перед этимнеобходимо предварительно деактивировать данную VG командой vgchange. Например:

            vgchange –a n /dev/vg01

            vgcfgrestore –n /dev/vg01/dev/rdsk/c0t6d0

Выполнение этихкоманд приведет к восстновлению информации о VG vg01 из файла/etc/lvmconf/vg01.conf. Затем необходимо активировать данную VG:

            vgchange –a y /dev/vg01

Перемещение и переконфигурированиедисков

 

В жизни могутвозникнуть ситуации при которых необходимо:

·    Переместить диск входящий в состав VG на другоеположение в пределах системы.

·    Переместить целую VG с одной системы на другую.

Файл /etc/lvmtabсодержит информацию о отображении LVM дисков на соответствующие VG. При любыхизменениях связанных с дисками и VG в системе этот файл изменяется, однако этоне текстовый файл и напрямую его редактировать нельзя. Вместо этого нужнопользоваться программами vgexport и vgimport.

Перемещениедиска в системе.

 

Для перемещениядиска в системе на новое место необходимо выполнить следующее:

·    Создать резервную копию конфигурации VG вкоторую входит диск и данных хранящихся на диске

·    Деактивировать VG в состав которой входит диск:

vgchange –a n /dev/vgxxx

·    Удалить запись ассоциированную с этим диском из/etc/lmvtab а также файлы устройств из каталога /dev/vgxxx

vgexport /dev/vgxxx

·    Создать заново VG, и добавить запись в/etc/lvmtab

mkdir /dev/vgxxx

mknod /dev/vgxxx/lvolNc 64 0x010000

vgimport /dev/vgxxx/dev/dsk/cntndn

·    Активировать вньовь ипортированную VG

vgchange –a y /dev/vgxxx

·    Создать резервную копию конфигурации VG

vgcfgbackup /dev/vgxxx

Перемещение диска между системами

 

Для перемещениядиска с одного места на другое между двумя системами необходимо выполнитьследующие действия:

·    Деактивировать VG

vgchange –a n /dev/vgxxx

·    Удалить информацио о VG из /etc/lvmtab указавимя map файла который будет содержать удаляемую информацию (он содержит такжеимена удаляемых LV из VG)

vgexport –p –v –m plan_mapvgxxx

просмотрев map_file и убедившись в правильности можно выполнитьреальное удаление

                                vgexport –v –m plan_mapvgxxx

·    Переносим map_file на новую систему,останавливаем старую систему, переносим диски на новую.

·    На новой системе создаем VG

mkdir /dev/vgxxx

cd /dev/vgxxx

mknod /dev/vgxxx c 640x080000

·    Импортируем новую конфигурацию. Для просмотраиспользуется опция –p, для выполнения реального импорта она должнаотстутствовать: (предполагается что в новую систему переносились диски которыераспозхнались как /dev/dskc0t2d0 /dev/c0t3d0)

vgimport –p –v –m plan_map/dev/vgxxx /dev/dskc0t2d0 /dev/c0t3d0

·    Активируем VG

vgchange –a y /dev/vgxxx

 

Переносданных на другой physical volume.

Для переносаданных содержащихся в LV с одного диска на другой необходимо воспользоватьсякомандой pvmove. Например для переноса данных из LV /dev/vg01/lvo1 с диска/dev/dsk/c0t0d0 на /dev/c0t1d0:

                pvmove –n /dev/vg01/lvol1/dev/dsk/c0t0d0  /dev/c0t1d0

Для полногопереноса данных с одного диска на другой можно воспользоваться:

                pvmove /dev/dsk/c0t0d0 /dev/c0t1d0

Уменьшениеобьема Logical Volumes

Для уменьшенияобьема LV используется команда lvreduce. Однако в этом случае данные хранящиеся в файловой системе на этомLV будут потеряны, поэтому необходимо предварительное резервное копирование.Также можно воспользоваться другой техникой – вначале удалить LV командой lvremove, а затем создать LV требуемого размера командой lvcreate.

3. Особенности файловой системы VxFS

VxFS является HP-UX реализацией  журнальной файловой системыизвестной как JFS на базе версии корпорации VERITAS. Прежние версии HP-UX(меньше 10.*) имели в своем арсенале лишь HFS, начиная с 10.01 появиласьдополнительная опция на использование VxFS в качестве файловой системы. ОднакоVxFS не может быть использована как файловая система для раздела /stand изкоторого происходит зщагрузка ядра. В ранних версиях 10-го релиза HP-UX она также не могла быть использована для корневой файловой системы. По  сравнению сHFS имеет меньшее время восстановление при сбоях и имеет повышенуюпроизводительность на больших объемах данных, т.к. блок используемый ею можетсостоять из множества физических блоков. Т.к. это журнальная файловая системато она позволяет вести online backup. Однако в отличии от HFS она потребляетбольше памяти.

В стандартной поставке HP-UX включены лишь базовые элементы VxFS.Дополнительные функциональные возможности возможны только при использованииотдельного пакета под названием HP OnlineJFS.

 

4. Операции над файловой системой

 

Все операции надфайловой системой могут быть произведены с использованием системной утилиты SAMили напрямую с использованием команд HP-UX. Файловые системы могут создаватьсяна LVM и не LVM дисках. Использование LVM дисков является болеепредпочтительным.

Создание файловой системы

 

Для созданияфайловых систем используют команду newfs. Она имеет следующийсинтаксис:

newfs [-F FStype][-o specific_options] [-V] special

где

                special                                  имя символьного файла-стройства

                FSType                                 типфайловой системы (HFS, VxFS)

                specific_options             опции специфические для данного типа файловой системы

Если не указыватьопцию –F то тип файловой системы берется из файла /etc/fstab,если в нем нет соответствующей special строки то используется тиип по умолчанию из файла /etc/defaults/fs. При создании HFS возможно использование опций –L (длинные имекнафайлов 255 знаков) или –S (короткие имена файлов 14 знаков). В VxFS все именафайлов длинные.  После создания файловой системы ее можно монтировать.

 

Монтирование и демонтированиефайловых систем

 

Для монтированияфайловых систем или получения информации о смонтированных файловых системахиспользуется команда mount.Монтирование заключается в присоединении файловойсистемы к директории. Примеры использования команды mount:

                mount –a                                              монтирование всехфайловых систем указанных в

файле /etc/fstab

mount /tmp                                         монтирование на каталог /tmp соответствующей из /etc/fstab файловой системы.

 

mount/dev/vg00/lvol1  /tmp        монтирование файловойсистемы находящейся в LV /dev/vg00/lvol1 в каталог /tmp

mount                                                    выдачаинформации о смонтированных файловых системах

После загрузкисистемы все файловые системы перечисленные в файле /etc/fstabавтоматически монтируются. Список всех смонтированных в данный момент файловыхсистем находится в файле /etc/mnttab.

 

Длядемонтирования файловых систем используется команда umount.Синтаксис ее очень схож с командой mount.

                umount –a                                           монтирование всехфайловых систем указанных в

файле /etc/mnttab

umount /tmp                                       размонтирование файловойсистемы от каталога /tmp

 

umount/dev/vg00/lvol1                  размонтированиефайловой системы

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

                fuser –u /dev/vg00/lvol1                                выводит ID всех процессовиспользующих данную FS

fuser –ku/dev/vg00/lvol1              посылает сигнал завершениявсем процессам использующим данную FS

Проверка файловых систем

 

Если системанекорректно завершила свою работу (пропадание питания, system panic)  то всесмонтированные на тот момент файловые системы с огромной вероятностью будутсодержать ошибки. Для их устранения применяется утилита fsck. Она вызываетс ясистемой после перезагрузки из стартового скрипта /etc/bcheckrc и проверяет все файловые системы из файла /etc/fstab.

Файловаясистема HFS

 

При проверкефайловых систем нужно выполнить следующие шаги:

1.   Проверить наличие каталога lost+found на корнюпроверяемой файловой системы. Если его нет, то создать его.

2.   Терминировать все процессы использующие фаннуюфайловую систему.

3.   Размонтировать файловую систему командой umount.

4.   Запустить fsck –p.Опция –p позволяет устранять большинство проблем без вмешательства со стороныадминистратора (неинтерактивно). Если fsck находит проблему на решениекоторой она не может принять решение то fsckзаканчивает свою работу с сообщением об ошибке. Если fsck завершиласвою работу удачно, значит все повреждения файловой системы были исправлены. Впротивном случае:

5.   Запустить fsck безаргументов –p или –P (интерактивно). При этом возможна потеря данных или именифайлов. После окончания работы fsck перегрузите систему киспользуя команду reboot -n.Если не выполнить такую перезагрузку, то можно заново повредить файловуюсистему.

6.   Проверить содержимое каталога lost+found. В негоfsck сбрасывает все данные которые не подлежат восстановлению.

Файловаясистема VxFS

 

В том случаекогда нужно проверить VxFS (разумеется не в случае физического сбоя) нетнеобходимости проверять всю файловую систему а джостаточно проверить такназываемый iintent log содержащий записи всех изменений ожидаемых в структурефайловой системы, который представляет собой не что иное как лог транзакцийкоторые система хотела осуществить перед сбоем. Проверка intent log происходиточень быстро и время восстановления VxFS существенно меньше чем HFS. В случаедискового сбоя сканирование intent log-а неоправдано и в такой ситуациинеобходимо сканирование всей файловой системы. Для этого  нужно запускать fsck –o full.

Сокращениеобьема файловой системы

 

Для уменьшенияобьема файловой системы нужно выполнить следующие действия:

·    Сделать резервную копию файловой системы

·    Размонтировать файловую систему

·    Уменьшить обьем LV командой lvreduse.

·    Создать заново файловую систему командой newfs.

·    Смонтировать ее

·    Восстановить данные из резервной копии

Увеличение обьема файловой системы

Для увеличения обьема файловой системынеобходимо выполнить следующие действия:

·    Размонтировать файловую систему

umount /dev/vg01/lvol01

·    Увеличить размер LV (например до суммарногообьема 1.5 Гб)

lvextend –L 1500 /dev/vg01/lvol1

·    Увеличить обьем файловой системы:

extendfs /dev/vg01/lvol01

·    Смонтировать файловую систему:

mount /dev/vg01/lvol1 /xxx

12.      Мониторинг использования дискового пространства

 

Команды df и bdfпозволяют вести мониторинг свободного и занятого дискового пространства и числаinodes. Команда df выводит значения в 512 байтных блоках, bdf в килобайтах. Например:

bash-2.04#bdf -i

Filesystem         kbytes     used         avail    %used  iused      ifree   %iuse Mounted on

/dev/vg00/lvol3     86016    77263     7875     91%     4566     2078     69%    /

/dev/vg00/lvol7     163840  137219   24231   85%     8164     6304     56%    /var

/dev/vg00/lvol6     339968  296156   41079   88%     17857   10947   62%    /usr

/dev/vg00/lvol4     360448  318130   39684   89%      8867    10573   46%    /opt

/dev/vg00/home   204800  186722    8178     96%     13797   2163     86%    /home

/dev/vg00/lvol5     32768    2594       28244    8%       204       7524     3%     /tmp

/dev/dsk/c0t2d0    381402  381402       0       100%     -1         0          100%  /cdrom

/dev/vg00/lvol1     47829    21052   21994      49%      25        7655     0%     /stand

 Для контроля места занимаемого какойтодиректорией можно использовать команду du. Наример:

bash-2.04#du -s /usr/contrib/*

2594    /usr/contrib/X11R6

352      /usr/contrib/X11drivers

5346    /usr/contrib/Xm1.2

11118  /usr/contrib/bin

374      /usr/contrib/doc

0         /usr/contrib/etc

0         /usr/contrib/games

0         /usr/contrib/include

262      /usr/contrib/lib

432      /usr/contrib/man

514      /usr/contrib/src


/>/>13.       Организация веб-сайта

 

/>/>Выбор операционной системы.

Выбор операционной системы, прежде всего, определяетсятем, что имеется в наличии. В настоящее время www-сервера строятся на основеWindows NT и Unix-системах преимущественно, поскольку платформа OS/2 фактическине используется из-за неудачной маркетинговой политики, а MacOS непредназначена для использования как серверная технология.

Предпочтительнее  всего – иметь Unix-подобную систему.Она не намного сложнее в администрировании «навороченного» NT-сервера, несмотряна бытующее мнение, и значительно снижает затраты на ПО, администрирование иподдержку www-сервера, как, например, за счет того, что существует огромноеколичество бесплатного ПО и ПО с открытым исходным кодом в рамках лицензии GPL(1,2) за которое не придется платить деньги. Кроме того, бесплатность неявляется основным преимуществом, в первую очередь ПО  с открытым исходным кодомполучает все большее распространение и признание благодаря именно открытостипрограммного кода и технологий. Получая такое ПО, вы получаете десятки тысячдобровольных разработчиков и тестеров во всем мире. Что это означает. Такое ПОгораздо быстрее обновляется, ошибки и бреши в системе безопасности исправляютсязначительно быстрее, чем в коммерческих продуктах, и, как это не удивительно,оно является более стабильным. Кроме этого некоторые специфические задачи длявеб-сайта можно решить только на основе Unix-систем и ПО с открытым кодом всилу того, что необходимо создавать собственные модули, парсеры и программы исерверные приложения для интерактивной работы с сервером; понятно, что сделатьэто на основе коммерческого ПО сложно в связи с тем, что вы имеете дело сготовыми бинарными файлами и не имеете возможности их менять. Отрицательныестороны: необходимость постоянно следить за новостями и обновлениями(коммерческие организации рассылают соответствующие бюллетени  и CD, здесь – необходимоподписаться на рассылку по электронной почте и самому загружать обновления);второе, необходимы некоторые базовые знания программирования и особенностейоперационной системы для установки новой версии и внесения исправлений в ПО.Причем на платформе Windows делать это будет значительно труднее.

/>/>Выбор программного обеспечения сервера.

Под программным обеспечением сервера понимаетсяпрограмма-демон, которая обрабатывает http-запросы, а так же все сопровождающеепрограммное обеспечение: клиенты баз данных, специфические компиляторы,парсеры, анализаторы логов, генераторы статистики, счетчики и т.п.

Итак, ПО веб-сервера в первую очередь – это именнопроцесс (демон) который обрабатывает запросы и обычно, собственно, и носитназвание «веб-сервер». Существует достаточно много различных технологий ивеб-серверов от разных производителей, но, как и везде, есть бесспорные лидеры.Прежде всего, это Microsoft IIS, Apache, Netscape FastTrack Server, а так жеменее известные Stronghold и FHTTPD. Немного статистики: наиболеераспространенным сервером в странах СНГ является Apache – около 80% веб-сайтовпостроены на нем, порядка 15% принадлежит Microsoft IIS, оставшиеся 5% спеременным успехом разделены между другими оставшимися веб-серверами. Дляплатформы HP-UX прежде всего следует рассмотреть Apache, Netscape FastTrackServer, как совместимые с платформой и возможные к использованию. Недостаткомупоминавшихся ранее Stronghold и FHTTPD является следующее, первый –коммерческий с ограниченной лицензией и ограниченной поддержкой новыхтехнологий, второй сервер – является так же и сервером обслуживанияFTP-запросов, что значительно снижает безопасность и устойчивость сервера.

СопутствующееПО. В самом простейшем случае это различные интерпретаторы, парсеры и/илимодули, которые могут понадобиться для создания интерактивного сайта, обработкиформ и исполнения приложения. В минимальный комплект как минимум будут входить:компилятор С, интерпретатор языка Perl, которые понадобятся для созданияcgi-скриптов, обработки форм и запросов, а так же оживления сайта; кроме этогона сервере можно установить компилятор Java, если в перспективе планируетсяиспользовать сервелеты, а так же некоторые другие средства разработки – Tcl/Tk,PHP, если предполагается использование баз данных, то для работы необходимобудет установить, как минимум, клиенты к базам данных и соответствующиебиблиотеки, как, например, MySQL или PostgresSQL. Кроме того, для оживления сайта,мониторинга посещаемости можно установить программы подсчета посещений ианализа логов (WWWCount, Webalizer), если вы не собираетесь использоватьсчетчики внешних рейтинговых систем, которые значительно замедляют загрузкустраниц сайта, а так же имеют обыкновение не работать в течение длительныхпериодов времени или работать некорректно.

/>/>Анализ веб-серверов.

NetscapeFastTrack Server.

Позаверениям компании Netscape это веб-сервер начального уровня пригодный длямалых и средних серверов с устойчивым базовым движком, пригодным для созданиястатических и динамических сайтов, а так же предлагающий простейшие инструментыдля работы с базами данных на веб-сайте. Сервер поддерживает HTTP 1.1 и SSL 3технологии, сервелеты на основе JavaScript 1.1, а так же доступ к ODBC базамданных. Для корпоративных сайтов и крупных серверов предлагается использоватьусовершенствование версии до Netscape Enterprise Server, что значительно дешевле,чем изначально покупать лицензию Enterprise Server

Apache.(Apache Software Foundation)

Веб-серверразрабатывается на основе движка NCSA httpd 1.3, который был переработан ApacheSoftware Foundation, лицензирование – GPL2, с открытым исходным кодом. Этотдостаточно мощный сервер, который пригоден как для небольших и средних сайтов,так и для крупных корпоративных проектов в настоящее время используется на 60%веб-сайтов всего мира. Сервер поддерживает HTTP 1.1 и SSL 3 технологии,сервелеты на основе JavaScript 1.1, технологии SSI, так же содержит более 50модулей, позволяющих реализацию проекта практически любой сложности. Кромеэтого, к серверу можно подключить не меньшее количество модулей от стороннихпроизводителей, как, например, FastCGI от OpenMarket Group (разработчиковFHTTPD), что значительно расширяет его возможности. Сервер доступен в вариантахпод платформы Windows NT и все Unix-системы.

/>/>Инсталляция веб-сервера.

ИнсталляцияNetscape FastTrack Server.

ИнсталляцияNetscape FastTrack Server достаточно проста, поскольку это сугубо коммерческийпродукт, поставляемый в бинарном виде, и устанавливается он стандартнымисредствами, как, например, для HP-UX это с помощью swinstall.

Далееследует вручную исправить в файле /opt/ns-fasttrack/admserv/admpw парольдоступа. Проще всего убрать всякий пароль для пользователя root, тем более, чтопо умолчанию заход с административными правами разрешен только с localhost.Дальнейшая конфигурация и настройка осуществляется из браузера после запускаns-admin и не представляет сложностей. Принципиально необходимо настроитьпрактически такие же параметры как и для apache только все это делается черезвеб-интерфейс.

ИнсталляцияApache.

Архитектурусервера можно описать так:

/>


Дляинсталляции веб-сервера Apache, вполне достаточно стандартной поставки вUnix-системе, т.е. компилятора СС. Однако, рекомендуется все-таки поставить GCC(Gnu-CC) компилятор, особенно в том случае, если вы собираетесь использоватьмодули от сторонних производителей, обычно для их инсталляции требуется именноGCC. Для того чтобы сконфигурировать и запустить Apache под Windows NT, можновоспользоваться доступной готовой инсталляцией в традиционном стилеWindows-приложений, если же собирать сервер из исходных кодов, то потребуетсяинсталляция MS Developer Studio или MS Visual C как минимум.

Рассмотримпроцесс инсталляции в Unix-среде. Для того чтобы успешно скомпилировать сервер,необходимо знать основы работы с шеллом и некоторое стандартное программноеобеспечение под Unix.

Процессинсталляции:

1.   Развернем дистрибутив apache-x.x.xв какую либо директорию (можно в home)

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

./configure--with-layout=Apache --prefix=/usr/local/httpd/ --enable-shared=max--enable-suexec --suexec-caller=#65533 --suexec-docroot=/usr/local/httpd/--suexec-logfile=/usr/local/httpd/logs/suexec_log--suexec-safepath=/usr/local/httpd/cgi-bin --sbindir=/usr/local/httpd/bin

3.   После того как отработаетконфигурационный скрипт, достаточно набрать make, потом make install и можноприступать к конфигурированию сервера.

Дляпроверки правильности компиляции следует запустить

/usr/local/httpd/bin/httpd-l

Результатбудет приблизительно таким:

Compiled-inmodules:

 mod_env.c

 http_core.c

 mod_so.c

suexec:enabled; valid wrapper /usr/local/apache/bin/suexec

2а.Для сборки сервера в идеальном варианте, когда сам сервер содержит толькоsuexec wrapper, http_core и статически вкомпилированную библиотеку поддержкиподгружаемых модулей mod_so, необходимо запустить скрипт автоконфигурацииconfigure с такими ключами (для удобства приведен пример скрипта, которыйвыполняется из шелла, поскольку более полусотни ключей неудобно набирать,особенно при возникновении опечаток)

./configure\

»--with-layout=Apache"\

"--enable-module=so"\

"--prefix=/usr/local/httpd/"\

"--enable-module=env"\

"--enable-shared=env"\

"--enable-module=setenvif"\

"--enable-shared=setenvif"\

"--enable-module=mime"\

"--enable-shared=mime"\

"--enable-module=negotiation"\

"--enable-shared=negotiation"\

"--enable-module=alias"\

"--enable-shared=alias"\

"--enable-module=rewrite"\

"--enable-shared=rewrite"\

"--enable-module=userdir"\

"--enable-shared=userdir"\

"--enable-module=dir"\

"--enable-shared=dir"\

"--enable-module=autoindex"\

"--enable-shared=autoindex"\

"--enable-module=access"\

"--enable-shared=access"\

"--enable-module=auth"\

"--enable-shared=auth"\

"--enable-module=auth_anon"\

"--enable-shared=auth_anon"\

"--enable-module=auth_dbm"\

"--enable-shared=auth_dbm"\

"--enable-module=auth_db"\

"--enable-shared=auth_db"\

"--enable-module=digest"\

"--enable-shared=digest"\

"--enable-module=headers"\

"--enable-shared=headers"\

"--enable-module=cern_meta"\

"--enable-shared=cern_meta"\

"--enable-module=expires"\

"--enable-shared=expires"\

"--enable-module=asis"\

"--enable-shared=asis"\

"--enable-module=include"\

"--enable-shared=include"\

"--enable-module=cgi"\

"--enable-shared=cgi"\

"--enable-module=actions"\

"--enable-shared=actions"\

"--enable-module=status"\

"--enable-shared=status"\

"--enable-module=info"\

"--enable-shared=info"\

"--enable-module=log_config"\

"--enable-shared=log_config"\

"--enable-module=log_agent"\

"--enable-shared=log_agent"\

"--enable-module=log_referer"\

"--enable-shared=log_referer"\

"--enable-module=usertrack"\

"--enable-shared=usertrack"\

"--enable-module=imap"\

"--enable-shared=imap"\

"--enable-module=proxy"\

"--enable-shared=proxy"\

"--enable-module=mmap_static"\

"--enable-shared=mmap_static"\

"--enable-suexec"\

"--suexec-caller=#65533"\

"--suexec-docroot=/usr/local/httpd/"\

"--suexec-logfile=/usr/local/httpd/logs/suexec_log"\

"--suexec-safepath=/usr/local/httpd/cgi-bin"\

"--sbindir=/usr/local/httpd/bin"\

3а.После того как отработает конфигурационный скрипт, достаточно набрать make,потом make install и можно приступать к конфигурированию сервера.

Дляпроверки правильно ли скомпилирован сервер запустим его с ключом –l:

/usr/local/httpd/bin/httpd-l

Соответствующийправильному результат будет следующий:

Compiled-inmodules:

 http_core.c

 mod_so.c

suexec:enabled; valid wrapper /usr/local/apache/bin/suexec

/>/>Стратегическое планирование. Определениеобъема работы.

Концепция:

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

Административныезадачи:

Выбор команды: продюсер, арт-директор/дизайнер, автор/эдитор, программист. /> <td/> />
Расписание и бюджет проекта.

/>

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

1.Вы получили деловое предложение. В первую очередь постарайтесь узнать как можнобольше о вашем заказчике, о его фирме; сферу бизнеса, в котором он работает, изанимаемую в ней нишу.

2.Получите у него ответы на следующие вопросы:

-     Зачем ему нужен сайт? Почему онего создает и какие цели и задачи преследует?

-     - Желает ли он моментальной отдачиили подготавливает почву для более агрессивного бизнеса в Сети в дальнейшем?

-     - Что входит в его цели: продатьпродукцию или сервис, увеличить покупательский рынок, обеспечить поддержку ужепроданному товару?

-     - Возможно, он надеется поднятьсяна уровень конкурентов, которые давно имеют свои ресурсы в Интернет?

-     - Если бы у него была возможностьдонести только одну идею до своих пользователей, какой бы она была?

-     - Какие дальнейшие действияожидает он от посетителей его Веб-страниц? Обращение за более полнойинформацией? Визит в магазин или офис, покупка напрямую с сервера?

-     - Как заказчик измерит успех илинеудачу сайта? Как узнать, что сайт получился удачным — понравилось начальнику?Выиграл Сетевые награды? Популярен в среде пользователей?

-     - Кого он хочет видеть своимпосетителем? (Дизайн и содержание сайта должны оправдывать ожидания иудовлетворять потребности пользователя)

-     - Почему к нему будут приходить?За какой информацией?

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

-     - Интересуется ли он привлечениемодноразовых посетителей (для счетчика) или надеется превратить случайныхпрохожих в регулярных пользователей? Лояльность требует частого обновленияматериалов.

3.Узнайте, кто является конкурентом заказчика. Как выглядят их Интернет ресурсы.Очень важно, чтобы сайт клиента не подражал другим, а представлял уникальный ипоследовательный в себе имидж. Составьте документ с подробным описанием того,что вы знаете о данной индустрии в Интернете. Сделайте выводы — что работает и чтоне работает для схожей группы пользователей на других сайтах. Что бы вы моглииспользовать на сайте заказчика, и что использовать не стоит.

4.Когда вы утвердите профиль будущего посетителя (см. вопросы выше), составьтесписок возможных требований (например, основной группой пользователей будетмолодежь, которая дозванивается в Интернет через слабый модем и терпеть неможет ждать загрузки страницы дольше, чем 30 сек.) и пожеланий (они хотели быиметь возможность обмениваться мнениями на доске или болтать в чате) различныхпосетительских групп.

4.   Следующие, решите вопросы пофункциональности ресурса.

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

-     - Спросите, кто будет мониторить иобновлять подобные функции?

-     Имеет ли заказчик неординарныетребования к безопасности?

-     - Как и где будет хоститься сайт?

-     - Существуют ли какие-либоисключения?

-     - Кто будет обновлять иподдерживать ресурс?

-     - Какие у заказчика планы набудущее, касательно Веб-сайта?

6.Технические спецификации будут служить основой всех скриптов, css, графики,html, java и других технических элементов сайта. Определите, какое программноеобеспечение потребуется пользователям для просмотра ресурса, а также общийтехнический подход к разработке и поддержке сайта. Хотелось бы знать резолюциюмонитора посетителя, скорость их модема, сколько памяти в его системе, количествовоспроизводимых цветов, какие плагинсы (программные модули) имеют и т.д.Подобную информацию можно найти в уже существующей у заказчика базе данныхпользователей, из интервью, опросов клиентов заказчика, или обычных логическихпредположений.

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

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

/>/>Тактическое планирование сайта. Разработкаструктуры.Карта сервера Подготовка контекста, создание и эдитирование Обозрение материалов Технические спецификации (тактическая сторона) Навигация и разметка страниц

/>

/>

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

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

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

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

-     Будут ли страницы генерироваться«на лету» из датабазы?

-     - Будут ли использованы CascadingStyle Sheets (CSS)?

-     - Потребуется ли наличие модуля(plug-in) или специального контроля на машине пользователя?

-     - Под какой минимум необходимооптимизировать цветовую палитру?

-     - Вы будете писать код сами илииспользовать WYSIWYG «Что вижу, то и получаю» эдитор (Dreamweaver, кпримеру)?

-     - Будут ли использованы DHTML,Channels, Push технологии?

Затемвы должны определиться с навигацией. Как будет посетитель продвигаться посайту? Какая связь существует между страницами, куда можно попасть от куда ит.д. Для большинства проектов нет нужды придумывать новые навигационные схемы.Учитесь на сайтах, которые вам нравятся больше всего: проще — лучше. Подгонитесуществующую удачную модель под нужды своего проекта и используйте ее. Людямнеобходима возможность легко передвигаться по сайту, только и всего.

/>/>Дизайн интерфейса.Творческие поиски и разработка стиля Создание прототипов Утверждение заказчиком Графическое производство: дизайн датабаз и форм, анимации, графика в GIF/Jpeg, обработка в html.

/>

/>

Выизучили своего заказчика, представляете содержание каждой будущей страницы ивовсю идет работа над текстами. Самое время заняться интерфейсом. Начните ссамой важной страницы, работайте над ней до тех пор, пока у вас не будет какминимум 15 набросков различных вариантов, из которых 5 можно развить дальше.Когда страничка начнет дымиться, поработайте над другими. Продолжайте искатьидеи, рисовать и думать. Попробуйте поэксперементировать с различнымиэффектами: real audio/vidio, динамическое html, необычное использование тегов ит.д.

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

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

Используйтеграфический редактор. Очень удобно скопировать окно браузера (F13 или PrintScrn, далее Ctrl+double click в окне графического редактора, затем Ctrl+V вновый файл) в Фотошоп или Иллюстратор и накладывать слои композиции прямо нанего.

Выберите3 законченных варианта: ваш любимый, несколько экстравагантный иконсервативный, который, вы уверены, понравится заказчику. Создайте для них прототипы,которые он сможет посмотреть и одобрить. Прототип — черновой вариантслинкованных между собой основных страниц сайта. Не обязательно писать код дляэтих страниц, вы прекрасно можете обойтись image-maps. Пореже страницы на частии пролинкуйте графику между собой. Не тратьте время на ее оптимизацию, иобъясните заказчику, что она немного потеряет в качестве при дальнейшейобработке. Задача прототипов — хорошо смотреться в окне браузера и понравитсязаказчику.

/>/>Программирование.Создание: CGI, Javascript, Java, формы, датабазы HTML: кодирование Валидация: содержания, грамматических ошибок, работы линков Тестирование в различных браузерах.

/>

/>

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

Несколькосоветов:

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

2.Рассортируйте ваши графические файлы по классам в зависимости от их размера.Старайтесь держать количество таких классов минимальным. Например: заголовки,подзаголовки, «ноготки», полная графика и т.д. Графические размеры от1 до 5.

3.Подберите оптимальную палитру для графики в одном отдельно взятом классе ииспользуйте ее на всех файлах данного класса. Работая над большим сайтом удобноиспользoвать DeBabelizer (http://www.equilibrium.com), сценарии которогопозволяют очень быстро и точно процессить большое кол-во файлов. Так же, он, вотличие от Photoshop (http://www.adobe.com), не сдвигает цвета «безопаснойвеб-палитры» в сторону при оптимизации.

4.Используйте <!-- комментарии --> в своем коде, оставляя пояснения дляпрограммистов и создателей текстов.

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

6.Если на странице очень много текста и других материалов, удалите все«возвраты каретки» и коменты из кода, что существенно снизит размерфайла.

7.Потратьте время на изучение тех программ, с которыми работаете, вашапродуктивность резко повысится. Следите за выходом новых версий и обновляйтесвои инструменты регулярно.

8.Делайте копии (Back up?) того, что сделали каждый день по окончанию работы.

9.Проверяйте свою работу на разных браузерах и основных ОС. Поменяйте настройки вбраузерах выставив большие или маленькие размеры шрифтов, изменив цветовыенастройки, откройте все меню и бары которые имеются.

10.Проверяйте:

-     Грамматику

-     - Правильное название файлов

-     - Работу линков

-     - Название страниц в поле Титул

-     - Фоновые цвета

-     - Целостность и тегов

-     - Визуальное выравнивание

-     - Что получится при измененииразмеров окна браузера, шрифтов, цветов?

-     - Различия резолюций. А как онобудет смотреться в монохроме?

11.Тестируйте, тестируйте и еще раз тестируйте. Подключайте как можно больше людейк этому процессу. Для заказчика это отличная возможность«поучаствовать» в проекте. Если есть возможность проверить на будущихпосетителях, не упускайте ее. Внимательно следите как люди со свежим взглядомна сайт реагируют на вашу навигацию и систему наименований. Не пытайтесь помочьим «найти» что-либо, но попросите комментировать каждый шаг.Например, куда они ожидают попасть при клике на ту или иную кнопку? Частобывает очень удобно распечатать весь сайт на бумаге и проверять стилистическиеи грамматические ошибки таким образом.

Сравнительнаятаблица популярности браузеров (по данным StatMarket за Январь 2001)

/>
 />/>Microsoft68.94% />/>Netscape29.09% />/>Other 1.96

/>/>Публикация и Маркетинг.

Публикация:

Выбор хост-провайдера, покупка или регистрация имени домейна FTP веб-сайта на сервер: создание дерикторий, установка permissions Последние проверки и валидации

Маркетинг:

Регистрация сервера в основных поисковиках Раскрутка Поддержка: страница новостей, автоматические обновления Презентация сервера и Празднование столь знаменательного события <p/>

Последниеработы над сайтом могут включать следующее:

-     Создание банеров/заголовков прозапас

-     - Добaвление последнего контекста

-     - Запуск CGI сценариев

-     - обновление линков (старайтесьвсегда давать условные пути к документам, а не полный URL. К примеру,../images/dot.gif вместо www.yoursite.ru/images/dot.gif Таким образомвам не придется менять данные во всех ссылках при переносе сайта на сервернового провайдера, если в будущем возникнет подобная необходимость.)

-     - написание мета-тегов

-     - добавление авторских прав ипредупреждений

-     - убедитесь, что графика вездеимеет атрибуты width и height, соответствует основной цветовой палитре, имеет«Alt» пояснения.

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

-     Краткость и Простота. Короткие адреса легче запоминаются, в них сложнеесделать ошибку: Gazeta.ru, Pupkin.com

-     - Описание. Хорошо, когдапо адресу можно догадаться о содержании сайта. Имя компании не всегда являетсядостаточным пояснением: beerclub.com тумана не напустит

Запоминаемость.Лучшие адреса добавляют к простоте элемент интереса — частенько игру слов, какв www.anekdotov.net — который поможет посетителям помнить это название черезчасы, дни и месяцы. Идеально, когда адрес можно запомнить, услышав в разговореили по радио. Скопируйте структуру сайта со своей машины на сервер заказчика иеще раз протестируйте каждую страничку в брaузере. Конфигурация чужого сервераможет потребовать изменений в сценариях или расширениях файлов (htm вместоhtml). Убедитесь все работает так, как вы предполагали.

Проведитехорошую рекламную компанию своему сайту.

/>/>14.      Веб-страницы и веб-приложения.

 

/>/>Классификация веб-объектов.
/>/>Спецификация DTD. Понятие ортогональности иметоды ее реализации.

Согласноспецификации W3C минимальный html-документ обязательно должен содержать всегодва тега, без которых вообще не является никаким документом.  Это теги !DOCTYPE(DTD) и TITLE. Почему настолько важен тег содержащий DTD? Именно тег !DOCTYPEопределяет то, что документ является HTML, а не, например, XML-файлом.

Пример:

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.0//EN"

            «www.w3.org/TR/REC-html40/strict.dtd»>

DTD– Document Type Definition – определяет тип и принадлежность документа, а также его версия и некоторые другие параметры, как например, в спецификации DTDполностью описаны все теги HTML 4.2 менее чем на 20 страницах.

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

/>/>Веб-страницы. Языки разметки. (HTML, XML)Основы HTML

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

HTML-документ имеет достаточно строго структурирован:

<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<head>

   <title>Untitled</title>

</head>

<body>

</body>

</html>

 СПИСОКЭЛЕМЕНТОВ HTML

базисные элементы (все документы на HTML должны содержать их) определение структуры (вид задается параметрами программы-просмотрщика) внешний вид (автор определяет внешний вид текста) ссылки и графика разделители списки фон и цвета специальные символы формы таблицы фреймы (frames) язык Java разное

Внимание: Если вам не ясна разница между HTML 2.0, HTML 3.0, HTML3.2, и дополнениями Netscape, я советую прочитать комментарии W3C о развитииязыка HTML.

УПОТРЕБЛЯЕМЫЕСИМВОЛЫ

URL   URL (адрес) внешнего файла (или просто имя файла в том же каталоге)

?     Любое число (т.е. <H?> значит <H1>, <H2>, <H3>, и т.д.)

%     Любой процент (т.е. <hr align=left width="%>" значит <hralign=left width=«50%>», и т.д.)

***   Любой текст (т.е. ALT="***" значит заполните текст)    

$$$$$$Любое 16ричное число (т.е. BGCOLOR="#$$$$$$" значитBGCOLOR="#00FF1C", и т.д.)

,,,   Разделенное запятыми (т.е. COORDS=",,," значитCOORDS=«0,0,50,50», и т.д.)

|     Альтернативы (т.е. ALIGN=LEFT|RIGHT|CENTER значит один из них)

СОВМЕСТИМОСТЬ

(помните,HTML эволюционирует и просмотрщики бывают разные)

      (без отметки) Включено в HTML 3.2; 

          должно работать с последними версиями просмотрщиков 

N1.0  дополнение Netscape, введенное в Navigator'е версии 1.0

N1.1  дополнение Netscape, введенное в Navigator'е версии 1.1

N2.0  дополнение Netscape, введенное в Navigator'е версии 2.0 

N3.0b дополнение Netscape, введенное в Navigator'е версии 3.0 бета 

БАЗИСНЫЕ ЭЛЕМЕНТЫ

Тип документа

<HTML></HTML> (начало и конец файла)

Имя документа

<TITLE></TITLE> (должно быть в заголовке)

Заголовок

<HEAD></HEAD> (описание документа, например его имя)

Тело

<BODY></BODY> (содержимое страницы) /> /> /> /> /> /> />

ОПРЕДЕЛЕНИЕ СТРУКТУРЫ

Заглавие

<H?></H?> (стандарт определяет 6 уровней)

с выравниванием

<H? ALIGN=LEFT|CENTER|RIGHT></H?>

Секция

<DIV></DIV>

с выравниванием

<DIV ALIGN=LEFT|RIGHT|CENTER></DIV>

Цитата

<BLOCKQUOTE></BLOCKQUOTE> (обычно выделяется отступом)

Выделение

<EM></EM> (обычно изображается курсивом)

Дополнительное выделение

<STRONG></STRONG> (обычно изображается жирным шрифтом)

Отсылка, цитата

<CITE></CITE> (обычно курсив)

Код

<CODE></CODE> (для листингов кода)

Пример вывода

<SAMP></SAMP>

Ввод с клавиатуры

<KBD></KBD>

Переменная

<VAR></VAR>

Определение

<DFN></DFN> (часто не поддерживается)

Адрес автора

<ADDRESS></ADDRESS>

Большой шрифт

<BIG></BIG>

Маленький шрифт

<SMALL></SMALL> /> /> /> /> /> /> />

ВНЕШНИЙ ВИД

Жирный

<B></B>

Курсив

<I></I> N3.0b

Подчеркнутый

<U></U> (часто не поддерживается)

Перечеркнутый

<STRIKE></STRIKE> (часто не поддерживается) N3.0b

Перечеркнутый

<S></S> (часто не поддерживается)

Верхний индекс

<SUB></SUB>

Нижний индекс

<SUP></SUP>

Печатная машинка

<TT></TT> (изображается как шрифт фиксированной ширины)

Форматированый

<PRE></PRE> (сохранить формат текста как есть)

Ширина

<PRE WIDTH=?></PRE> (в символах)

Центрировать

<CENTER></CENTER> > (как текст, так и графика) N1.0

Мигающий

<BLINK></BLINK> (наиболее осмеянный элемент)

Размер шрифта

<FONT SIZE=?></FONT> (от 1 до 7)

Изменить размер шрифта

<FONT SIZE="+|-?"></FONT> N1.0

Базовый размер шрифта

<BASEFONT SIZE=?> (от 1 до 7; по умолчанию 3)

Цвет шрифта

<FONT COLOR="#$$$$$$"></FONT> N3.0b

Выбор шрифта

<FONT FACE="***"></FONT> N3.0b

Многоколоночный текст

<MULTICOL COLS=?></MULTICOL> N3.0b

Пробел между колонками

<MULTICOL GUTTER=?></MULTICOL> (по умолчанию 10 точек) N3.0b

Ширина колонки

<MULTICOL WIDTH=?></MULTICOL> N3.0b

Пустой блок

<SPACER> N3.0b

Тип пустого блока

<SPACER TYPE=horizontal| vertical|block> N3.0b

Величина пустого блока

<SPACER SIZE=?> N3.0b

Размеры пустого блока

<SPACER WIDTH=? HEIGHT=?> N3.0b

Выравнивание

<SPACER ALIGN=left|right|center> /> /> /> /> /> /> />

ССЫЛКИ И ГРАФИКА

Ссылка

<A HREF=«URL»></A>

Ссылка на закладку

<A HREF=«URL#***»></A> (в другом документе) <A HREF="#***"></A> (в том же документе) N2.0

На другое окно

<A HREF=«URL» TARGET="***| |_blank|_self|_parent|_top"></A>

Определить закладку

<A NAME="***"></A>

Отношение

<A REL="***"></A> (часто не поддерживается)

Обратное отношение

<A REV="***"></A> (часто не поддерживается)

Графика

<IMG SRC=«URL»>

Выравнивание

<IMG SRC=«URL» ALIGN=TOP|BOTTOM|MIDDLE|LEFT|RIGHT> N1.0

Выравнивание

<IMG SRC=«URL» ALIGN=TEXTTOP| ABSMIDDLE|BASELINE|ABSBOTTOM>

Альтернатива

<IMG SRC=«URL» ALT="***"> (выводится если картинка не изображается)

Карта

<IMG SRC=«URL» ISMAP> (нужна также программа)

Локальная карта

<IMG SRC=«URL» USEMAP=«URL»>

Определение карты

<MAP NAME="***"></MAP>

Области карты

<AREA SHAPE=«RECT» COORDS=",,," HREF=«URL»|NOHREF>

Размеры

<IMG SRC=«URL» WIDTH=? HEIGHT=?> (в точках)

Окантовка

<IMG SRC=«URL» BORDER=?> (в точках)

Отступ

<IMG SRC=«URL» HSPACE=? VSPACE=?> (в точках) N1.0

Заменитель в низком разрешении

<IMG SRC=«URL» LOWSRC=«URL»> N1.1

Обновить

<META HTTP-EQUIV=«Refresh» CONTENT="?; URL=URL"> N2.0

Включить объект

<EMBED SRC=«URL»> (вставить объект в страницу) N2.0

Размер объекта

<EMBED SRC=«URL» WIDTH=? HEIGHT=?> /> /> /> /> /> /> />

РАЗДЕЛИТЕЛИ

Параграф

<P></P> (закрывать элемент часто не обязательно)

Выравнивание

<P ALIGN=LEFT|CENTER|RIGHT></P>

Новая строка

<BR> (одиночный перевод строки)

Убрать выравнивание

<BR CLEAR=LEFT|RIGHT|ALL>

Горизонтальный разделитель

<HR>

Выравнивание

<HR ALIGN=LEFT|RIGHT|CENTER>

Толщина

<HR SIZE=?> (в точках)

Ширина

<HR WIDTH=?> (в точках) N1.0

Ширина в процентах

<HR WIDTH="%"> (в процентах от ширины страницы)

Сплошная линия

<HR NOSHADE> (без трехмерных эффектов) N1.0

Нет разбивки

<NOBR></NOBR> (запрещает перевод строки) N1.0

Перенос

<WBR> (где разбивать строку для переноса при необходимости) /> /> /> /> /> /> />

СПИСКИ

 

Неупорядоченный

<UL><LI></UL> (<LI> перед каждым элементом)

Компактный

<UL COMPACT></UL>

Тип метки

<UL TYPE=DISC|CIRCLE|SQUARE> (для всего списка) <LI TYPE=DISC|CIRCLE|SQUARE> (этот и последующие)

Нумерованный

<OL><LI></OL> (<LI> перед каждым элементом)

Компактный

<OL COMPACT></OL>

Тип нумерации

<OL TYPE=A|a|I|i|1> (для всего списка) <LI TYPE=A|a|I|i|1> (этот и следующие)

Первый номер

<OL START=?> (для всего списка) <LI VALUE=?> (этот и следующие)

Список определений

<DL><DT><DD></DL> (<DT>=термин, <DD>=определение)

Компактный

<DL COMPACT></DL>

Меню

<MENU><LI></MENU> (<LI> перед каждым элементом)

Компактное

<MENU COMPACT></MENU>

Каталог

<DIR><LI></DIR> (<LI>перед каждым элементом)

Компактный

<DIR COMPACT></DIR> /> /> /> /> /> /> /> />

ФОН И ЦВЕТА

Фоновая картинка

<BODY BACKGROUND=«URL»>

Цвет фона

<BODY BGCOLOR="#$$$$$$"> (порядок: красный/зеленый/синий)

Цвет текста

<BODY TEXT="#$$$$$$">

Цвет ссылки

<BODY LINK="#$$$$$$">

Пройденная ссылка

<BODY VLINK="#$$$$$$">

Активная ссылка

<BODY ALINK="#$$$$$$"> /> /> /> /> /> /> />

СПЕЦИАЛЬНЫЕ СИМВОЛЫ(обязаны быть в нижнем регистре)

Специальный символ

&#?; (где? это код ISO 8859-1)

<

<

>

>

&

&

"

"

Торговая марка ТМ

®

Copyright

©

Неразрывный пробел

  /> /> /> /> /> /> />

ФОРМЫ

Определить форму

<FORM ACTION=«URL» METHOD=GET|POST></FORM> N2.0

Посылка файла

<FORM ENCTYPE=«multipart/form-data»></FORM>

Поле ввода

<INPUT TYPE=«TEXT|PASSWORD|CHECKBOX|RADIO| IMAGE|HIDDEN|SUBMIT|RESET»>

Имя поля

<INPUT NAME="***">

Значение поля

<INPUT VALUE="***">

Отмечен?

<INPUT CHECKED> (checkboxes и radio boxes)

Размер поля

<INPUT SIZE=?> (в символах)

Максимальная длина

<INPUT MAXLENGTH=?> (в символах)

Список вариантов

<SELECT></SELECT>

Имя списка

<SELECT NAME="***"></SELECT>

Число вариантов

<SELECT SIZE=?></SELECT>

Множественний выбор

<SELECT MULTIPLE> (можно выбрать больше одного)

Опция

<OPTION> (элемент который может быть выбран)

Опция по умолчанию

<OPTION SELECTED>

Ввод текста, размер

<TEXTAREA ROWS=? COLS=?></TEXTAREA>

Имя текста

<TEXTAREA NAME="***"></TEXTAREA> N2.0

Разбивка на строки

<TEXTAREA WRAP=OFF|VIRTUAL|PHYSICAL></TEXTAREA> /> /> /> /> /> /> />

Таблицы

Определить таблицу

<TABLE></TABLE>

Окантовка таблицы

<table border=?></TABLE>

Расстояние между ячейками

<TABLE CELLSPACING=?>

Дополнение ячеек

<TABLE CELLPADDING=?>

Желаемая ширина

<TABLE WIDTH=?> (в точках)

Ширина в процентах

<TABLE WIDTH="%"> (проценты от ширины страницы)

Строка таблицы

<TR></TR>

Выравнивание

<TR ALIGN=LEFT|RIGHT| CENTER|MIDDLE|BOTTOM>

Ячейка таблицы

<TD></TD> (должна быть внутри строки)

Выравнивание

<TD ALIGN=LEFT|RIGHT| CENTER|MIDDLE|BOTTOM>

Без перевода строки

<TD NOWRAP>

Растягивание по колонке

<TD COLSPAN=?>

Растягивание по строке

<TD ROWSPAN=?> N1.1

Желаемая ширина

<TD WIDTH=?> (в точках) N1.1

Ширина в процентах

<TD WIDTH="%"> (проценты от ширины страницы) N3.0b

Цвет ячейки

<TD BGCOLOR="#$$$$$$">

Заголовок таблицы

<TH></TH> (как данные, но жирный шрифт и центровка)

Выравнивание

<TH ALIGN=LEFT|RIGHT| CENTER|MIDDLE|BOTTOM>

Без перевода строки

<TH NOWRAP>

Растягивание по колонке

<TH COLSPAN=?>

Растягивание по строке

<TH ROWSPAN=?> N1.1

Желаемая ширина

<TH WIDTH=?> (в точках) N1.1

Ширина в процентах

<TH WIDTH="%"> (проценты ширины таблицы) N3.0b

Цвет ячейки

<TH BGCOLOR="#$$$$$$">

Заглавие таблицы

<CAPTION></CAPTION>

Выравнивание

<CAPTION ALIGN=TOP|BOTTOM> (сверху/снизу таблицы) /> /> /> /> /> /> />

ФРЕЙМЫ

N2.0

Документ с фреймами

<FRAMESET></FRAMESET> (вместо <BODY>) N2.0

Высота строк

<FRAMESET ROWS=,,,></FRAMESET> (точки или %) N2.0

Высота строк

<FRAMESET ROWS=*></FRAMESET> (* = относительный размер) N2.0

Ширина колонок

<FRAMESET COLS=,,,></FRAMESET> (точки или %) N2.0

Ширина колонок

<FRAMESET COLS=*></FRAMESET> (* = относительный размер) N3.0b

Ширина окантовки

<FRAMESET BORDER=?> N3.0b

Окантовка

<FRAMESET FRAMEBORDER=«yes|no»> N3.0b

Цвет окантовки

<FRAMESET BORDERCOLOR="#$$$$$$"> N2.0

Определить фрейм

<FRAME> (содержание отдельного фрейма) N2.0

Документ

<FRAME SRC=«URL»> N2.0

Имя фрейма

<FRAME NAME="***"|_blank|_self| _parent|_top> N2.0

Ширина границы

<FRAME MARGINWIDTH=?> (правая и левая границы) N2.0

Высота границы

<FRAME MARGINHEIGHT=?> (верхняя и нижняя границы) N2.0

Скроллинг?

<FRAME SCROLLING=«YES|NO|AUTO»> N2.0

Постоянный размер

<FRAME NORESIZE> N3.0b

Окантовка

<FRAME FRAMEBORDER=«yes|no»> N3.0b

Цвет окантовки

<FRAME BORDERCOLOR="#$$$$$$"> N2.0

Содержание без фреймов

<NOFRAMES></NOFRAMES> (для просмотрщиков не поддерживающих фреймы) /> /> /> /> /> /> />

ЯЗЫК JAVA

Applet

<APPLET></APPLET>

Applet — имя файла

<APPLET CODE="***">

Параметры

<APPLET PARAM NAME="***">

Applet — адрес

<APPLET CODEBASE=«URL»>

Applet — имя

<APPLET NAME="***"> (для ссылок из других частей страницы)

Альтернативный текст

<APPLET ALT="***"> (для программ не поддерживающих Java)

Выравнивание

<APPLET ALIGN=«LEFT|RIGHT|CENTER»>

Размеры

<APPLET WIDTH=? HEIGHT=?> (в точках)

Отступ

<APPLET HSPACE=? VSPACE=?> (в точках) /> /> /> /> /> /> />

РАЗНОЕ

Комментарий

<!-- *** --> (игнорируется просмотрщиком)

Пролог HTML 3.2

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">

Поиск

<ISINDEX> (означает начальную точку поиска)

Приглашение

<ISINDEX PROMPT="***"> (текст приглашения для поля ввода)

Запустить поиск

<A HREF=«URL?***»></a> (используйте действительно знак вопроса)

URL этого файла

<BASE HREF=«URL»> (должно быть в заголовке) N2.0

Имя базового окна

<BASE TARGET="***"> (должно быть в заголовке)

Отношение

<LINK REV="***" REL="***" HREF=«URL»> (должно быть в заголовке)

Метаинформация

<META> (должно быть в заголовке)

Стили

<STYLE></STYLE> (часто не поддерживается)

Программа

<SCRIPT></SCRIPT> (часто не поддерживается) /> /> /> /> /> /> />

·    Основы XML и объектная модельпредставления данных

Бурноеразвитие Интернет технологий вовлекло в международную паутину миллионыпользователей. Требования к электронному обмену возросли, и уже существующийпротокол HTML многие группы пользователей перестал удовлетворять.

Вначале февраля 1998 г международная организация W3C утвердила спецификацию«Extensible Markup Language(XML) 1.0». Уже сегодня появляются новыеязыки, созданные на основе XML. Возникают многочисленные Web-сервера,использующие и технологию XML для организации хранящейся на них информации.

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

ЯзыкXML предназначен для создания новых языков разметки. С его помощью можноописать целый класс объектов данных, называемых XML — документами,ориентированными на конкретную предметную область. XML позволяет определитьдопустимый набор тэгов, их атрибуты и внутреннюю структуру документа. Тэги(подобно тэгам в HTML) представляют специальные инструкции, предназначенные дляформирования в документах определенной структуры и четких отношений междуразличными элементами этой структуры.

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

Разработка сложных информационных систем, с большим количеством приложений, связанных потоками информации самой различной структуры. XML — документы выполняют роль универсального формата для обмена информацией между отдельными компонентами большой программы. XML является базовым стандартом для нового языка описания ресурсов, RDF, позволяющего упростить многие проблемы в Web, связанные с поиском нужной информации, обеспечением контроля за содержимым сетевых ресурсов, создания электронных библиотек и т.д. XML может использоваться в обычных приложениях для хранения и обработки структурированных данных в едином формате. XML позволяет описывать данные произвольного типа и используется для представления специализированной информации. XML может служить мощным дополнением к HTML для распространения в Web «нестандартной» структурированной информации XML-документы могут использоваться в качестве промежуточного формата данных в трехзвенных системах при поиске информации в удаленных базах данных. Сегодня на рассмотрение W3C предложена спецификация нового языка запросов к базам данных XQL. Информация, содержащаяся в XML-документах, может изменяться, передаваться на машину клиента и обновляться по частям. Разрабатываемые спецификации XLink и Xpointer позволяют ссылаться на отдельные элементы документа, c учетом их вложенности и значений атрибутов. Использование стилевых таблиц (XSL) позволяет обеспечить независимое от конкретного устройства вывода отображение XML- документов и фильтрацию данных.

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

Историческисложилось таким образом, что в системах для обозначения этих командиспользовались символы "<" и ">", внутри которыхпомещались названия инструкций и их параметры. Сейчас такой способ обозначениятэгов является стандартным.

Например,для создания элемента Ivanov в имени заказчика используется тэг<CustumerName>. В программе это выглядит следующим образом:

<CustumerName>Ivanov </CustumerName>

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

<Custumer> 

<CustumerName>Ivanov </CustumerName> 

<phone>312-12-13<phone> 

<Company>BussinesTrade Consulti</Company> 

</Custumer> 

Можносоздать массив заказчиков, определив тег <Custumers>:

<Custumers> 

<Custumer> 

<CustumerName>Ivanov </CustumerName> 

<phone>312-12-13<phone> 

<Company>BussinesTrade Consulti</Company> 

</Custumer> 

<Custumer> 

<CustumerName>Petrov </CustumerName> 

<phone>315-15-16<phone> 

<Company>Trade Forest Company</Company> 

</Custumer> 

<Custumer> 

...... 

</Custumer> 

</Custumers> 

Изприведенного примера видно, что XML — документы подлежат четкой структуризациии имеют четкую иерархическую структуру следования элементов. Элементы имеютсвоих родителей — корневые элементы и наследников — дочерние элементы.

ДокументXML состоит из элементов. Элемент — это структурная единица XML- документа.Заключая данные об имени заказчика в тэги <CustumerName></CustumerName>, XML-процессор определит как элемент. Содержимым элементаCustumerName является значение. В нашем примере имеется два значения (Ivanov иPetrov) элемента CustumerName.

Контрольза правильностью использования порядка использования элементов осуществляетсяпри помощи специального набора правил, называемых DTD (Document TypeDefinition)- описаниями, которые используются программой клиента при анализедокумента.

Производяв последствии поиск в XML документе, программа клиента будет опираться наинформацию, заложенную в его структуру — используя элементы документа,определенные в DTD.

Вобщем случае XML- документы должны удовлетворять следующим синктатическимправилам:

В заголовке документа помещается объявление XML, в котором указывается язык разметки документа, номер его версии и дополнительная информация; Каждый открывающий тэг, определяющий некоторую область данных в документе обязательно должен иметь парный закрывающий тэг; XML учитывает регистр символов; Все значения атрибутов, используемых в определении тэгов, должны быть заключены в кавычки; Вложенность тэгов в XML строго контролируется, поэтому необходимо следить за порядком следования открывающих и закрывающих тэгов; Вся информация, располагающаяся между начальным и конечными тэгами, рассматривается в XML как данные и поэтому учитываются все символы форматирования ( пробелы, переводы строк, табуляции не игнорируются)

Вслучае, если элемент не содержит данных, т.е. является пустым, то начальный иконечные тэги такого элемента можно объединить в один. При этом не обязательноставить косую черту перед закрывающей угловой скобкой (например, ввышеприведенном примере отсутствие факса в компании пару тэгов <fax></fax>можно заменить на <fax/>;)

Принеобходимости, каждому элементу можно задать параметры, уточняющие егохарактеристики. При этом используются атрибуты элемента. Атрибут — это пара«название» = «значение», которую необходимо задавать приопределении элемента в начальном тэге. Пример:

<containerType=«20f»>123456</container >               двадцатифутовый контейнер 

<containerType =«30f „>654321</container>              тридцатифутовый контейнер 

ПросмотрXML документов осуществляется специальной программой анализатором. Насегодняшний день разработано около десятка подобных анализаторов. В своем новомбраузере Internet Explorer 5 фирма Microsoft уже предусмотрела анализ XMLдокументов.

Анализдокумента в Internet Explorer 5 осуществляется тремя вариантами: просмотраналогично HTML документу, форматирование документа с использованиемспециальных стилевых таблиц — XSL и анализ с помощью сценариев, написанных наJava Script ил VBScript.

Поискнужного элемента или поддерева осуществляется при помощи XQL запроса. XQLявляется частью XML и переводится как язык запросов для XML (XML QueryLanguage). Идет дискуссия об утверждении языка запросов в качествеобщепринятого стандарта, который может заменить SQL.

Синтаксисязыка запросов очень гибок и позволяет осуществлять поиск элемента как поназванию, значению атрибутов, содержанию, так и учитывать вложенность иположение в дереве элементов. При помощи запросов мы можем выделять из общегодерева необходимые нам элементы и применять к ним необходимые инструкции.Запрос возможно применять как к самому XML документу, так и к ссылкам URL.

Языкзапросов напоминает обычный способ определения пути к ресурсу — список узловдерева, разделенных символом “/». Для указания на текущий элементиспользуется символ ".", на родительский — "..", длявыделения всех дочерних элементов — символ "*", для выделенияэлемента, расположенного просто «ниже» по дереву(не важно на какомуровне вложенности) — "//". Условие на значение в запросе должнозаключаться в символы "[" и "]". Для выбора значенияатрибута в условии указывается символ @.

Примерыпростых XQL шаблонов:

"/Customer " корневой элемент «Customers/» возвращает дочерние элементы для элемента Customers «Customers //» список всех элементов, вложенных в Customers «container[@Type]» список элементов container, в котором определен атрибут Type «container[@Type =20f]» поиск всех двадцатифутовых контейнеров, т.е. элементов container, в котором значение атрибута Type равно «20f» «Customers[address]» список элементов Customers, которые содержат хотя бы один элемент address, выражение в квадратных скобках может быть составным.

Какмы видим, XML документ в отличие от EDIFACT сообщения позволяет более нагляднопредставить объектную модель данных. Использование языка описания XML запросов- XQL позволяет адекватно формализовать любой из существующих«бизнес» запросов (оформленных в виде стандартных документов) дляинформационных систем.

РазборXML документов в отличие от EDI-систем возможен стандартными анализаторами, чтозначительно удешевляет разработку новых информационных систем. Использованиевстроенных транспортных протоколов делает эти системы полностью совместимыми ссуществующими программными средствами и WEB технологиями.

/>/>Веб-страницы. Программирование (JavaScript,CSS, SSI, CGI, PHP)JavaScript

Чтотакое JavaScript

JavaScript- новый язык для составления скриптов, разработанный фирмой Netscape. С помощьюJavaScript Вы можете легко создавать интерактивные Web-страницы. В данномруководстве Вы увидите, что можно сделать с помощью JavaScript, и даже болеетого — увидите, как это сделано.

JavaScript- это не Java!

Многиелюди считают, что JavaScript — это то же самое, что и Java, лишь потому, чтоэти языки имеют схожие названия. На самом деле это не так. Я считаю, что сейчасбудет излишне показывать Вам все различия между этими языками — так чтозапомните лишь то, что JavaScript — это не Java.
Чтобы получить дополнительную информацию по затронутой теме, обратитесьпожалуйста к введению, опубликованному на сайте Netscape

РазмещениеJavaScript на HTML-странице

Кодскрипта JavaScript размещается непосредственно на HTML-странице. Чтобы увидеть,как это делается, давайте рассмотрим следующий простой пример:

<html>

<body>

<br>

Этообычный HTML документ.

<br>

 <script language=«JavaScript»>

   document.write(«А это JavaScript!»)

 </script>

<br>

Вновьдокумент HTML.

</body>

</html>

Спервого взгляда пример напоминает обычный файл HTML. Единственное новшествоздесь — конструкция:

 <script language=«JavaScript»>

   document.write(«А это JavaScript!»)

 </script>

Этодействительно код JavaScript. Чтобы видеть, как этот скрипт работает, запишитеданный пример как обычный файл HTML и загрузите его в браузер, имеющийподдержку языка JavaScript.

Аэто результат выполнения этого файла (если Вы используете браузер, имеющийподдержку JavaScript, то у Вас будет 3 строки):

Этообычный HTML документ.

Аэто JavaScript!

Вновьдокумент HTML.

События

Событияи обработчики событий являются очень важной частью для программирования наязыке JavaScript. События, главным образом, инициируются теми или инымидействиями пользователя. Если он щелкает по некоторой кнопке, происходитсобытие «Click». Если указатель мыши пересекает какую-либоссылку гипертекста — происходит событие MouseOver. Существует несколькоразличных типов событий.
Мы можем заставить нашу JavaScript-программу реагировать на некоторые из них. Иэто может быть выполнено с помощью специальных программ обработки событий. Так,в результате щелчка по кнопке может создаваться выпадающее окно. Это означает,что создание окна должно быть реакцией на событие щелка — Click.Программа — обработчик событий, которую мы должны использовать в данном случае,называется onClick. И она сообщает компьютеру, что нужно делать, еслипроизойдет данное событие. Приведенный ниже код представляет простой примерпрограммы обработки события onClick:

<form>

<inputtype=«button» value=«Click me»onClick=«alert('Yo')»>

</form>

CSS

Немногоо CSS

Так что это такое — СSS? Cascading Style Sheets (ТаблицыКаскадных Стилей) — это язык, содержащий набор свойств для описания внешнеговида любых HTML документов. С его помощью дизайнер имеет полный контроль надстилем и расположением каждого элемента веб страницы, что проще и гораздофункциональнее использования обычного набора HTML тегов. Приведу пример: Вамнужно создать жирный красный подчеркнутый текст.

ПРИМЕРHTML:

<fontcolor=«red»><strong><u> Какой-то текст</u></strong></font>

Аесли подобный стиль нужно использовать несколько раз? Хорошо если раз 5, а если10-20? Вот тут нам и поможет СSS. Существует три вида таблиц стилей: Внутренниетаблицы стилей, Глобальные таблицы стилей и Связанные таблицы стилей.Внутренние таблицы стилей (Inline Style Sheets) при помощи специальногоатрибута помещаются прямо в HTML теги. Глобальные (Global Style Sheets)определяют стиль элементов во всем документе. Связанные (Linked Style Sheets)могут быть использованы для нескольких документов сразу и хранятся во внешнемфайле. Подробнее обо всем этом написано ниже.

Структураи правила

Селекторы (Selectors):

Синтаксис:
селектор {свойства}

Любойэлемент HTML — это возможный CSS селектор. Свойства селектора определяют стильэлемента, для которого он определен.

ПРИМЕР:

H1{color:red; size:20pt;}

Всеэлементы H1 в документе будут красного цвета, размером в 20 точек (pt, point).

Классовые селекторы (Class Selectors):

Синтаксис:
селектор.класс {cвойства}

CLASS — атрибут элемента в HTML, определяющий его класс. ВCSS можно описать собственные стили для различных классов одних и тех жеэлементов.

ПРИМЕР:

H1.blue{color:blue; size:20pt;}

Всеэлементы H1 с атрибутом CLASS=«blue» станут синими.

Классымогут так же быть описаны без явного привязывания их к определенным элементам.

Синтаксис:
.класс {свойства}

ПРИМЕР:

.green{color:green;}

Вданном случае все элементы с атрибутом CLASS=«green» станут зелеными.

ID селекторы (ID Selectors):

Cинтаксис:
#id {свойства}

ID — индивидуально именованный стиль. C его помощьюможно создавать стилистические исключения cреди элементов одного класса.

Идентификаторыиспользуются в основном для придания одному или нескольким элементам одногокласса индивидуальных свойств. Скажем, Вы создали класс blue — синий курсив. НоВам понадобился жирный подчеркнутый текст синим курсивом. Конечно, можносоздать новый класс, но зачем? Проще описать ID. Например «boldunderline».И все элементы класса blue с значением ID «boldunderline» станутжирным подчеркнутым синим курсивом. Произойдет как бы синтез свойств классаblue и идентификатора boldunderline.

ПРИМЕР:

<html>

<head>

<title>Пример CSS </title>

</head>

<style>

.blue{color:blue; font-style:italic}

#boldunderline{text-decoration:underline; font-weight:bold}

</style>

<body>

<pclass=«blue»> Здравствуйте, это моя домашняя страница. </p>

<pclass=«blue» id=«boldunderline»> Пока еще в стадииразработки… </p>

<pid=«boldunderline»>… Но скоро откроется </p>

</body>

</html>

Каквидно из примера, атрибут ID может быть использован без указания класса(последний параграф примера. Тогда параграф будет обладать только свойствами ID«boldunderline» (в примере — жирный, подчеркнутый текст).

Контекстуальные селекторы (Contextual Selectors):

Контекстныеселекторы — это сочетания нескольких обыкновенных селекторов. Стиль задаетсятолько элементам в заданной последовательности в зависимости от каскадногопорядка.

ПРИМЕР:

PEM {color:silver;}

Вданном примере все элементы EM внутри элементов P будут иметь заданный стиль.

Придание нескольким элементам одинаковых свойств:

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

ПРИМЕР:

h1,h2,h3,p,strong{color:green; font-style:italic;}

Всеэлементы h1, h2, h3, p и strong будут зелеными.

Псевдоклассы и псевдоэлементы :

Синтаксис:
селектор: псевдокласс { свойства }
селектор.класс: псевдокласс { свойства }
селектор: псевдоэлемент { свойства }
селектор.класс: псевдоэлемент { свойства }

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

Список псевдоклассов и псевдоэлементов :

AnchorPseudo Classes — эти псевдоклассыэлемента <a href=" ">, обозначающего ссылку. Псевдоклассы этогоэлемента: (ссылка), active (активная ссылка), visited (посещенный ранее URL),hover (псевдокласс, возникающий при поднесении курсора к ссылке, не работает вНетскейпе).

FirstLine Pseudo-element — first-line.Этот псевдоэлемент может быть использован с block-level элементами (p, h1 ит.д.). Он изменяет стиль первой строки этих элементов.

FirstLetter Pseudo-element — first-letter.Похож на first-line, но влияет не на всю строку, а только на первый символ.

ПРИМЕР:

a:link,a:visited{color:blue}

a:active{color:red}

a:hover{text-decoration:none}

Вданном примере все элементы Anchor (ссылки) будут синими. При нажатии (вактивном состоянии) поменяют цвет на красный. И при подведении курсора мышкиисчезнет подчеркивание.

Примечание: описаниянескольких свойств для одного селектора, контекстуального селектора, класса,индивидуально именованного стиля или группы объединенных селекторов отделяютсядруг от друга точкой с запятой ";".

ВнутренниеТаблицы Стилей

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

ПРИМЕРHTML:

<fontcolor=«blue» size=«3» face=«Arial»> Вперед вбудущее </font>

ПРИМЕРINLINE STYLE SHEET:

<fontstyle=«color:blue; font-size:12pt; font-family:Arial»> Вперед вбудущее </font>

Какможно заметить, код Inline Style Sheet получился больше чем HTML. Поэтому ISSследует использовать только если необходимо задать определенному элементу свойиндивидуальный стиль, существующий в классификации CSS и нереализованный вHTML. Или же при необходимости абсолютно позиционировть данный элемент.

ГлобальныеТаблицы Стилей

Глобальныестили задают вид элементов всего документа. Для этого используется тег<STYLE type=«text/css»>. Он размещается в заголовке документа.

ПРИМЕР:

<html>

<head><title> Пример Глобальных Таблиц Стилей </title>

</head>

<STYLEtype=«text/css»>

h1{color:red;font-style:italic; font-size:32px}

.blue{color:blue}

#bold{font-weight:bold}

</STYLE>

<body>

<h1>Этот заголовок написан крупным красным курсивом </h1>

Вот<font class=«blue»> это </font> слово — синие, a <fontid=«bold»> это</font> — жирное.

</body>

</html>

Вданном примере все элементы H1 будут написаны крупным красным курсивом, всеэлементы с указанным классом BLUE будут синими, а все элементы сидентификатором ID=«Bold» станут жирными. Для простоты вместо<STYLE type=«text/css»> можно использовать просто тег<STYLE>, что менее грамотно.

СвязанныеТаблицы Стилей

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

ПРИМЕР:

Файлstyles.css

<STYLEtype=«text/css»>

body{background:black; font-size:9pt; color:red; font-family:Arial Black}

.base{color:blue;font-style:italic}

h1{color:white}

#bold{font-weight:bold}

</STYLE>

Всамих же HTML документах делается ссылка на этот файл при помощи тега<LINK>. Выглядит это так: <LINK rel=«STYLESHEET»TYPE=«text/css» HREF=«путь до файла»>

ПРИМЕР:

ФайлIndex.html

<html>

<head>

<title>Просто еще один пример </title>

</head>

<LINKrel=«stylesheet» type=«text/css»href=«styles.css»>

<body>

СодержаниеДокумента

</body>

</html>

SSI

SSI расшифровывается как Server Side Include.SSI — это набор команд, позволяющий включить в страницу информацию, недоступнуюсредствами HTML, такую как вывод программ, значения переменных окружения истатистику по файлам (размер, дата создания и др.). Все это и более позволяютделать CGI-скрипты, но зачем писать целый скрипт для получения размера файла,если можно воспользоваться SSI? 

SSIработает очень просто: при получении запроса на документ, содержащийSSI-директивы, http-сервер обрабатывает документ, выполняет все SSI-директивы,а получившийся в результате документ возвращает клиенту. Http-сервер не проверяетавтоматически все документы на наличие SSI-директив, а только те, которыеотносятся к типу, указанному в настройках сервера.

Дляуказания http-серверу, какие документы считать содержащими SSI-директивы, в srm.conf,находящемся в /etc/httpd/conf надо раскомментировать следующие строки:

AddType text/html .shtml

AddHandler server-parsed .shtml

После этого все документы с расширением .shtml будутпроверяться на SSI-директивы. Но удобнее будет определить чтобы все .html-файлымогли содержать SSI. Это делается добавление в srm.conf следующихстрочек:

AddType text/html .html # не обязательно,т.к. он и так описан.

AddHandler server-parsed .html

Теперь надо разрешить выполнение SSI в каталоге, в котором лежаттвои файла. Найди в access.conf описание каталога, в котором лежат твоиhtml'ы и добавь в его Options директиву Includes:

#было так

Options Indexes

#стало так

Options Indexes Includes

Если твой каталог не прописан, его надо прописать. Почитай доку поApache, чтоб узнать как это делается.  А если у тебя нет возможности изменять srm.confили access.conf, т.е. ты не root, тогда за пивом, а потом кадмину. 

SSI-директивы включаются в html-код в виде комментариев, ноопределенного формата:

<!--#SSI_директива=«параметры»-->

Использовать можно следующие SSI-директивы:

echo var

Используется для вывода значения переменной окружения.

Твой IP — <!--#echovar=«REMOTE_ADDR»--> <BR>

Твой браузер — <!--#echovar=«HTTP_USER_AGENT»--> <BR>

Мой сервер — <!--#echovar=«SERVER_NAME»--> <BR>

Ты пришел со страницы — <!--#echovar=«HTTP_REFERER»--> <BR>

А вот вывод:

Твой IP — 193.125.78.114

Твой браузер — Mozilla/4.0 (compatible;MSIE 5.01; Windows NT 5.0)

Мой сервер — www.citforum.ru

Ты пришел со страницы — (none)

include file

include virtual

Включает в html-файл в месте, где идет вызов SSI, содержимоеуказанного файла. Отличие include file от include virtual в том,что в первом случает используется файл, находящийся в том же каталоге, что иhtml-файл, во втором случает указывается путь к файлу относительно текущегокаталога. Если с помощью include file или include virtualвключается cgi-скрипт, то в содержимое страницы попадет вывод cgi-скрипта, а неего содержание.

fsize file

Вставляет размер указанного файла.

Размер файла этой страницы:

<!--#fsizefile=«ssi.shtml»--> <BR>

Вывод:

Размер файла этой страницы: 12k

flastmod file

Вставляет время последней модификации указанного файла.

Время последней модификации файла этойстраницы:

<!--#flastmod file=«ssi.shtml»--><BR>

Вывод:

Время последней модификации файла этойстраницы: Wednesday, 21-Jun-2000 16:31:33 MSD

exec cmd

exec cgi

Запускает внешнюю программу (exec cmd) или cgi-скрипт (execcgi) и вставляет в содержимое страницы вывод.

config errmsg

config sizefmt

config timefmt

Изменяет различный параметры конфигурации SSI. config errmsgизменяет стандартное сообщение об ошибке на введенное пользователем. Сообщениеоб ошибке возникает при неправильном выполнении SSI-директивы, например приотсутствии cgi-скрипта, который ты пытаешься запустить.

Это стандартная ошибка при запускескрипта, которого нет: <BR>

<!--#execcgi="/cgi-bin/nonexistence.pl"--> <BR>

А теперь заменим сообщение об ошибке иповторим: <BR>

<!--#config errmsg=«Ошибка, пишите<a href=mailto:dh@null.ru>автору ошибки</a>»-->

<!--#execcgi="/cgi-bin/nonexistence.pl"--> <BR>

Вывод:

Это стандартная ошибка, возникающая призапуске скрипта, которого нет:
[an error occurred while processing this directive]

А теперь заменим сообщение об ошибке иповторим:

Ошибка, пишите автору ошибки

Директива config sizefmt изменяет формат вывода размерафайла.

Размер файла этой страницы в килобайтах:

<!--#configsizefmt=«abbrev»-->

<!--#fsizefile=«ssi.shtml»--> <BR>

Размер файла этой страницы в байтах:

<!--#configsizefmt=«bytes»-->

<!--#fsizefile=«ssi.shtml»--> <BR>

Вывод:

Размер файла этой страницы в килобайтах:12k

Размер файла этой страницы в байтах:12,463

Директива config timefmt меняет формат вывода даты ивремени.

Время модификации файла этой страницы всекундах с 01.01.1970:

<!--#configtimefmt="%s"-->

<!--#flastmodfile=«ssi.shtml»--> <BR>

Время модификации файла этой страницы вчитабельном виде:

<!--#config timefmt="%d.%m.%Y%H:%M:%S"-->

<!--#flastmodfile=«ssi.shtml»--> <BR>

Вывод:

Время модификации файла этой страницы всекундах с 01.01.1970: 961590693

Время модификации файла этой страницы вчитабельном виде: 21.06.2000 16:31:33

printenv

Выводитвсе переменные окружения. Параметров не имеет.

Список переменных окружения:<BR>

<!--#printenv -->

Вывод:

Список переменных окружения:

DOCUMENT_ROOT=/webdata/citforum/htdocsHTTP_ACCEPT=*/* HTTP_ACCEPT_ENCODING=gzip, deflate HTTP_ACCEPT_LANGUAGE=ukHTTP_CACHE_CONTROL=max-age=432000 HTTP_HOST=www.citforum.ruHTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)HTTP_VIA=1.0 proxy.univ.kiev.ua:3128 (Squid/2.3.STABLE2)HTTP_X_FORWARDED_FOR=10.25.0.7 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:/home/andy/bin:/usr/local/pgsql/binREMOTE_ADDR=193.125.78.114 REMOTE_HOST=red-gw.univ.kiev.ua REMOTE_PORT=2205SCRIPT_FILENAME=/webdata/citforum/htdocs/internet/html/ssi.shtmlSERVER_ADDR=195.230.75.98 SERVER_ADMIN=info@citforum.ruSERVER_NAME=www.citforum.ru SERVER_PORT=80 SERVER_SIGNATURE=SERVER_SOFTWARE=Apache/1.3.12 (Unix) UNIQUE_ID=OlXJbMPmS2IAAI-qcYQGATEWAY_INTERFACE=CGI/1.1 SERVER_PROTOCOL=HTTP/1.0 REQUEST_METHOD=GETQUERY_STRING= REQUEST_URI=/internet/html/ssi.shtmlSCRIPT_NAME=/internet/html/ssi.shtml DATE_LOCAL=05.01.2001 16:17:32DATE_GMT=05.01.2001 13:17:32 LAST_MODIFIED=21.06.2000 16:31:33DOCUMENT_URI=/internet/html/ssi.shtml DOCUMENT_PATH_INFO= USER_NAME=andreyaDOCUMENT_NAME=ssi.shtml

set var

Устанавливает значение переменной окружения. Формат такой setvar=«ИМЯ_ПЕРЕМЕННОЙ» value=«ЗНАЧЕНИЕ».

Значение переменной SERVER_NAME:

<!--#echo var=«SERVER_NAME»--><BR>

Сменим значение:

<!--#set var=«SERVER_NAME»value=«www.dhls.ru» --><BR>

Значение переменной SERVER_NAME:

<!--#echo var=«SERVER_NAME»--><BR>

Вывод:

Значение переменнойSERVER_NAME:www.citforum.ru

Сменим значение:

Значение переменной SERVER_NAME:www.dhls.ru

if/else

Наличие такой команды не может не радовать...  Применяется дляуправления выводом страницы по условию. Синтаксис такой:

<!--#if expr=«УСЛОВИЕ1»-->

HTML-код, который будет выводиться, еслиУСЛОВИЕ1 истинно

<--#elif expr=«УСЛОВИЕ2»-->

HTML-код, который будет выводиться, еслиУСЛОВИЕ1 ложно, а УСЛОВИЕ2 истинно

<--#else -->

HTML-код, который будет выводиться, есливсе условия ложны

<--#endif -->

Условие — это либо строка, которая является истинной, еслинепустая, или набор операторов сравнения строк. Операторы могут быть =,!=,<,<=,>и >. Если вторая строка заключена в "/"(слэши), тоусловие истинно, если в первой строке встречается хоть одно вхождение второйстроки. Можно объединять несколько операторов сравнения с помощью операторов &&(И)и ||(ИЛИ). Для группирования условий используются "()"(скобки).

Броузер:<b>

<!--#if expr="$HTTP_USER_AGENT=/Nav/|| $HTTP_USER_AGENT=/Mozilla/" -->

Netscape Navigator

<!--#elifexpr="$HTTP_USER_AGENT=/MSIE/" -->

Internet Explorer

<!--#else -->

Неизвестный (<!--#echovar=«HTTP_USER_AGENT» -->)

<!--#endif -->

</b>

Вывод:

Броузер:Netscape Navigator

CGI

CGI- Common Gateway Interface являетсястандартом интерфейса (связи) внешней прикладной программы с информационнымсервером типа HTTP, Web сервер.
Обычно гипертекстовые документы, извлекаемые из WWW серверов, содержатстатические данные. С помощью CGI можно создавать CGI-программы, называемые шлюзами,которые во взаимодействии с такими прикладными системами, как системауправления базой данных, электронная таблица, деловая графика и др., смогутвыдать на экран пользователя динамическую информацию.
Программа-шлюз запускается WWW сервером в реальном масштабе времени. WWW серверобеспечивает передачу запроса пользователя шлюзу, а она в свою очередь,используя средства прикладной системы, возвращает результат обработки запросана экран пользователя. Программа-шлюз может быть закодирована на языках C/C++,Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. Как выполнимыймодуль, она записывается в поддиректорий с именем cgi-bin WWW сервера.
Передача данных шлюзам

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

Запросыдля различных методов

Информацияшлюзам передается в следующей форме:

имя=значение&имя1=значение1&..,

гдеимя — имя переменной (из оператора FORM, например), и значение — ее реальноезначение. В зависимости от метода, который используется для запроса, эта строкапоявляется или как часть URL (в случае метода GET), или как содержимое HTTPзапроса (метод POST). В последнем случае, эта информация будет послана шлюзу встандартный поток ввода.

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

Пример

Возьмемрезультат работы формы с методом POST (METHOD=«POST») в качествепримера. Пусть получено 7 байт, закодированных примерно так:
a=b&b=c.

Вэтом случае, сервер установит значение CONTENT_LENGTH равным 7 и CONTENT_TYPE вapplication/x-www-form-urlencoded. Первым символом в стандартном потоке вводадля шлюза будет «a», за которым будет следовать остатокзакодированной строки.

Аргументыкомандной строки

Шлюзв командной строке от сервера получает:

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

Ключевыеслова, имена полей формы и значения передаются раскодированными (из HTTP URLформата кодирования) и перекодированными в соответствии с правилами кодированияBourne shell, так что шлюз в командной строке получит информацию в том виде,как она есть, без необходимости осуществлять дополнительные преобразования.

Запросыоператора FORM

Запросыоператора FORM обрабатываются таким образом, что каждый параметр, отвечающий заимя поля, оканчивается знаком равенства, а остаток представляет собой значениеэтого параметра. Если присутствует что либо после имени скрипта (шлюза), то этаинформация передается в качестве первого параметра. Иначе первый параметр будетпуст.

Примеры:

 /htbin/foo/x/y/z?name1=value1&name2=value2

вызываетсякак:

 /.../foo /x/y/z name1= value1 name2= value2

а

 /htbin/foo?name1=value1&name2=value2

вызываетсякак:

 /.../foo '' name1= value1 name2= value2

CGIпеременные окружения

Следующиепеременные окружения не являются специфичными по типу запросов иустанавливаются для всех запросов.

SERVER_SOFTWARE

Названиеи версия информационного сервера, который отвечает на запрос (и запускаетшлюз). Формат: имя/версия

SERVER_NAME

Имяхоста, на котором запущен сервер, DNS имя, или IP адрес в том виде, в которомон представлен в URL.

GATEWAY_INTERFACE

ВерсияCGI спецификации на тот момент, когда компилировался сервер. Формат: CGI/версия

Следующиепеременные окружения являются специфичными для разных запросов, и заполняютсяперед вызовом шлюза:

SERVER_PROTOCOL

Имяи версия информационного протокола, в котором пришел запрос. Формат:протокол/версия

SERVER_PORT

Номерпорта, на который был послан запрос

REQUEST_METHOD

Метод,который был использован для запроса. Для HTTP, это «GET», «HEAD»,«POST», и т.д.

PATH_INFO

Дополнительнаяинформация о пути, которую передал клиент. Другими словами, доступ к шлюзуможет быть осуществлен по виртуальному пути, за которым следует некотораядополнительная информация. Эта информация передается в PATH_INFO.

PATH_TRANSLATED

Серверпередает преобразованную версию PATH_INFO, которая включает в себя путь,преобразованный из виртуального в физический.

SCRIPT_NAME

Виртуальныйпуть к шлюзу, который должен выполняться, используемый для получения URL.

QUERY_STRING

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

REMOTE_HOST

Имяхоста, производящего запрос. Если сервер не имеет такой информации, он долженустановить REMOTE_ADDR, а это поле оставить не установленным.

REMOTE_ADDR

IPадрес хоста, производящего запрос.

AUTH_TYPE

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

REMOTE_USER

Используетсяв ситуациях, аналогичных предыдущему случаю, для хранения имени пользователя.

REMOTE_IDENT

ЕслиHTTP сервер поддерживает идентификацию пользователя согласно RFC 931, то этапеременная будет содержать имя пользователя, полученное от сервера.

CONTENT_TYPE

Длязапросов, которые содержат дополнительную добавочную информацию, такие как HTTPPOST и PUT, здесь содержится тип данных этой информации.

CONTENT_LENGTH

Длинаданных, которую передает клиент.

Вдополнение к этим, если запрос содержит дополнительные поля заголовка запроса,они помещаются в переменные окружения с префиксом HTTP_, за которым следует имязаголовка. Любые символы '-' в заголовке меняются на символы подчеркивания '_'.Сервер может исключить любые заголовки, которые он уже обработал, такие какAuthorization, Content-type, и Content- length. Если необходимо, сервер можетисключить любые (или вообще все) дополнительные поля заголовка в случае, когдаих включение может привести к превышению предела размера переменных окружения.Примером такой переменной может служить переменная HTTP_ACCEPT, которая былаопределена в спецификации CGI/1.0. Другим примером может служить заголовокUser-Agent.

HTTP_ACCEPT

СписокMIME типов, которые клиент может обработать, как задано в HTTP заголовках.Другие протоколы должны получить эту информацию из других мест (если она имнеобходима). Каждый тип в этом списке должен быть отделен запятой согласно HTTPспецификации. Формат: тип/подтип, тип/подтип

HTTP_USER_AGENT

Просмотрщик,который использует клиент для посылки запроса. Общий формат: программа/версиябиблиотека/версия.

Выводинформации шлюзом

Основныеконцепции

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

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

Заголовоквыходного потока

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

Заголовкис синтаксическим разбором

Выводшлюза начинается с маленького заголовка. Он содержит текстовые строки, в том жеформате, как и в HTTP заголовке и завершается пустой строкой (содержащей толькосимвол перевода строки или CR/LF).

Любыестроки заголовка, не являющиеся директивами сервера, посылаются непосредственноклиенту. В настоящий момент, CGI спецификация определяет три директивы сервера:

Content-type

MIMEтип возвращаемого документа.

Location

Этополе используется в случае, когда необходимо указать серверу, что возвращаетсяне сам документ, а ссылка на него.

Еслиаргументом является URL, то сервер передаст клиенту указание на перенаправлениезапроса. Если аргумент представляет собой виртуальный путь, сервер вернет клиентузаданный этим путем документ, как если бы клиент запрашивал егонепосредственно.

Status

Этадиректива используется для задания серверу HTTP/1.0 строки-статус, котораябудет послана клиенту. Формат: nnn xxxxx, где nnn — 3-х цифровой статус-код, и xxxxxстрока причины, такая, как «Forbidden» (Запрещено).

Примеры

Предположим,имеется некоторый текстовый конвертер в HTML. Когда он оканчивает свою работу,он должен произвести следующий вывод в стандартный выходной поток:

— начало вывода ---

Content-type:text/html

— конец вывода ---

Теперьрассмотрим шлюз, который, в некоторых случаях, должен выдать документ/path/doc.txt с данного сервера, как если бы он был непосредственно востребованклиентом через server:port/path/doc.txt. В это случае вывод шлюза будеттаков:

— начало вывода ---

Location:/path/doc.txt

— конец вывода ---

Наконец,предположим, что шлюз возвращает ссылки на gopher сервер, например наgopher://gopher.ncsa.uiuc.edu/. Вывод шлюза будет следующий:

— начало вывода ---

Location:gopher://gopher.ncsa.uiuc.edu/

— конец вывода ---

Non-parsedheaders

Допустимтеперь, что у нас имеется шлюз, который общается с клиентом непосредственно.Как уже отмечалось, его имя должно начинаться с префикса nph- и он долженвозвращать допустимый HTTP заголовок. В этом случае, если доступ к шлюзу былосуществлен со значением SERVER_PROTOCOL равным HTTP/1.0, его вывод долженудовлетворять HTTP/1.0:

— начало вывода ---

HTTP/1.0200 OK

Server:NCSA/1.0a6

Content-type:text/plain

— конец вывода ---

Примечание!Материал подготовлен на основедокумента «CGI Specification at NCSA»

PHP

PHP- язык написания сценариев, внедренный в HTML. Многое из синтаксисазаимствовано из C, Java и Perl, с добавлением специфичных для PHP возможностей.Задача языка состоит в том, чтобы дать возможность Web-разработчикам легко ибыстро создавать динамично изменяемые html-страницы.

Что можетделать PHP3?

Возможносамая сильная и значимая возможность в PHP3 — уровень интеграции с базамиданных. Написание веб-страницы работающей с базой данных невероятно проста. Внастоящее времени поддерживаются следующие базы данных:

          Oracle

                               Adabas D

          Sybase

                               FilePro

          mSQL

                               Velocis

          MySQL

                               Informix

          Solid

                               dBase

          ODBC

                               Unix dbm

          PostgreSQL

КраткаяИстория PHP

PHPбыл задуман где-то в конце 1994 года Расмусом Ледорфом(Rasmus Lerdorf). Ранниеневыпущенные версии использовались на его домашней странице для того, чтобыследить за тем кто просматривал его интерактивное резюме. Первая используемаяверсия cтала доступна где-то в начале 1995 и была известна как Personal HomePage Tools. Она состояла из очень упрощенного движка синтаксическогоанализатора, который понимал только несколько специальных макрокоманд и рядутилит, которые затем были в общем использовании на домашних страницах.Гостевые книги, счетчики и некоторые другие дополнения.

Довольнотрудно дать какую-либо жесткую статистику, но отмечено, что к 1996 г. PHP/FIбыл использован по крайней мере на 15,000 веб-сайтах во всем мире. В середине1997г. эта цифра выросла до более чем 50,000. В середине 1997г. такженаблюдалось изменение в разработке PHP. Из частного любимого проекта Расмуса,которому способствовала горстка людей, это превратилось в намного болееорганизованную рабочую группу. Синтаксический анализатор был заново переписанЗевом Сураски(Zeev Suraski) и Анди Гутмансом(Andi Gutmans), и этот новыйсинтаксический анализатор стал основой для PHP Версии 3.

Сегодня( в середине -1998г.) как PHP/FI так и PHP3 поставляется с рядом коммерческих продуктовтипа C2's StrongHold web server и RedHat Linux и консервативной оценкой,основанной на экстрaполяции чисел, предоставленных NetCraft было бы то, что PHPиспользуется на 150,000 cайтах во всем мире. В перспективе, их больше чемсайтов, запущенных на Netscape's flagship Enterprise server в Интернете.

/>/>Модульность и ортогональность сиспользованием существующих технологий.

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

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

При разработке PHP-скриптов и приложений рекомендуетсядля наиболее часто используемых участков кода создавать функции и выносить их вотдельные библиотеки функций, а так же серверно-зависимые настройки, хосты базданных, пароли и имена для аутентификации выносить в конфигурационные файлы,для которых следует определить отдельный определенный класс. Таким образом мыполучаем масштабируемый, модульный и легко переносимый код.

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

/>/>Веб-приложения.

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

/>/>Общие требования к страницам сайта.

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

размер одной страницы. Средний размер страницы рекомендуется в среднем делать не более 60Кб, для сплэш-страниц и презентационных страниц размер может быть до70-90Кб. Графика. Не рекомендуется перегружать страницу графикой и флэш-презентациями сверх необходимого, а так же излишней графикой. Прозрачная навигация. Навигация на сайте должна быть прозрачной, т.е. интуитивно понятной и достаточно простой. В графическом меню обязательно должен быть прописан альтернативный текст для пользователей текстовых браузеров и для тех кто любит отключать графику на страницах. Разбивка текста. Большие текстовые блоки следует разбивать на страницы, которые содержат 3-4 экрана, опять же из соображений размера – они быстро выкачиваются, а так же удобочитаемости.

4.б.8.Мета-теги.

Метатегиесть эквивалент соответствующих полей HTTP-заголовка и широко используются дляпереопределения стандартных записей.

META-тагиимеют два возможных атрибута

-     <METAHTTP-EQUIV=«имя» CONTENT=«содержимое»>

-     - <META NAME=«имя»CONTENT=«содержимое»>

META-тагидолжны находиться в заголовке HTML-документа между <HEAD> и </HEAD>(особенно это важно для документов, использующих фреймы).

Наиболееполезные с точки зрения применения метатеги следующие:

<METAHTTP-EQUIV=«Refresh» Content=«3,URL=http://www.name.com/page.html»>

чтоэквивалентно HTTP-заголовку

Refresh:3; URL=http://www.name.com/page.html

Примертипичного заголовка с мета-тэгами:

<!doctypehtml public "-//W3C//DTD HTML 4.0 Transitional//EN">

<head>

<metahttp-equiv=«Content-Type» content=«text/html;charset=windows-1251»>

<metaname=«language» content=«en,ru,ua»>

<metaname=«robots» content=«ALL»>

<metaname=«rating» content=«GENERAL»>

<metaname=«distribution» content=«GLOBAL»>

<metaname=«classification» content=«Higher Education»>

<metaname=«reply-to» content=«www@www.univ.kiev.ua»>

<metaname=«revisit-after» content=«10 days»>

<metaname=«description» content=«Taras Shevchenko Kyiv University isan institution of higher education that trains specialists in many fields ofknowledge and carries out research. Although this description can be applied toany other institution of similar kind, Kyiv University enjoys a special statusamong the establishment of higher learning in Ukraine. It is the number-oneUkrainian university, and a major centre of advanced learning and progressivethinking. It consists of more faculties and departments than any other schoolin Ukraine and provides training of specialists in a greater number of fieldsthan any other comparable Ukrainian educational institution. For many years theUniversity has been generating progressive ideas, shaping Ukrainian intellect,and providing champions of upheld national liberation activity inUkraine.»>

<metaname=«KeyWords» content=«Kyiv University, University, Ukraine,Higher education, fundamental science, Taras Shevchenko, Science,research»>

/>/>Совместимость с различными браузерами.

Теперьдавайте поговорим о браузерах. А что о них говорить, скажете Вы, и так все ясно- это программа, при помощи которой мы смотрим Web-странички. Ну что же, это правильно,основное их предназначение заключается в этом — просмотре Web-страничек. Нопочему же в мире тогда так много броузеров? И почему они показывают страничкипо-разному?

Давайтевспомним. Что лежит в основе Web-страничек? Верно, язык HTML, и определятся онкак текст в формате ASCII со вставкой специальных разметочных кодов (илитэгов). И когда броузер отображает страничку, то он находит эти коды ивыполняет соответствующие им действия (например, встречая тэг <b>начинает вывод последующего текста полужирным шрифтом, а встречая </b> — прекращает это делать). Полный набор таких тэгов называется спецификацией иподдерживается WWW-консорциумом, в который входят все основные компании,разрабатывающие программное обеспечение для Internet (в том числе, и Microsoftс Netscape). В идеале, все браузеры должны удовлетворять данным спецификациям,но, к сожалению, реальная жизнь и конкуренция между ведущими производителямиброузеров вносят свои коррективы.

Напомню,что первоначально HTML позиционировался как язык логической разметки текста,независимый от устройства вывода. То есть тэги воспринимались как указание квыделению части текста некоторым образом. Отсюда в языке имеется множество т.н.логических тэгов типа <strong>, <em>,:, к сожалению, редкоприменяющихся. Фраза «независимый от устройства вывода» обозначает,что результат интерпретации HTML-кода может быть выведен не только на экран, нои, к примеру, на звуковую карту (когда компьютер сам будет читать Вамсодержимое HTML-странички) или на специальное устройство, воспроизводящеесодержимое странички кодом Брайля. Но получилось так, что язык HTML, в концеконцов, превратился в язык описания страниц на экране компьютера.

Внастоящий момент имеются два браузера, особенности которых должен учитыватьweb-дизайнер при изготовлении страничек. Это «Netscape Navigator» и«Microsoft Internet Explorer» (а вдруг кто не знает   На самом делебраузеров гораздо больше, но они все вместе занимают всего около 1% рынка и,как правило, стремятся к совместимости с одним из двух лидеров. Между собойлидирующие браузеры делят рынок в соотношении примерно 75/25 (на данный моментлидирует Internet Explorer). Так что, в дальнейшем будут рассматриваться толькоэти программы.

Первоеправило профессионального web-дизайна

Для чего же мы должны учитывать то, как смотрятся нашистранички в обоих браузерах, если имеется стандарт языка HTML, и все ониобязаны правильно просматривать код? А в том-то и дело, что интерпретируют оникод по-разному (иногда очень по-разному), причем не только версии разныхбраузеров, но и разные версии одного и того же браузера. Причиной этого явиласьконкуренция компаний, когда они вводили новые тэги для повышенияконкурентоспособности своих продуктов. И как следствие любой закрытойпрограммы, они по разному понимают значение тех или иных тэгов.

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

Второеправило профессионального web-дизайна

Кромеэтого, приходится также учитывать тот факт, что пользователи имеют компьютеры сразличной аппаратной конфигурацией. Я не имею ввиду, что кто-то ходит по Web на286 машине (а вдруг правда? , но есть много вполне современных компьютеров,которые обладают низкой разрешающей способностью. За примерами далеко ходить ненадо — ноутбук. Большое их количество выпускается с черно-белым экраном, ацветные ноутбуки чаще всего ограничены палитрой в 256 цветов. Или, например,палмтопы (становящиеся популярными карманные компьютеры) под управлениемWindows CE — они изначально были черно-белыми.

Вот,добрались и до второго правила — профессиональный Web-дизайнер долженпросматривать странички при различном количестве цветов. И в случаенеобходимости делать странички с использованием только безопасной палитры.

Третьеправило профессионального web-дизайна

Всестранички принадлежат одной большой объединенной сети (WWW называется , и вэтой сети находятся совершенно разные компьютеры: IBM PC-совместимые, AppleMacintosh, различные версии UNIX, Amiga,: Да и все что угодно. И все этиплатформы, так скажем, немного отличаются при выводе графики на экран. Вряд лишрифт в Linux будет точно таким же, как в Windows, да и палитра цветов поумолчанию может отличаться, и алгоритм дайзеринга при выводе на экран, и: Вобщем, если сайт важный и представляет интерес для широкого кругапользователей, то обязательно протестируйте сайт на разных платформах и подразными операционными системами. Это было третье правило профессиональногоWeb-дизайнера  

Ине забывайте про текстовые браузеры, самым известным представителем которыхявляется Lynx. Сайт может быть сколь угодно красив, но что от этого толку, еслиего не увидят! Поэтому всегда думайте о том, как сайт будет выглядеть втекстовом варианте. Навигация должна оставаться простой и понятной. Идостигается это простыми способами: если у вас меню в виде картинки, то неполенитесь снабдить все картинки подписями, а если не получается, топродублируйте меню текстовыми ссылками внизу страницы. Владельцы текстовыхбраузеров будут счастливы   И заметьте, что ни один из текстовых браузеров неотображает таблицы, а текст внутри ячеек выводит сплошным потоком (слеванаправо и сверху вниз). То же самое с фреймами.

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

 

 

/>/>15.      Конфигурация и управление веб-серверами./>/>Встроенные средства управления сервером.(apachectl, apxs)

Встроенныесредства управления apache содержатся как в самом сервере, так и в отдельныхскриптах, которые идут с сервером.

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

httpd–l – показывает способ компилирования апача и встроенные модули.

httpd–h – онлайн-хелп,

httpd–x – запуск единственного клона сервера, обычно используется для отладки.

Скриптapachectl – интерфейс контроля сервера, основной скрипт для корректногозапуска/перезапуска сервера, особенно необходим/незаменим при использованииSSL. Формат :

Apachectl{start|stop|restart|startssl|configtest|status|fullstatus}

Скриптapxs — APache eXtenSion tool – наиболее важный скрипт для инсталляции идобавления новых модулей к серверу. Пример использования:

$apxs -i -a -c mod_foo.c

        gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c

        ld -Bshareable -o mod_foo.so mod_foo.o

        cp mod_foo.so /path/to/apache/libexec/mod_foo.so

        chmod 755 /path/to/apache/libexec/mod_foo.so

        [activating module `foo' in /path/to/apache/etc/httpd.conf]

        $ apachectl restart

        /path/to/apache/sbin/apachectl restart: httpd not running, trying to st

art

        [Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_mod

ule

        /path/to/apache/sbin/apachectl restart: httpd started

        $ _

Logresolve– наиболее полезный модуль с точки построения статистики посещений имониторинга популярности сервера и попыток его взлома, в простейшем виде изобычного лога он делает лог-файл с разрезолвленными именами, что значительноупрощает его анализ.

/>/>Глобальные разделы конфигурации.

Конфигурациясервера apache разбита на несколько основных разделов, как для удобства, так идля простоты парсинга файла.

1.   Директивы, контролирующие работусервера целиком — 'global environment'.

2.   Директивы, контролирующиеповедение дефолтного, или основного сервера, далее эти директивыраспространяются как используемые по-умолчанию для всех виртуальных серверов.

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

Основныедирективы глобальной конфигурации.

ServerTypestandalone (inetd)

Определяеттип сервера.

ServerRoot"/usr/local/httpd"

Путьк корневой директории сервера.

PidFile/usr/local/httpd/logs/httpd.pid

Путьк pid-файлу.

Timeout300

Количествосекунд которое ждет сервер перед отсылкой сообщения «сайт недоступен».

MaxKeepAliveRequests200

Количествоодновременно поддерживаемых запросов, рекомендуется ставить большим, но неставить 0 – бесконечность.

MinSpareServers1

MaxSpareServers15

Параметрыколичества одновременно запускаемых серверов на каждый хост – первый нерекомендуют ставить 0, и не ставить достаточно большим из-за ограниченностипамяти, второй – может быть достаточно большим.

StartServers3

Минимальноеколичество запускаемых серверов, когда к сайтам нет никаких обращений.

MaxClients256

Количествоодновременно запросов клиентов, рекомендуется ставить максимум –256.

Listen 80

Порт.Стандартный порт для HTTP – 80, альтернативный – 8080.

Далееидет секция модулей, менять в которой что-либо необходимо только при добавленииновых модулей.

Userhttpd

Grouphttpd

Пользовательи группа процесса. (по умолчанию обычно — nobody)

ServerAdminwww@univ.kiev.ua

Далееидут настройки корневого хоста.

ServerNamewww.univ.kiev.ua

DocumentRoot"/usr/local/httpd/www.univ/www"

<Directory/>

   Options FollowSymLinks Indexes IncludesNOEXEC

   AllowOverride All

</Directory>

Далееидут настройки виртуальных хостов.

Примеры

1.

<Directory"/usr/local/httpd/www.univ/www">

   Options FollowSymLinks Indexes IncludesNOEXEC

   AllowOverride All

   Order allow,deny

   Allow from all

</Directory>

2.

<Directory/usr/local/httpd/www.icc/www/squid/>

   Options FollowSymLinks Indexes

   AllowOverride All

   Order allow,deny

   Deny from all

   allow from icc.univ.kiev.ua

   AuthType Digest

   AuthDigestFile /usr/local/httpd/www.icc/www/squid/.htaccess

   AuthName «ICC Secret Area. Users Control»

   require valid-user

   satisfy any

</Directory>

3.

<VirtualHostkiev.philosophy.ru>

   ServerAdmin hostmaster@univ.kiev.ua

   DocumentRoot /usr/local/httpd/www.philosophy/www

   ServerName kiev.philosophy.ru

   ErrorLog /usr/local/httpd/www.philosophy/log/error_log

   CustomLog /usr/local/httpd/www.philosophy/log/access_log combined

   AddType «text/html;charset=koi8-r» .html .htm

</VirtualHost>

/>/>Вспомогательные скрипты – просмотр и ротациялогов, статистика посещений.

Ротациялогов и их резолвинг может быть реализован с помощью стандартных средствсервера, для apache это logresolve и logrotate.

Кромеэтого вы можете захотеть написать свои собственные скрипты, на пример на языкеbash которые автоматизируют вашу работу. Пример:

###Going to start log cutting

fori in `ls /usr/local/httpd/` ;

       do

if     [ -f /usr/local/httpd/$i'/log/access_log' ]; then

       /usr/bin/tail -1000 /usr/local/httpd/$i'/log/access_log' > /usr/local/httpd/$i'/log/ttt'

       cp /usr/local/httpd/$i'/log/ttt' /usr/local/httpd/$i'/log/access_log'

       rm /usr/local/httpd/$i'/log/ttt'

fi

done

Кромеэтого могут быть использованы программы третьих сторон, различные варианты, втом числе и бесплатные и с открытым исходным кодом, доступны в большомколичестве в Internet, как например одна из наиболее распространенных программ– webalizer генерирует очень полезную и наглядную статистику, написана на языкеС и поэтому достаточно быстро работает. Кроме этого, лог-файлы вам все равнопридется удалять (или ротэйтить), поскольку довольно быстро они займут всесвободное место на диске, а иметь статистику за год-два всегда полезно дляотслеживания динамики развития и популярности сайта.

/>/>Безопасность веб-сервера.

Кpаткоеописание пpоблемы:

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

Уязвимыеопеpационные системы:

Любаявеpсия Unix или Windows NT, котоpая используется как веб-сеpвеp.

Ущеpб отатаки:

Возможенpазличный ущеpб — от пpостого блокиpования pаботы сеpвеpа до замены егосодеpжимого поpногpафическим матеpиалом, политическими лозунгами или удалениягpупп файлов, а также pазмещения на сеpвеpе пpогpамм-тpоянских коней

Какpешить пpоблему:

Соблюдатьвсе пpавила безопасности, описанные ниже, и опеpативно устанавливать всеиспpавления пpогpамм, о котоpых вам сообщила ваша гpуппа компьютеpнойбезопасности или пpоизводитель ваших пpогpамм, используемых на веб-сеpвеpе.

Оценкаpиска:

Публичныевеб-сеpвеpа взламываются почти ежедневно; угpоза того, что будет совеpшенаатака и на ваш веб-сеpвеp, — pеальна.

Пpавилаобеспечения безопасности WWW-сеpвеpа:

Разместите ваш веб-сеpвеp в демилитаpизованной зоне (DMZ). Сконфигуpиpуйте свой межсетевой экpан (файpволл) таким обpазом, чтобы он блокиpовал входящие соединения с вашим веб-сеpвеpом со всеми поpтами, кpоме http (поpт 80) или https (поpт 443). Удалите все ненужные сеpвисы с вашего веб-сеpвеpа, оставив FTP (но только если он нужен на самом деле) и сpедство безопасного подключения в pежиме удаленного теpминала, такое как SSH. Любой ненужный, но оставленный сеpвис может стать помощником хакеpа пpи оpганизации им атаки. Отключите все сpедства удаленного администpиpования, если они не используют шифpования всех данных сеансов или одноpазовых паpолей. Огpаничьте число людей, имеющих полномочия администpатоpа или супеpпользователя (root). Пpотоколиpуйте все действия пользователей и хpаните системные жуpналы либо в зашифpованной фоpме на веб-сеpвеpе либо на дpугой машине в вашем интpанете. Пpоизводите pегуляpные пpовеpки системных жуpналов на пpедмет выявления подозpительной активности. Установите несколько пpогpамм-ловушек для обнаpужения фактов атак сеpвеpа (напpимеp, ловушку для выявления PHF-атаки). Напишите пpогpаммы, котоpые запускаются каждый час или около того, котоpые пpовеpяют целостность файла паpолей и дpугих кpитических файлов. Если такая пpогpамма обнаpужит изменения в контpолиpуемых файлах, она должна посылать письмо системному администpатоpу. Удалите все ненужные файлы, такие как phf, из диpектоpий, откуда могут запускаться скpипты (напpимеp, из /cgi-bin). Удалите все стандаpтные диpектоpии с документами, котоpые поставляются с веб-сеpвеpами, такими как IIS и ExAir. Устанавливайте все необходимые испpавления пpогpамм на веб-сеpвеpе, касающиеся безопасности, как только о них становится известно. Если вы должны использовать гpафический интеpфейс на консоли администpатоpа веб-сеpвеpа, удалите команды, котоpые автоматически запускают его с помощью инфоpмации в .RC-поддиpектоpиях и вместо этого создайте команду для его pучного запуска. Вы можете затем пpи необходимости использовать гpафический интеpфейс, но закpывать его тотчас же после того, как вы пpоизведете необходимые действия. Не оставляйте гpафический интеpфейс pаботающим пpодолжительный пеpиод вpемени. Если машина должна администpиpоваться удаленно, тpебуйте, чтобы использовалась пpогpамма, устанавливающая защищенное соединение с веб-сеpвеpом (напpимеp, SSH). Не позволяйте устанавливать с веб-сеpвеpом telnet-соединения или неанонимные ftp-соединения (то есть те, котоpые тpебуют ввода имени и паpоля) с недовеpенных машин. Неплохо будет также пpедоставить возможность установления таких соединений лишь небольшому числу защищенных машин, котоpые находятся в вашем интpанете. Запускайте веб-сеpвеp в chroot-pежиме или pежиме изолиpованной диpектоpии (в этом pежиме эта диpектоpия кажется коpневой диpектоpией файловой системы и доступ к диpектоpиям файловой системы вне ее невозможен), чтобы нельзя было получить доступ к системным файлам. Используйте анонимный FTP-сеpвеp (если он конечно вам нужен) в pежиме изолиpованной диpектоpии для диpектоpии, отличной от диpектоpии, являющейся коpнем документов веб-сеpвеpа. Пpоизводите все обновления документов на публичном сеpвеpе из вашего интpанета. Хpаните оpигиналы ваших веб-стpаниц на веб-сеpвеpе в вашем интpанете и сначала обновляйте их на этом внутpеннем сеpвеpе; потом копиpуйте обновленные веб-стpаницы на публичный сеpвеp с помощью SSL-соединения. Если вы будете делать это каждый час, вы избежите того, что испоpченное содеpжимое сеpвеpа будет доступно в Интеpнет долгое вpемя. Пеpиодически сканиpуйте ваш веб-сеpвеp такими сpедствами, как ISS или nmap, для пpовеpки отсутствия на нем известных уязвимых мест. Оpганизуйте наблюдение за соединениями с сеpвеpом с помощью пpогpаммы обнаpужения атак (intrusion detection). Сконфигуpиpуйте эту пpогpамму так, чтобы она подавала сигналы тpевоги пpи обнаpужении попыток пpименить известные атаки или подозpительных действиях с веб-сеpвеpом, а также пpотоколиpовала такие соединения для детального анализа. Эта инфоpмация сможет впоследствии вам помочь устpанить уязвимые места и усилить вашу систему защиты.

ЕСЛИ ВАШВЕБ-САЙТ БЫЛ ВЗЛОМАН:

CIACpекомендует следующие шаги пpи пpовеpке веб-сеpвеpа:

Установить ВСЕ испpавления, связанные с безопасностью, как для самого веб-сеpвеpа, так и для опеpационной системы. Удалить ВСЕ ненужные файлы, такие как phf из диpектоpии со скpиптами. Удалить стандаpтные диpектоpии с документами, поставляемые с веб-сеpвеpом (напpимеp, с IIS и ExAir). Пpовеpить ВСЕ логины пользователей на веб-сеpвеpе и удостовеpиться в том, что они имеют тяжело угадываемые паpоли. Пpовеpить ВСЕ сеpвисы и откpытые поpты на веб-сеpвеpе, чтобы удостовеpиться в том, что вместо них не установлены пpогpаммы-тpоянские кони. Пpовеpить, нет ли подозpительных файлов в диpектоpиях /dev, /etc и /tmp. />/>Организация доступа и разграничение правпользователей.

Обычнопользователи, которые имеют доступ к сайту пользуются FTP для доступа к сайту.Для того чтобы сделать этот процесс безопасным, следует организовать доступ длякаждого пользователя только к своей директории, обычно это делается сиспользованием chroot в FTP. Кроме того, не следует давать ftp-пользователямшелл на сервере, оптимальнее всего делать шеллесс эккаунты или эккаунты сограниченными правами. Для пользователей можно ввести общую группу, напримерwww, если необходим совместный доступ к нескольким сайтам, при этом группа недолжна совпадать с группой демона сервера.

/>/>. Подключение новых модулей и апгрейдпрограммного обеспечения веб-сайта.

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

Например,нам необходимо добавить модуль FastCGI к существующей конфигурации. Нашидействия:

Развернемmod_fastcgi_2.2.4 и запустим такое в папке дистрибутива:

/usr/local/httpd/bin/apxs-o mod_fastcgi.so -c *.c

/usr/local/httpd/bin/apxs-i -a -n fastcgi mod_fastcgi.so

Вhttpd.conf, ежели не добавилось автоматом — надо соответственно добавить

AddModulemod_fastcgi.c

И

LoadModulefastcgi_module mod_fastcgi.so

 

Апгрейд.Когда следует апгрейдить сервер до более свежей версии? Прежеде всего этоследует делать или устанавливать патч, когда в текущей версии ПО обнаруженыsecurity holes, ошибки или участки кода приводящие к слету системы. Далее,поскольку апгрейд достаточно нудная и трудоемкая процедура, следует  на сайтепроидводителя прочитать CHANGES или WHATSNEW-документы и определиться – есть лив новой версии что-либо, что вам очень необходимо и есть ли там какие-то новыеполезные свойства, ради которых стоит сменить версию? Если таковых необнаружено, то заниматься сменой версии, соответственно не надо.

/>/>16.      Администрирование веб-сервера./>/>Логгирование и поиск ошибок.

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

Веб-сервера

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

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

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

Крометого, внутренние веб-сайты компании, расположенные внутри брандмауэраорганизации, часто используются для рассылки информации компании сотрудникам.Часто посылаются поздравления с днем рождения, графики мероприятий, телефонныесправочники и т.д. Также внутренние веб-сайты используются для распространениявнутренней информации о проектах, являясь иногда центром информации дляисследовательских групп. Хотя внутренние веб-сайты не являются так же видимыми,как внешние страницы, они должны администрироваться с помощью специальноразработанных руководств и директив. Руководители групп должны отвечать за это.

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

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

Публичныевебсайты в MGM/Universal Studios, Nation of Islam, Министерстве юстиции США иЦРУ могут подтвердить это утверждение. В них были совершены проникновения в1996 году. Атакующие использовали уязвимые места в операционной системе, подуправлением которой работали веб-сервера. Они изменили ряд страниц веб-сайтов,и в некоторых случаях добавили порнографические изображения, и в одном случаевставили оскорбления.

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

Примерыполитик веб-серверов

Низкийриск

Пользователь

Навеб-сайтах организации не может размещаться оскорбительный или нудный материал.

Навеб-сайтах организации не может размещаться персональные рекламные объявления

Менеджер

Менеджерами пользователям разрешено иметь веб-сайт.

Материалыо сотрудниках на веб-сайтах или доступные с их помощью должны быть минимальны.

Навеб-сайтах организации не может размещаться оскорбительный или нудный материал.

Конфиденциальнаяинформация ее должна делаться доступной.

Сотрудникотдела автоматизации

Долженподдерживаться и быть доступен для внутреннего пользования локальный архивпрограмм веб-серверов и средств публикации информации на них.

Среднийриск

Пользователь

Пользователямзапрещено устанавливать или запускать веб-сервера.

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

Менеджер

Менеджерами пользователям разрешено иметь веб-страницы для участия в проекте иливыполнения своих должностных обязанностей

Сотрудникотдела автоматизации

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

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

Всесетевые приложения, кроме HTTP, должны быть отключены (например, SMTP, FTP ит.д.)

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

Прииспользования средств администрирования с помощью WWW, ограничьте доступ к немутолько авторизованных систем (с помощью IP-адресов, а не имен хостов). Всегдаменяйте пароли по умолчанию.

Высокийриск

Пользователь

Пользователямзапрещено загружать, устанавливать или запускать программы веб-серверов.

Долженпроизводиться контроль сетевого трафика для выявления неавторизованныхвеб-серверов. Операторы этих серверов будут подвергаться дисциплинарнымнаказаниям.

Менеджер

Руководствоорганизации должно дать в письменном виде разрешение на работу веб-сервера,подключенного к Интернету.

Всесодержимое веб-серверов компании, присоединенных к Интернету, должно бытьутверждено и установлено веб-мастером.

Конфиденциальнаяинформация не должна быть доступна с помощью веб-сайта.

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

Всепублично доступные веб-сайты должны регулярно тестироваться на предметкорректности ссылок, и не должны находиться в состоянии «underconstruction». При реконструкции областей они должны делатьсянедоступными.

Сотрудникотдела автоматизации

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

Программывеб-серверов и операционной системы, под управлением которой работаетвеб-сервер, должны содержать все исправления, рекомендованные производителемдля этой версии.

Входящийтрафик HTTP должен сканироваться, и о случаях появления неавторизованныхвеб-серверов должно докладываться

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

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

НаUNIX-системах веб-сервера не должны запускаться с правами суперпользователя.

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

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


Обеспечение безопасности .брандмауэр

фильтрация пакетов и разделение сетей
Создание резервных копий. Технологии:Backup, mirroring.

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

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

            Мирроринг.Технология может быть реализована двумя методами. Первый – резервный винчестер,который может быть реализован в одном корпусе на основе технологии SCSIнастройкой адаптера или с использованием технологий RAID. Второй – созданиерезервного сервера-зеркала, для которого информация синхронизирована с основным.Это достаточно дорогой способ, так как требует дополнительных расходов.

17.      Система безопасности HP-UX

 

18.      Политика и планирование системы безопасности

 

Не имеется несколько методов для разработкиполитики  защиты. Вот более  общий подход.

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

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

·    Оценить вероятность этих угроз, повреждающихваши ресурсы.

·    Прокласифицировать риски уровнем серьезности,и определить  стоимость для сокращения того риска (это также известно какоценка риска).

·    Осуществляют меры, которые защитят ресурсы.

Общие действия защиты включают следующее:

·    Ограничить вход в систему доступ кпрограммному обеспечению.

 

·    Пользователи должны выходить или используюткоманду блокировки при не использовании их терминалов.

·    Сохранить резервные ленты (диски) вотдаленных местах

·    Стереть устаревшие данные.

Подержка системы защиты включает:

·    (identification) Идентификацияпользователей. Все пользователи должны иметь уникальный идентефикатор(ID) входа в систему, состоящим из названия ипароля.

·    (authentication) Установление подлинностипользователей. Когда пользователь войдет, система подтверждает подлинность егопароля,  проверяя существование в файле пароля.

·    (authorization) Разрешение пользователей. На системном уровне, HP-UXобеспечивает два вида компьютерного использования – обычный  исуперпользователь. Индивидуальным пользователям  можнопредоставлять или ограниченный доступ к системным файлам через традиционныеразрешения файла, списки контроля доступа, и запретить SAM

·    (audit) Ревизия gользователей. HP-UX даетвозможность ревизовать компьютерное использование пользователями и события.

УстановкаTrusted Системы

HP-UX предлагает дополнительный инструментарий длябезопасности системы.

Для конвертации в trusted систему можно использовать SAM в разделе Auditing and Security. Также можна сделать это вручною редактируя скрипт /etc/rc.config.d/auditing.

После «конвертации» стелаються следующиедействия

a.   Создает новый, защищенная база данных пароляв  /tcb/files/auth/.

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

c.    Вынуждает всех пользователей использоватьпароли

d.   Создает audit ID для каждого пользователя.я.

e.    Устанавливает audit флажок на для всехсуществующих пользователей

f.    Конвертирует at,batch и crontab файлы, чтобыиспользовать установлные audit ID

Для аудитинга используют следующие команды:

audsys(1M)          установка/отменафудитинга и показывает ревезионные файли

audusr(1M)           выбор ползователя дляаудита

audevent(1M)      просмотр и изменениясобытий и системеных вызовов

audomon(1M)     устанавливает аудит файл иразмер для мониторинга

audisp(1M)           показывает аудитустановки (записи)

Также все это можно сделать визуально в SAM  разделе Auditing and Security

Управлениепаролями и системным доступом

Пароль — наиболее важный индивидуальный код(символы) идентификации пользователя. Этим, система подтверждает подлинностьпользователя, чтобы позволить доступ к системе. Администратор и обычныйпользователь в системе долженй совместно использовать ответственность за защитупароля. Администратор исполняет следующие задачи защиты:

·    Генерирует ID и для системы новым пользователям. Чтобы поддерживатьсекретность пароля, SAM генерирует Номер Разрешения для каждого нового пользователя. Этот номер должен использоваться дляпервого входа в систему. Как только этот номер был проверен, новомупользователю будет дано установить свой новый пароль

·    устанавливает надлежащий доступ на /etc/passwdи зашифрованом  пароле, в /tcb/files/auth/user_initial/user_name файлы.

·     Устанавливает старение пароляоля.

·    Удаление(стирание) паролей у каких вышелсрок действия

Каждый пользователь должен выполнять следующие правила:

·    Помнить пароль и держать его в секрете

·    Изменять переодически пароли

·    Следить за изменеием своих данных

·    Для каждой машине иметь разные пароли

19.      Управлением доступом к файлам и каталогам

ВHP-UX системе, Вы используете ls -l команду, чтобы видетьполную распечатку разрешений файла и ls -ld, чтобы перечислить разрешениякаталога.

Chmod(1) команда позволяет Вам изменять разрешения каталогов и файлов.

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

chacl(1) создает и изменяет ACLs и lsacl (1) показывает списки ACLs файлов.

Командаchacl — подмножество команды chmod.Любые определенные разрешения, которые Вы назначаете с командой chacl, добавлены к большему количеству общих разрешений, назначенных с командой chmod.Например, предположите, что Вы используете команду chmod, чтобы позволитьтолько непосредственно разрешение записи myfile. Вы можете использовать командуchacl, чтобы делать исключение и позволять ваше разрешение записиадминистратора myfile также.

Используйтеchmod с -A опцией при работе с файлами, которые имеют дополнительныеназначенные разрешения. Дополнительные разрешения будут удалены.

Вотпример использования команды

$  chacl 'user.group operator mode'  file_name

гдеuser и group указывает название  в систему пользователя и группу; знак процента(%) означает всех пользователей или группы. Оператор указывает добавление (+)или отрицание (-) разрешения и знаки "=" (=) средства " эторазрешение точно. " Режим указывает позволенные разрешения: чтение  (r), запись (w), и выполнение /поиск(x). Оператор немедленно предшествует режиму (например, + rw добавляетразрешения записи и чтение; -rw запрещает  чтение и разрешения записи)

Вотеще примеры:

 

$ chacl 'carolyn.users=rw' myfile

 

     $ ll myfile

     -rw-r-----+    1 nora  users       236 Mar   8 14:23 myfile

 

     $ lsacl myfile

     (carolyn.users,rw-) (nora.%,rwx) (%.users,r--)(%.%,---) myfile

 

Дляустановки разрешения по умалчанию переменую окружения umask. В нем передаються параметры защиты.Напримар umask=022(2 –w, 1 –x, 4 –r)означает что во всех открытых фыйлах по умолчаню не будет прав зяписи для групыи всех остальных пользователей.

Администратордолжен установить

·    начальные правадля каталога пользователя и дальше пользователь должен следить за защитой своейинформации.

·    «правыльные»права на утсройства. (/dev)

Ниже привиден список команд  длясистемы контроля доступа файловой системы

chacl(1) — change ACLs of files.

getaccess(1) — list access rights tofiles.

lsacl(1) — list access control listsof files.

getaccess(2) — get a user's effectiveaccess rights to a file.

getacl, fgetacl(2) — get accesscontrol list information.

setacl, fsetacl(2) — set accesscontrol list information.

acltostr(3C) — convert ACL structureto string form.

chownacl(3C) — change owner/grouprepresented in a file's ACL.

cpacl(3C), fcpacl(3C) — copy ACL andmode bits from one file to another.

setaclentry(3C), fsetaclentry(3C) — add/modify/delete a file's ACL entry.

strtoacl(3C) — parse and convert ACLstructure to string form.

strtoaclpatt(3C) — parse and convertACL pattern strings to arrays.

Контрольбезопасности сети (networks)

Сетевые системы более узяввымие впалне защищености чем безнее (standalone).Сеть увеличиваетсистемны доступ а так же добавляет большой риск в безопасности системы.

Если вы не можете управлять всей защитой сети то вамнеобходимо защищать каждую станцию отдельно.

Ниже приведены основые механизмы контроля доступом посети

1.Перечинь  экспортиртируемыз файловых систем /etc/exports.

/etc/exports содержит входы, которыесостоят из имени пути файловой системы, сопровождаемой списком компьютеров илигрупп компьютеров, позволенных доступ к файловой системе. Любой вход, состоящийиз только имя пути без того, чтобы следоваться компьютерным названием- файловаясистема, доступная каждому компьютеру на сети. /etc/exports входы могли бысодержать названия групп компьютеров. Вы можете выяснять то, какиеиндивидуальные машины включены в группу,  проверяя /etc/netgroup.

2.Перечислить узлов, которые имеют эквивалентныебазы паролей в /etc/hosts. equiv.

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

Вы должны повторить шаги 1 и 2 для каждого узла в домене(области).

4.Конролируйте root и  локальную защитуна каждом узле в вашем административном домене Пользователь с привилегиямисуперпользователя на любой машине в домене может приобретать те привилегии накаждой машине в домене. !!!

5.Поддержать последовательность названийпользователей, uid, и gid среди файлов пароля в вашем административном домене.

 6.Поддержать последовательность файлов группына всех узлах в вашем административном домене.

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

Обратитевнимание на файлы которые находяться в /etc. Ниже приведен списокнаиболее употребляемых файлов

networks               названиесетей  и ихадреса

hosts                      названиестанций а также их адреса

hosts.equiv           название иадреса станций в которые эквивалентны даной станции

services                  база данных сервисов

exports                   списокэкспорта файловых систем,  экспортируемых в NFS клиенту

protocols              базаданныз протоколов

inetd.conf             файл конфигурации Internet

netgroup               Список сетевыхгрупп.

Использують indetd.sec для контролявнешнего доступа. Файл находиться в /var/adm/inetd.sec

По следующему формату: <servicename> <allow/deny> <host/net addresses, host/net names>


 

Мониторинг системы

Имееться набор команд для мониторинга системы. Нижеприведены краткие возможности и характеристики наиболее часто используемых:

 

SAR – показывает активные ресурсы сиситемы  (system activity reporter)

Запуск команды возможен в 2х вариантах:

sar [-ubdycwaqvmAMS] [-o file] t [n]

и

sar [-ubdycwaqvmAMS] [-s time] [-e time][-i sec] [-f file]

 

Первая форма показывает октивность комапьютера n  раз с периодом t секунд. Еслиуказана опция –o то информацию скидывает  в файл. Поумолчанию n = 1.

Другая форма без осуществления выборки указанного интервала, sar извлекает данные отпредварительно зарегистрированного файла, или тот, указанный -f опцией или, поумолчанию, стандартные действия операционной системы ежедневный файл данных/var/adm/sa/sadd  в течение текущего дня dd. Начальные и конечные временасообщения могут быть ограничены через -s и -e параметры времени формы hh [:mm[:ss]]. -i опция выбирает отчеты в секундных интервалах. Иначе, все интервалы,найденные в файле данных сообщены.

Расмотрим опции:

-u             использование CPU.(значение по умолчанию); частьвремени, выполняющегося в одном из нескольких режимов. На многопроцессорнойсистеме, если -M опция используется вместе с -u опцией, для каждого -CPU использование также как среднееиспользование CPU всех процессоров. Если -M опция не используется, тогда показывает среднее использование CPUвсех процессоров:

                                cpu         номер CPU(только на многопроцессорнойсистеме с -M опцией);

%usr       использованиепользователем (непgjrfривигильованый режим);

 %sys      системныйрежим;

%wio      простой снекоторым процессом, ожидающим Ввод — вывод (только блочных I/O, необработанныйввод /вывод, или VM обозначенные загрузки/выгрузки свопа);

                                %idle      “простой» проссора.

-b            показывает использования буфера

bread/s-                 количествофизический чтений на секунду с буф. на диск.(или устройсва)

-bwrit/s                   количествофизический записей  на секунду с буф. на диск.(или устройсва)

                                lread/s- lwrit/s количество байт чтения записи на устройства.

                                %rcache                                отношения буфера- bread/lread

                                %wcache               bwrit/lwrit

                                pread/s                   Количествочтений не с блочного устройства

                                pwrit/s                    Количествозаписей не с блочного устройства

-d            показывает информацию о каждом block устройстве, к которому процесор имелотношение за определенный интервал времени

-y            — для non-block устройств ---

-с             системные вызовы

-w            свопинг и переключения системы

-a            использование файлов

-q            показывает среднюю длину сообщения ипроцент от занятого времени

-v            более детальная информация обиспользовании файлов,inode, процессов.

-m           информация о семафорах

-A            показывает всю информацию

-M           информация для индивидуального CPU в много-процесорных машинах

VMSTAT — показывает статистику виртуальнойпамяти

Параметры запускакомманды:

vmstat [-dnS] [interval [count]]

vmstat -f | -s | -z

-d            сообщает количество обменов междудиском

-n            выводин информацию в 80колоночном представлени. 

-S            количествопрцессов которые свопяттся

interval  периодотображения

count      количествоповторов

-f             количество fork ( деления процесса)

-s             количество paging сообщений

-z             очищает все sum структуры ядра.


IOSTAT         мониторинг I|O устройств

Параметрызапуска:

                iostat[-t] [interval [count]]

interval  периодотображения

count      количествоповторов

-t             отображаетстатистику для терминалов.

Для каждогодиска статистика предоставляеться форматом:

                device                    имяустройства

bps                          количество передаваемыхбайт за секунду

sps                          количество seekов за секунду

msps                       в мс. средний seek

TOP    отображает состояние“горячих” процесов.

Параметрызапуска:

                top[-s time] [-d count] [-q] [-u] [-n number]

-s timе                    время между обновлениями

-d count                 отображаетколичество и после этого выходит

-n number             количество «верхних» процесов

-q                            запускаетс самым большим приоритетом (nice –20)

-u                            мвестоusername показывает userID (для экономии проц. времени)

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

NETSTAT показывает состояние сети.

Параметры  запуска:

netstat [-aAn] [-faddress-family] [system [core]]

netstat [-mMnrsv] [-faddress-family] [-p protocol] [system [core]]

netstat [-gin] [-I interface][interval] [system [core]]

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

 Команда netstat берет одну из трех форм, показанных выше:

·    Перваяформа команды отображает список активных сокетов для каждого протокола.

·    Втораяформа отображает содержание одной из других сетевых структур данных согласноотобранной опции.

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

Опции:

-a                                            Показывает состояние всех сокетов.

-A                                            Адресный блок и протокол

-f address-family                 Показываетсокеты с определеного семейства: inet,unix (AF_INET,AF_UNIX)

-g                                             Показывает информацию ошироковещательных интерфейсах

-i                                              Состояние интерфейсов

-I interface                            Состояниеопределленого интерфейса

-m                                           Колсичествопамяти  и общая информация о сокетах

-M                                           Multicastтаблица маршрутизации

-n                                            Показывать адрес сетки как номер

-p protocol                            Показыватьвсю статистику определьоного протокола

-r                                             Таблица маршрутизации

-s                                             Показать статистику по всехпротоколах

-v                                            Дополнительная информация

Существует множество прормаммониторинга системы. Некоторые можно мониторить с помощю команды SAM. Также можно найти дополнительнуюинформацию на сайте:

hpux.cae.qiax.edu

еще рефераты
Еще работы по компьютерным наукам