Реферат: Администрирование локальных сетей
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
Описание команды arar [-][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Вызов ADBDызывает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.
VARIABLESvar 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)
LOCATIONSline 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
FORMATSAformat 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 — виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shmatshmctl(id, cmd, shsstatbuf);
cmd идентифицирует требуемое конкретное действие важна функция уничтожения сегмента разделяемой памяти СемафорыОбобщениеклассического механизма семафоров общего вида Диекстры
Целесообразностьобобщения сомнительна
Обычноиспользовался облегченный вариант двоичных семафоров
Известеналгоритм реализации семафоров общего вида на основе двоичных
Семафор вОС UNIX:
значение семафора идентификатор процесса, который хронологически последним работал с семафором число процессов, ожидающих увеличения значения семафора число процессов, ожидающих нулевого значения семафораТрисистемных вызова:
semget для создания и получения доступа к набору семафоров semop для манипулирования значениями семафоров semctl для выполнения управляющих операций над набором семафоровid = semget(key, count, flag);
key, flag и id — обычный смысл count — число семафоров в наборе семафоров, обладающих одним и тем же ключом индивидуальный семафор идентифицируется дескриптором набора семафоров и номером семафора в наборе если набор семафоров с указанным ключом уже существует, то число семафоров в группе можно узнать с помощью системного вызова semctloldval = 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_NOWAITmsgctl(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 0000hex
2 30000 0010 Первые восемь бит идентифицируютинтерфейс или интерфейсную карту
0011 SCSIадрес диска
оставшиеся битынулевые.
SCSIленточный накопитель.
Bits 16-19
20-23
24-27
28-31
Binary
SCSI номер SCSI LUN24 – поведение как у 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. Особенности файловой системы VxFSVxFS является 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>
SSISSI расшифровывается как 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
CGICGI- 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»
PHPPHP- язык написания сценариев, внедренный в 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-UX18. Политика и планирование системы безопасности
Не имеется несколько методов для разработкиполитики защиты. Вот более общий подход.
· Идентифицировать то, что Вы должны защитить.Это может быть активы типа даные пользователей, доступ до аппаратных средств,данные, документация и т.д.
· Идентифицировать потенциальные угрозы вашим ресурсам…Они включают угрозы от природных явлений (наводнения, землетрясения),невежество и недостаток обучения пользователей и намеренных нарушений защиты.
· Оценить вероятность этих угроз, повреждающихваши ресурсы.
· Прокласифицировать риски уровнем серьезности,и определить стоимость для сокращения того риска (это также известно какоценка риска).
· Осуществляют меры, которые защитят ресурсы.
Общие действия защиты включают следующее:
· Ограничить вход в систему доступ кпрограммному обеспечению.
· Пользователи должны выходить или используюткоманду блокировки при не использовании их терминалов.
· Сохранить резервные ленты (диски) вотдаленных местах
· Стереть устаревшие данные.
Подержка системы защиты включает:
· (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