Text
                    Ф.И., Торчинский
Организация UNIX-систем и ОС
Solaris 9
ЗДНТУИТ
/ НАЦИОНАЛЬНЫЙ ОТКРЫТЫЙ УНИВЕРСИТЕТ

Организация UNIX-систем и ОС Solaris 9 2-е издание, исправленное Торчинский Ф.И. Национальный Открытый Универ< итет"ИНТУИТ" 2016
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 ЭДК 004.451.9Solaris(075.8) ББК20 Т61 Операционная система Solaris / Торчинский Ф.И., Ильин Е.С. - М.: Национальный Открытый Университет "ИНТУИТ", 2016 (Основы информационныхтехнологий) ISBN 978-5-94774-820-8 Курс лекций представляет собой введение в администрирование систем UNIX с упором на особенности Solaris. Детальность рассмотрения позволяет освоить курс как опытным, так и начинающим администраторам систем, причем последние могут использовать материалы курса как справочник по командам. Подробно рассмотрена установка систем Solaris и описан ряд возможных трудностей при установке, а также методика борьбы с ними. Рассмотрены общие принципы построения UNIX-систем и их администрирования, установка системы Solaris, архитектура системы и базовые сведения для управления системой. Основные темы курса включают файловую системы современных систем UNIX, подсистему управления процессами, запуск и останов системы. Рассмотрены также основы пользовательского интерфейса: командные процессоры, графическая оболочка, текстовый редактор vi. Курс имеет ярко выраженную практическую направленность: наряду с общими принципами UNIX рассмотрены детали их реализации в Solaris, обсуждаются и примеры файлов конфигурации, и наиболее распространенные команды для администрирования UNIX. Ifypc также дает методику поиска информации о системе с использованием системной справочной системы. В тексте содержатся ссылки на полезные Интернет-ресурсы, дополняющие материал курса. (с) ООО "ИНТУИТ.РУ", 2009-2016 (с) Торчинский Ф.И., 2009-2016
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Введение в UNIX. Устройство системы Лекция содержит историю UNIX и обзор особенностей системы; эта информация важна для начинающих для понимания идеологии построения UNIX и управления системой. История UNIX вкратце Первая версия многозадачной многопользовательской системы UNIX была разработана в 1969 году сотрудниками подразделения Bell Labs фирмы AT&T Деннисом Ритчи (Dennis Ritchie) и Кеном Томпсоном (Кеп Thompson). Она была написана на ассемблере для компьютера PDP-7. К лету 1972 года систему переписали на язык высокого уровня С, что позволяло перенести ее на любую аппаратную платформу. Создатели UNIX впервые предложили операционную систему, полностью написанную на языке высокого уровня. Первым компьютером, которым управляла новая версия системы, стал компьютер PDP-11 компании Digital Equipment Corporation (DEC). Несколько десятилетий спустя DEC была переименована в Digital, затем поглощена компанией Compaq, которая, в свою очередь, слилась с Hewlett-Packard. В начале 70-х годов XX века выпускники Университета в Беркли (University of California-Berkeley), вдохновленные новыми идеями UNIX, начали работу над собственной версией UNIX. В 1977 году вышла первая версия Berkeley Software Distribution -известная университетская версия UNIX. Так как эта система была основана на коде AT&T, для ее использования была необходима лицензия AT&T. Разработчики BSD, подстегиваемые ростом цен на лицензии, полностью переписали исходный код системы к 1991 году. После этого началось развитие UNIX в двух направлениях: одни команды разработчиков взяли за основу версию Беркли, другие - версию System V Release 4.2, которая была разработана AT&T. Этот краткий экскурс в историю UNIX необходим нам для того, чтобы понимать, отчего все версии UNIX имеют много схожего, но некоторые
отличия между разными вариантами систем иногда удивляют и даже досаждают системному администратору. Solaris относится к ветви систем System V. Это означает, что в этой системе приняты стандартные для указанной ветви структура каталогов с файлами конфигурации, порядок загрузки ОС и системные утилиты, а также их ключи. С другой стороны, в Solaris используются некоторые весьма специфичные именно для этой системы соглашения, которые не имеют отношения ни к System V, ни к BSD, поэтому такие случаи будут оговорены особо, чтобы не дезориентировать тех читателей, которые уже имеют опыт работы с другими вариантами UNIX. Какую систему лучше установить? При всей схожести систем UNIX каждый системный администратор хотя бы раз в жизни оказывался перед необходимостью принять решение о том, какую именно систему UNIX следует установить на конкретный компьютер в конкретной сети. Хорошо тем, кому нужно было устанавливать систему на оборудование фирм Sun Microsystems, Silicon Graphics или Hewlett-Packard. Для этих аппаратных платформ существует по одной операционной системе, так что выбирать не из чего: придется ставить Solaris, IRIX или HP-UX соответственно. Все остальные (а это, как минимум, все обладатели компьютеров архитектуры i386) должны решить, с какой системой им по пути на этот раз. Нередко выбор делается раз в жизни, в самом начале профессиональной карьеры и обусловливается самыми иррациональными причинами. Например, тем, какую систему уже установил более опытный приятель, которому предстоит отвечать первый месяц или год на все вопросы новоявленного администратора UNIX. Выбор систем UNIX для i386 впечатляет: это и система реального времени QNX, и Solaris, и FreeBSD, и Linux, и многие другие, менее известные системы.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Как выбирать? Что выбрать? Как ни странно, выбор "по примеру приятеля" может оказаться самым верным. Хорошая техническая поддержка и разумный совет - это главное подспорье новичку в деле администрирования систем. Если у вас есть друг или коллега, готовые делиться с вами знаниями днем и ночью, стоит поинтересоваться их мнением, какую систему устанавливать, даже если их совет окажется неоптимальным с точки зрения соответствия системы вашим задачам. Если проблема технической поддержки для вас - не главное, лучше с самого начала определить, какую функцию будет выполнять компьютер, на который надо установить новую систему. Если это - высокопроизводительный сетевой сервер, к которому следует подключить адаптер ATM 622 Мбит, то придется покупать дорогое оборудование Sun SPARC, а для него нет иных систем, кроме Solaris. Если требуется установить компьютер, который будет почтовым сервером небольшой компании или компьютером для хостинга нескольких десятков web-сайтов среднего размера, то подойдет любой новый компьютер i386 под FreeBSD. Если требуется поддержка широкого спектра устройств - от новейших CD-рекордеров до flash-дисков с интерфейсом USB - один из вариантов Linux будет отличным выбором. После того как выбрана основная функция сервера или рабочей станции, определяются требуемое оборудование и операционная система. С одной стороны, если вопросы производительности системы стоят на первом месте, придется вначале выбрать оборудование. С другой стороны, если в конце концов вы придете к выводу о необходимости установить Solaris, это может вызвать дополнительные (и достаточно строгие!) требования к оборудованию. Может оказаться, что производительность не так важна, как совместимость с конкретным программным обеспечением. Предположим, система автоматизации управления предприятием SAP R/3 работает только под Solaris, а решение о внедрении SAP R/3 уже принято и изменить его нельзя. Тогда волей-неволей придется устанавливать Solaris. Единственным вопросом будет, на какую платформу его устанавливать - SPARC или Intel?
Анализ реальных требований задачи к программному обеспечению и оборудованию - это самая важная часть проектирования информационной системы, независимо от того, проектируется крупный завод с нуля или система бухгалтерского учета маленькой торговой фирмы. Системный администратор (и его начальник!) должен всегда помнить, что любая компьютерная система служит для достижения совершенно конкретных производственных или организационных целей и должна проектироваться исходя из этих целей. Что же делать системному администратору который уже сформулировал требования к создаваемой системе и уяснил, какое оборудование или программное обеспечение станет использовать? Часто уже на этом этапе выбирать нечего, примеры таких ситуаций описаны выше. Но бывает, что выбор все-таки есть. Например, какой UNIX лучше установить на компьютер, чтобы "просто поучиться'? Это обычный вопрос, который слушатели задают на курсах по UNIX. Для обучения следует устанавливать систему которая на первых порах не будет причинять владельцу крупных проблем. Действительно, много ли опыта добавит новичку процесс подбора совместимых с Solaris 9 сетевых карт или видеоадаптеров? В то же время, Linux или FreeBSD безразлично, какая у него есть сетевая карта (и видеоадаптер!), так как они поддерживают куда более широкий спектр устройств. Тому кто впервые в жизни устанавливает UNIX, можно посоветовать установить Red Hat Linux, Suse Linux или Mandrake Linux. По умолчанию они установятся с поддержкой графической среды, и результат установки будет пригоден для использования в качестве рабочего места секретарши, равно как и в качестве файлового сервера компании^. Если вы решили начать с установки почтового сервера, маршрутизатора или web-сервера, правильнее потренироваться на FreeBSD. Тем, кто хочет стать высокооплачиваемым специалистом по Solaris, можно начинать прямо с Solaris. Следует понимать, что каждый вариант UNIX отличается (возможно, незначительно) чем-то своим, и чтобы научиться с первого взгляда разбираться в поведении каждой встретившейся UNIX-системы, все равно придется набраться опыта, пробуя разные
Торчинский Ф.И., Ильин Е.С. варианты UNIX. Разные версии UNIX и Solaris в частности Каждая из систем UNIX, будь то HP-UX, Slackware Linux, FreeBSD или Solaris, имеет различные версии. Это естественно: системы UNIX выпускаются уже давно, и каждая система много раз модифицировалась с момента создания ее первой версии. При выборе системы всегда следует обращать внимание на ее версию и дату выхода. Разные версии систем UNIX обычно называют выпусками (releases). Нумерация выпусков в каждой системе UNIX ведется по-своему О правилах нумерации всегда сообщается на сайте производителя системы, если же эту информацию оказалось нелегко найти, постарайтесь воспользоваться советами из лекции 8 для поиска нужных сведений. В Solaris принята относительно простая нумерация выпусков системы. Каждый новый выпуск получает номер, на единицу больший предыдущего. Так повелось с момента создания Solaris 7, которому предшествовал Solaris 2.6. С тех пор нумерация не "прыгает", и очередная версия системы, покидающая в момент написания этой книги цех упаковки продукции завода Sun, имеет номер 10. Если в систему после ее выхода вносятся некие изменения, недостаточно существенные для того, чтобы системе присвоить новый номер, измененный вариант текущей версии называют с указанием даты (месяца и года) внесения изменения, например, Solaris 9 12/02. Это означает, что мы имеем дело с Solaris 9, версией от декабря 2002 года. В файле /etc/release в Solaris хранится информация о версии установленной на компьютер операционной системы. Внутреннее устройство UNIX Система состоит из ядра, демонов и утилит. В системе принят ряд соглашений, которые соблюдаются всеми разработчиками программ под UNIX, в частности, поддержка POSIX.
Ядро - это набор системных таблиц и подпрограмм работы с ними. В ядро также входят драйверы устройств - небольшие программы, обеспечивающие системе интерфейс для общения с аппаратурой компьютера - дисками, видеоподсистемой, сетевыми интерфейсами и т.п. Ядро состоит из статической части, которая загружается при старте системы, и модулей. Модули могут динамически загружаться при старте системы или во время работы, при необходимости поддержки той или иной функции. В частности, подсистема поддержки NFS и драйверы внешних устройств оформлены в виде модулей. Основная часть ядра Solaris состоит из двух файлов - genunix и unix. Это -статическая часть кода ядра. Независимый от платформы файл genunix содержит общие для всех ядер Solaris компоненты, a unix - это зависимый от платформы файл. Специфичный для платформы файл, который используется программой ufsboot для загрузки системы в 32-разрядном режиме, называется /platform/' uname m'/kernel/unix. Конструкция "обратные апострофы" ( ' ) обозначает, что часть названия (а именно, название аппаратной платформы) можно узнать по команде uname -ш^. В файле конфигурации ядра /etc/system можно установить значение переменной moddir, которая содержит список каталогов, разделенных двоеточием. Минимальное значение по умолчанию /platform/platform-name/kernel/kemel/usr/kernel но это значение может быть различным для различных платформ. Наиболее частым значением для большинства платформ является /platform/platform-name/kernel/platform/liardware-classname/ kernel:/kemel'Aisr/kemel Конкретное значение platform-name сообщает команда uname -i значение hardware-class-name сообщает uname -m
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Файл конфигурации ядра в Solaris - /etc/system, для получения детальной информации об этом файле следует ознакомиться со страницей руководства system(4), это можно сделать командой man 4 system В системах, загружающихся в 64-разрядном режиме, файл unix называется /platform/'плате -m'/kernel/sparcv9/unix. Когда загрузчик ufsboot загрузит оба этих файла (genunix и unix) в память, они становятся одним целым - ядром. Затем это ядро загружает модули, используя ufsboot для чтения файлов. Подробнее о процессе загрузки говорится в лекции 9. Демоны - это серверные приложения, отвечающие за обработку запросов от других (клиентских) программ. Утилиты - это программы, которые нужны для выполнения разных базовых работ в системе: копирования файлов, управления процессами, восстановления файловой системы и т.п. В разных вариантах UNIX используются разные файловые системы, причем часто поддерживается несколько разных файловых систем. Например, Linux умеет работать с ext2, ext3 (это ее родные файловые системы), UFS, HPFS, NTFS, FAT и другими. Solaris, как и некоторые другие ОС UNIX, использует файловую систему типа UFS. UNIX - это многопользовательская многопроцессная система, т.е. в ней может одновременно быть запущено несколько процессов от имени разных пользователей. Число процессов, которые можно одновременно запустить, ограничивается размерами таблицы процессов в ядре и другими настройками ядра. Каждый процесс в UNIX работает в своем собственном адресном пространстве, поэтому сбой в работе одного процесса никак не влияет на работу других. Подсистема виртуальной памяти, являющаяся частью ядра, запрещает процессам обращаться к чужим адресным пространствам. Одной из функций ядра является планирование процессов, т.е. передача
управления от одного процесса к другому. Для этого в ядре есть отдельная подпрограмма, называемая планировщиком задач. Процессы получают управление от планировщика задач в соответствии со своим приоритетом. Планировщик задач через определенное количество микросекунд решает, следует ли передать управление следующему в очереди процессу. Ядро представляет собой отдельный процесс, выполняющийся с наивысшим приоритетом. В большинстве систем UNIX, включая Solaris, реализована возможность выполнять несколько параллельных подпроцессов внутри процесса. Эти подпроцессы называют потоками (threads). Более подробно этот аспект процессов рассмотрен в лекции 8. Каждый пользователь в UNIX имеет свою собственную учетную запись пользователя (account), которая содержит имя пользователя, пароль, идентификатор пользователя (UID), идентификатор главной группы пользователя (GID), описание пользователя, его домашний каталог и путь к командному процессору, который следует запустить при интерактивном входе пользователя в систему. Пользователь, работающий в UNIX, имеет уникальное имя пользователя и уникальный идентификатор. Идентификатор пользователя (User ID, UID) - это целое число от 0 до 2147483647. Обычные пользователи в Solaris имеют идентификатор в диапазоне от 100 до 60000. Пользователю не надо знать свой идентификатор, потому что он используется только системой, а для входа в систему пользователь указывает свое имя (username). Имя пользователя может состоять из латинских букв и цифр; длина имени должна быть от 2 до 8 символов. Первый символ должен быть буквой, и по крайней мере один символ должен быть буквой нижнего регистра. Имя пользователя назначает системный администратор при создании новой учетной записи. Имя пользователя в руководствах часто называют "логин" (login) или "username". Пользователи объединены в группы. Каждая группа имеет свое имя и уникальный идентификатор (Group ID, GID). В группе может быть сколько угодно пользователей, и каждый из них может быть участником любого количества групп. Однако у каждого пользователя есть главная группа - она указывается в свойствах любого файла, который создает
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 пользователь. Идентификатор группы имеет значение от 100 до 60000, если только это не специальная группа. Для специальных (предопределенных) групп зарезервирован диапазон от 0 до 99. Пользователей объединяют в группы для того, чтобы было уцобнее администрировать систему. Например, если право редактировать содержимое web-сайта надо предоставить нескольким ответственным, то достаточно создать специальную группу, например, webedit, и включить их всех в эту группу. Предположим, что эти ответственные - пользователи ivan, lena и kira. Тогда в файл /etc/group следует добавить новую группу: webedit::101 :ivan, lena, kira Концепция прав доступа в UNIX требует объединять пользователей в группы всегда, когда нужно предоставить одинаковые права доступа к файлам или каталогам группе людей. Домашний каталог и путь к командному процессору играют роль только при интерактивном входе пользователя в систему. В UNIX каждый пользователь может работать с системой как непосредственно (набирая команды ОС на клавиатуре), так и обращаясь через сеть к тем или иным службам, запущенным на компьютере под UNIX. При входе в систему пользователь набирает имя в ответ на приглашение login:. Затем в ответ на password: следует набрать пароль. При вводе пароль никак не отображается, в том числе и звездочками. Пароль обычно назначается системным администратором при добавлении пользователя в систему. Подробнее о параметрах пароля (частота изменения, ограничение длины и т.п.) в Solaris рассказано в лекции 4. Пользователь или системный администратор имеют возможность изменить пароль с помощью команды passwd имя_пользователя. Системный администратор может изменить пароль любого пользователя, все остальные - только свой собственный.
Команда passwd без параметров меняет пароль того пользователя, который ее запустил. При изменении своего пароля потребуется набрать старый пароль (чтобы подтвердить, что вы - действительно тот, за кого себя выдаете) и затем - новый пароль. Новый пароль потребуется набрать дважды, чтобы система была уверена в вашем выборе. Пароль может содержать любые символы. Допустимая длина пароля в Solaris составляет от 6 до 8 символов. Символы разных регистров в паролях, каки повсюду в UNIX, считаются различными. Пароль не должен легко отгадываться. Идеальный пароль в системах UNIX состоит из восьми символов, среди которых есть латинские буквы разных регистров, цифры и знаки препинания. Не следует набирать пароль латинскими буквами, соответствующими русскому слову на клавиатуре, - эти комбинации давно попали в словари взломщиков, так же, каки комбинации последовательных клавиш типа qazwsx. Так же, как на военном заводе нельзя одолжить чужой пропуск на денек, пользователям нельзя делиться с коллегами своим паролем. Строго запрещено писать пароль на бумажке и приклеивать ее к столу, на стену или монитор. Если под одним именем и паролем работает несколько человек, нельзя выяснить, кто конкретно выполнил в системе действие от этого имени. Список пользователей системы хранится в файлах/etc/passwd (в нем нет зашифрованных паролей, и его можно читать всем) и /etc/shadow (здесь есть зашифрованные пароли и дополнительная информация о параметрах пароля, читать можно только пользователю root). Список групп хранится в /etc/group. Структура файлов /etc/passwd, /etc/shadow и /etc/group рассмотрена в лекции 4. Руководство по системе В любом варианте UNIX есть главная команда - man. Это команда работы с руководством по системе. Подробнее структура руководства по Solaris будет рассмотрена в лекции 9. Однако уже сейчас, приступая к работе в системе, вы должны знать, что она вас не бросит в трудную минуту По каждой программе, установленной в системе, по каждому
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 системному вызову из системных библиотек, по многим понятиям и файлам конфигурации, а также драйверам устройств в стандартном комплекте установки системы есть страница руководства. Для вызова руководства по команде следует набрать man команда Для вызова руководства по самой программе man, которая и показывает страницы руководства, наберите man man Это всегда верный и рекомендуемый, а иногда - единственно возможный способ получения справки о системе для тех, кто хочет разобраться в хитростях работы программ под UNIX или в их настройках. Предопределенные пользователи и группы При установке системы в файлы /etc/passwd и /etc/group автоматически записываются сведения о предопределенных пользователях и группах. Это делается для того, чтобы было проще управлять правами доступа к системным файлам. Предопределенные группы и пользователи требуются для того, чтобы от их имени работали системные службы, и в то же время доступ к файлам этих служб был ограничен для всех остальных. В Solaris 9 предопределенными являются пользователи, перечисленные ниже: rootx:0:l:Super-User77sbin/sh йаетопэс1:1:У: binx:2:2 ::/usr/bin: sysx:3:3:7: adm:x:4:4:Admin7var/adnT lpx:71:8:Line Printer AdminAisr/spool/lp: uucp x:5:5 :uucp Admin:/usr/lib/uucp:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 sminsp :х:2 5:2 5 :SendMail Message Submission Program:/: listenx:37:4:N etwork Admin Aisr/net/nls: nobody:x:60001:60001:Nobody:/: noaccess 3c60002:60002:Nо Access User:/: nobody4:x:65534:65534:SunOS 4.x Nobody:/: К предопределенным группам относятся следующие: root::0Toot other ::1: bin::2 Toot,bin,daemon sys::3 :root,bin,sys,adm adnr:4 :root,adm,daemon uucp::5Toot,uucp mail::6:root tty::7:root,adm lp::8Toot,lp,adm nuncp ::9 Toot,nuncp staff::10: daemon::12:root,daemon sysadmin::14: smmsp ::2 5 smmsp nobody::60001: noaccess "60002: nogroup ::65534: Привилегированный пользователь Один из предопределенных пользователей - это пользователь root с UID, равным нулю. Пользователь с таким UID называется суперпользователем (superuser) или привилегированным пользователем и всегда имеет имя root. Он имеет неограниченные права на доступ к любому объекту в системе. Тот, кому доверен пароль суперпользователя, должен хорошо знать основные процедуры администрирования UNIX и работать в системе так, чтобы не навредить ей. Системный администратор отвечает за безопасность системы, ее стабильную работу, добавление и удаление
пользователей, регулярное резервное копирование и т.д. Он должен хранить пароль суперпользователя как зеницу ока. Доверять пароль суперпользователя многим людям не следует: системный администратор всегда должен точно знать, что любое действие от имени root сделал проверенный человек. Круг работ, которые выполняет системный администратор, всегда следует очень четко делить между несколькими людьми, а еще лучше - поручать эту работу единственному сотруднику Вход в систему под именем root разрешен только с терминалов, непосредственно присоединенных к UNIX-машине. Подключение через сеть от имени root запрещено. При надобности выполнить команду от имени root через сеть следует подключиться от имени обычного пользователя, а затем выполнить команду "превращения" в привилегированного пользователя ( su ). Пользователь root никогда не должен иметь пустой пароль. Как стать привилегированным пользователем В UNIX можно "перевоплотиться" в любого пользователя. Для этого служит команда su (switch user): su имя_пользователя Команда su без параметров эквивалентна su root. Для перевоплощения в другого пользователя нужно знать его пароль. В некоторых системах UNIX дать команду su для того, чтобы работать от имени root, по умолчанию может только член группы wheel Так, например, установлено во FreeBSD. В системах, где для аутентификации используется подсистема РАМ, такой эффект достигается следующей строкой в файле /etc/pam.d/su: auth required /lib/security/pam_wheeLso Подсистема РАМ в настоящее время поддерживается во всех основных системах UNIX: Solaris, HP-UX, FreeBSD и всех новых версиях Linux. Более подробно эта подсистема рассматривается в лекции 10 курса "Администрирование ОС Solaris".
"Перевоплощение" означает, что дальнейшая работа будет происходить в командном процессоре, который программа su запускает от имени другого пользователя - того, в которого вы перевоплотились. Каждому пользователю, кроме root, для того, чтобы начать работу от имени другого пользователя, требуется знать его пароль. Команда su по умолчанию запускает командный процессор от имени другого пользователя, но сохраняет среду окружения старого, т.е. среда окружения наследуется от того командного процессора, в котором выполнена команда su. Это мешает перевоплотиться полностью. Например, если пользователь alen выполнил команду su, то работать от имени root он сможет, а читать почту из почтового ящика root - нет. Потому что почтовая программа проверяет переменную mail и (или) user, которая унаследуется от старого командного процессора. Чтобы получить среду окружения в том виде, в котором ее получает другой пользователь при своем входе в систему, следует дать команду su - имя_пользователя Обратите внимание на знак - (минус) после команды su. Например, для полного перевоплощения в пользователя breatney следует дать команду su - breatney В некоторых системах UNIX есть программа sudo, с помощью которой любой пользователь может выполнить команду от имени другого пользователя. Системный администратор должен заранее отредактировать файл /etc/sudoers, в котором определяется, кто и что может запускать от чужого имени. При выполнении программа sudo спросит у пользователя его пароль, чтобы убедиться, что ее запускает не тот, кто случайно подошел к терминалу с незакрытой сессией работы. В Solaris нет sudo, зато есть более сложный способ делегирования части полномочий администратора другим пользователям. Для этого используется управление доступом на основе ролей (RBAC - role based access control). Его смысл состоит в том, что среди всех полномочий системного администратора выделяются их группы, а затем некоторые
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 пользователи наделяются таким подмножеством полномочий, которое соответствует их реальной роли в администрировании системы. Более подробно RBAC рассматривается в лекции 11 курса "Администрирование ОС Solaris". Что делать, если вы забыли пароль суперпользователя Если пользователь забыл свой пароль, то сообщить ему, какой он был, невозможно. Надо просто установить ему новый. Это можно сделать командой passwd user или с помощью программы admintool (в графическом режиме). Изменить пароль любого пользователя может только root. Если же забыт пароль root, то следует поступить одним из следующих способов: Способ 1 (рекомендован Sun Microsystems): 1. Загрузитесь с установочного диска Solaris^. Например, дав команду boot cdrom -s^. 2. Создайте каталог /tmp/а (или любой другой, чтобы смонтировать в этот каталог корневой раздел диска). 3. Смонтируйте корневой раздел в /tmp/а (для этого надо знать, какой раздел на диске является корневым^ ). 4. Исправьте /etc/shadow: vi /tmp/a/etc/shadow в редакторе найдите поле пароля в учетной записи root и уцалите все поле (между первым и вторым двоеточиями). 5. Перезагрузите систему войдите под именем root без пароля, установите новый пароль. 6. Запомните пароль. Для этого можно несколько раз подряд войти в систему и выйти из нее под именем root. Обычно системный администратор запоминает произвольную комбинацию из восьми символов с третьего раза.
Торчинский Ф.И., Ильин Е.С. Способ 2^: 1. Загрузитесь с установочного диска Solaris так, как будто вы собираетесь делать upgrade системы. 2. При этом установщик Solaris смонтирует файловые системы, в том числе и корневую, на /а и спросит "Upgrade or Exit"; выберите Exit. 3. Отредактируйте /etc/shadow как в способе 1, вызвав редактор командой vi /a/etc/shadow Помните, что все это можно сделать, только работая на консоли компьютера. Находясь вдали от вашей системы, вы не сможете воспользоваться ни одним из этих способов. Только не подумайте, что я предлагаю действительно совместить выполнение этих функций на одном компьютере (прим. авт.). 2) Эта конструкция употребляется в командной строке командных процессоров UNIX, на нее могут ссылаться страницы документации, она называется "подстановка результата выполнения". В то место команды, где находится эта конструкция, командный процессор подставляет результат выполнения того, что заключено в обратные апострофы. Детали см. в лекции 10. 3) Предполагается, что комплект установочных дисков всегда находится в шкафу рядом с сервером Solaris. На всякий случай следует заранее позаботиться о создании копии комплекта, (прим. авт.). 4) Для систем х86 это выглядит немного иначе: b - s или b cdr от -s (прим. авт.). Это следует знать заранее. После того как сервер Solaris настроен, надо распечатать некоторые файлы конфигурации, чтобы все сведения были под рукой. Храните их в шкафу с дистрибутивами или наклейте на корпус сервера. В данном случае нам пригодится содержимое файла /etc/vfctab. Если заранее это сделано не было, следует войти в систему под именем любого пользователя и дать команду /usr/sbin/mount. Однако не во всех случаях такое решение заменит распечатку файлов конфигурации, (прим. авт.). 6) Способ впервые описан по-русски в Сети Евгением Бобиным

Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Введение в UNIX. Интерфейс пользователя Лекция рассказывает о том, как начать работу с системой и описывает то, как пользователь взаимодействует с системой. Имеется описание основного текстового редактора UNIX. Включение и выключение компьютера Что происходит после нажатия на кнопку включения компьютера? Начинается загрузка - сначала BIOS, затем - операционной системы. При загрузке UNIX сначала загружается ядро, затем - все остальное. Подробно процесс загрузки описан в лекции 9. На всех терминалах после загрузки буцут светиться приглашения " login:". Во время загрузки будут запущены сетевые и системные приложения, такие как сервер протоколирования syslogd, web-сервер, сервер баз данных. Solaris, так же, как и любая другая UNIX-система, предназначен для круглосуточной работы в течение неограниченного времени. Однако в некоторых ситуациях, например, для проведения планового обслуживания или замены оборудования, компьютер может понадобиться выключить. Однако нельзя выключать Solaris когда угодно. Перед выключением следует обязательно дать команду shutdown или halt. В разных системах UNIX эта команда имеет разные ключи и совершает разные действия по умолчанию. Программа shutdown, вызванная без параметров, выдает на все активные терминалы, подключенные к системе, сообщение о завершении работы, ждет одну минуту затем останавливает систему В Solaris команда shutdown имеет ключ д, который задает время в секундах, через которое следует начать процедуру выключения системы. Для немедленного останова следует дать команду
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 shutdown -g О По команде shutdown Solaris переходит в режим работы 0. В этом режиме система завершает работу, и питание компьютера выключается. Выключение питания должно поддерживаться аппаратно. Если это не так, система выключается и предлагает ввести пароль root для продолжения работы в однопользовательском режиме или Ctrl-D для перезагрузки в многопользовательский режим. Подробнее о режимах работы системы говорится ниже в разделе "режимы работы системы" и в лекции 9. В случае перехода в однопользовательский режим можно, не опасаясь потери чьих-либо данных, дать команду halt, которая вызывает немедленный останов системы без выдачи предупреждений на терминалы. Перезагрузку системы следует выполнять по команде reboot. Выключать UNIX простым отключением питания без предварительного предупреждения (в виде shutdown или halt ) нежелательно, так как данные, еще не записанные на диск и хранящиеся в оперативной памяти, будут потеряны. Иногда это приводит к ошибкам в файловой системе на диске и может потребовать их исправления программой f sck (аналог scandisk в Windows). Команду shutdown может дать только root. Пользовательский интерфейс Интерфейс пользователя в UNIX может быть текстовым и графическим. Текстовый интерфейс является основным для большинства систем UNIX. Однако в Solaris часто используется графический интерфейс. Мы рассмотрим оба типа интерфейсов. Фактически, все команды, которые выполняются в текстовом интерфейсе, могут быть выполнены в текстовом окне в графическом интерфейсе. Графический интерфейс редко применяется для встроенных систем Solaris, например, там, где Solaris управляет автоматической телефонной станцией или технологическим процессом на заводе. Поэтому системный администратор должен уметь работать, используя любой интерфейс.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Вход в систему и выход из системы Для входа в систему следует набрать имя пользователя (login) и пароль (password). После загрузки система работает самостоятельно, независимо от того, вошел кто-то в нее или нет. Под "войти в систему" мы подразумеваем начало интерактивного сеанса работы с системой, когда пользователь отдает ей команды, сидя перед клавиатурой и экраном. После входа пользователя в систему для него запускается программа -командный процессор. Эта программа также часто называется интерпретатором команд, оболочкой или "шеллом" (shell). В среде этой программы проходит весь сеанс работы пользователя с системой. При входе с графической консоли Solaris вся работа проходит в среде программы-менеджера окон. Графический интерфейс пользователя и программы, которые его обеспечивают, в Solaris называется CDE (Common Desktop Environment). Более подробно он рассматривается в разделе "Интерфейс CDE"h в лекции 15 курса "Администрирование ОС Solaris". Для выхода из системы следует дать команду logout или нажать кнопку Exit в центре внизу экрана, если вы работаете в CDE. При работе в командном процессоре в текстовом режиме достаточно нажать Ctrl-D или дать команду exit (это эквивалентно Ctrl-D). Если в процессе работы вы запустили несколько командных процессоров, то команду exit или Ctrl-D придется давать до тех пор, пока, выходя из запущенных командных процессоров, вы не доберетесь до самого первого, который запустился при вашем входе в систему. Режимы работы системы UNIX может работать в однопользовательском режиме (single-user mode) или в многопользовательском режиме (multi-user mode). Для обычной работы система загружается в многопользовательском режиме. В нем пользователи могут одновременно входить в систему локально или через сеть, посылать программам, работающим в системе, запросы различного характера по сети. В этом режиме множество
пользователей одновременно могут работать в системе. Их число ограничивается размером таблиц ядра. Ограничение числа одновременно работающих пользователей связано не с числом одновременно запущенных командных процессоров или сеансов связи, а с количеством запущенных процессов и потребляемых ими ресурсов. Поэтому в каждый момент времени максимальное число пользователей, имеющих возможность работать с системой, может меняться. Однопользовательский режим используется системным администратором для настройки, резервного копирования или ремонта системы (например, запуска программы fsck, которая выполняет проверку и исправление ошибок в файловых системах дисков, или программы dump, которая выполняет резервное копирование). Для загрузки системы в однопользовательском режиме следует дать команду boot -s или b -s программе-загрузчику. Для перехода из многопользовательского режима в однопользовательский дайте команду init s или init S Тот же эффект даст выполнение команды shutdown без параметров. Для того чтобы перевести систему из однопользовательского режима в многопользовательский, нужно перезагрузить компьютер или выйти из командного процессора однопользовательского режима ( exit или Ctrl-D, работает в большинстве случаев). Кроме этого, можно запустить
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 программу ini t с параметром-названием режима работы, например init 3 Существует несколько режимов работы ( runlevels ) операционной системы. Режим с номером 1 соответствует однопользовательскому режиму, с номером 3 - многопользовательскому Режим номер 0 - это останов (на этот уровень систему переводит команда shutdown ). Подробнее о режимах работы системы говорится в руководстве по системе: man init Дополнительную информацию о режимах работы также можно получить из лекции 9. Понятие терминала Терминал - это экран и клавиатура, с помощью которых осуществляется связь с компьютером. Терминалы бывают графические и текстовые. Графические терминалы могут работать и в графическом, и в текстовом режиме. Терминал предназначен исключительно для ввода информации и ее отображения на экране. Терминалы бывают физическими (еще их называют реальными), виртуальными и псевдотерминалами (т.е. программами, которые "притворяются" терминалами ). Физический терминал - это устройство, состоящее из экрана и клавиатуры, обычно подключенное к компьютеру через последовательный интерфейс, например, с помощью кабеля или модема. Если вы соединяетесь с UNIX-машиной с помощью эмулятора терминала через модем своего компьютера, позвонив на другой модем, подключенный непосредственно к UNIX-машине, то с точки зрения UNIX вы работаете на физическом терминале. В этом случае связка модем - телефонная сеть - модем рассматривается как единый кабель. В старых версиях Solaris неофициально поддерживались виртуальные
терминалы. В версии 9 эта поддержка отсутствует. Основа виртуального терминала - это монитор и клавиатура, непосредственно подключенные к компьютеру. Однако, хотя монитор всего один, виртуальных терминалов может быть несколько. Вы можете по очереди работать с разными виртуальными терминалами, нажимая клавиши A]t-Fx, где х -номер терминала. С монитором и клавиатурой связано несколько независимых виртуальных терминалов. При работе в графическом режиме надо использовать клавиши Ctrl-A]t-Fn для переключения между виртуальными терминалами. Виртуальные терминалы, как правило, текстовые, хотя один из них может быть графическим. Виртуальные терминалы чаще всего используются в компьютерах на платформе 1386, потому что терминалы, подключаемые к компьютерам на других платформах, обычно постоянно работают в графическом режиме, а в этом режиме вместо нескольких виртуальных терминалов проще открыть несколько окон эмуляторов терминала. Виртуальные терминалы широко используются в Linux и FreeBSD. При работе с графическим терминалом для получения нескольких терминалов достаточно просто открыть несколько окон и в каждом из них запустить терминальную программу. Так, в Solaris можно запустить несколько приложений, обозначенных в меню CDE как "console". Программа, которая запускается при выборе приложения "console", называется dt con sole. Выбрав в меню "This host", вы запустите терминальную программу dtterm. Консоль - это терминал, который используется для загрузки операционной системы. Проще говоря, если системный администратор при загрузке использует некий терминал для наблюдения за процессом загрузки и (возможно) вмешательства в него, то этот терминал называется консолью. Для UNIX-систем консоль - это либо непосредственно подключенный к компьютеру монитор и клавиатура, либо подключенный к первому последовательному порту терминал. В приложении к виртуальным терминалам консолью является первый виртуальный терминал (Alt-Fl). Псевдотерминал - это программа-эмулятор терминала, которая
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 соединяется с UNIX-компьютером через сеть или запускается в графическом режиме (например, dtterm ). Любой терминал (физический, виртуальный или псевдотерминал) может быть графическим. Эмулятор графического терминала базируется на программе X-Server. Подробнее об Х-серверах и системе X-Window -в лекции 15 курса "Администрирование ОС Solaris". Текстовые терминалы могут отображать только текст и псевдографику. Мы будем рассматривать значительную часть команд Solaris в предположении, что мы работаем с текстовым терминалом. В то же время, когда в Solaris доступна и полезна программа с графическим интерфейсом, которая часто нужна системному администратору в работе, мы буцем рассматривать и такие случаи. Существует большое количество разных текстовых терминалов. Наиболее известны терминалы ANSI и VT-100. Разные терминалы отличаются друг от друга управляющими последовательностями. Например, чтобы передать терминалу команду "поднять курсор на одну строку вверх", терминалу VT-100 нужно передать последовательность <Esc> [А. Описания терминалов (и соответствующих управляющих последовательностей) содержатся в файле /etcftermcap и базе данных в подкаталогах /usr/share/lib/terminfo. Переменная среды окружения TERM должна иметь значение типа терминала, на котором вы работаете. Возможно, ее придется переопределить, если в начале вашей работы система неверно определила тип вашего терминала. Фактический тип вашего терминала может отличаться от того, что принят в системе по умолчанию. Переопределение выполняется путем присваивания переменной нужного значения: TERM='VT100'; export TERM Вывести на экран значение переменной TERM можно командой echo $TERM Если переменная TERM определена неверно, терминал буцет вести себя непредсказуемо. Например, при нажатии Enter не произойдет перевода 27
строки, или при нажатии стрелки "вверх" на экране появится [ [А, а курсор вверх не сдвинется. Некоторые терминалы практически совместимы между собой, например, ANSI и VT-100. Однако отдельные управляющие последовательности могут не совпадать. Поэтому лучше, чтобы в TERM был записан тип именно того терминала, на котором вы работаете. Таблица 2.1. Управляющие комбинации клавиш Ctrl-C прерывание выполнения программы (termination) Ctrl-D конец ввода текста Ctrl-S остановка вывода на экран Ctrl-Q продолжение вывода на экран Ctrl-U стирание введенной строки Ctrl-Z остановка выполнения программы (suspend) <backspace> удаление последнего введенного символа Управляющие комбинации клавиш Текстовый терминал воспринимает и передает активной программе коды следующих управляющих комбинаций клавиш, которые любая программа должна интерпретировать стандартным образом: Некоторые терминалы не воспринимают клавишу <backspace> стандартным образом, вместо нее на таких терминалах можно использовать клавишу <Delete>. В старых системах клавиша <Delete> могла использоваться вместо <Ctrl-С> для прерывания работы программы. Команда Ctrl-D (конец ввода текста) может использоваться в командном интерпретаторе для выхода из него. При работе в текстовом режиме выход из командного интерпретатора, запущенного для пользователя при входе в систему (такой экземпляр интерпретатора называется login shell), означает автоматическое завершение сеанса работы с системой (logout). В некоторых системах командный интерпретатор по умолчанию
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 настраивается так, чтобы такого завершения работы не происходило. В этом случае выйти из системы пользователь может, только дав команду logout. Настройка терминала: команда stty Проверить, как настроен терминал, можно с помощью программы stty: stty -а Эта команда позволяет узнать все настройки терминала, в том числе скорость и другие физические параметры передачи символов, а также управляющие комбинации: stty -а speed 9600 baud; rows = 24; columns = 80; ypixels = 490; xpixels = 570; csdata ? eucw l:0:0:0, scrw l:0:0:0 intr = Лс; quit = л\; erase = Ah; kill = ли; eof = Ad; eol = <undef>; eo!2 = <undef>; swtch = <undef>; start = Aq; stop = As; susp = Az; dsusp = Ay; rpmt = Ar; flush = Ao; werase = Aw; Inext = Av; -parenb -parodd cs8 -cstopb hupcl cread -clocal -loblk -crtscts -crtsxoff -parext -ignbrk -brkint -ignpar -pannrk -inpck -istrip -infer -igner icml -iuclc ixon -ixany ixoff -imaxbel isig icanon -xcase echo echoe echok -echonl -nofish -tostop echoed-echoprt echoke -defecho -flusho -pendin iexten opost -olcuc onlcr -ocml -onocr -onlret - ofill -ofdel Для настройки правильной реакции на стандартные комбинации клавиш (см. таблицу 2.1) нужно выполнить команды stty susp 'Az' stty intr 'Ac'
Торчинский Ф.И., Ильин Е.С. stty erase 'Ah' и т.д. Список параметров установки ( susp, intr, erase и другие) можно увидеть по команде stty -а или в руководстве (man sttу ). Интерфейс CDE Менеджер окон По умолчанию на консоли Solaris запускается графическая среда, которая называется "общей рабочей средой" (CDE - common desktop environment). Каждое приложение, работающее в графической среде, запускается в отдельном окне. Строго говоря, приложения, специально написанные для графической среды, запускаются в своем собственном окне, а те, что предназначены для исполнения в текстовой среде, могут работать и в графической, но в последнем случае - только в окне эмулятора терминала. Для управления окнами в графической среде используется специальная программа - менеджер окон. Именно она позволяет свертывать окна, изменять их размеры, перемещать по экрану, переключаться между ними, развертывать их на весь экран. Экран в каждый момент времени показывает содержимое рабочего стола, который в Solaris носит название "рабочего пространства" (workspace). Рабочих пространств может быть несколько. С точки зрения менеджера окон, рабочее пространство - это множество окон. Менеджер окон в Solaris позволяет переключаться между разными рабочими пространствами. По умолчанию их четыре, обычно используют от четырех до шести рабочих пространств. С помощью настроек менеджера окон число рабочих пространств можно изменить. Главная панель (front panel) менеджера окон доступна в любом рабочем пространстве внизу экрана (рис. 2.1). Она позволяет переключаться между пространствами, а также вызывать программы, для этого нужно лишь щелкнуть мышью по соответствующим иконкам. С подобной системой знакомы все, кто пользовался ярлыками в панели задач Windows. За каждой иконкой кроме конкретной программы скрывается
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 целый набор ярлыков, служащих для вызова других, тематически связанных с ней программ. Для доступа к ним следует нажать стрелку над иконкой (рис. 2.2). Более подробно о настройке среды CDE говорится в главе 30. Рис. 2.1. Главная панель CDE Рис. 2.2. Содержимое подменю главной панели CDE Экран - рабочее пространство пользователя На рабочем пространстве располагаются окна запущенных в данный момент программ. Окно может быть свернутым (тогда оно изображается иконкой в рабочем пространстве), по умолчанию размещение иконок свернутых окон начинается в левом верхнем углу и ведется сверху вниз слева направо. Также окно может занимать весь экран или любую его часть. Что можно сделать с окном
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Верхняя строка окна (рис. 2.3) содержит три элемента управления: черточку в левом верхнем углу окна (первый элемент), точку (второй) и выпуклый квадрат (третий) в правом верхнем углу окна. Рис. 2.3. Верхняя строка окна CDE При нажатии на первый открывается меню, которое позволяет восстановить первоначальный размер окна - restore (если окно развертывалось на полный экран до того), переместить окно - move, изменить его размер - resize, свернуть - minimize, развернуть на полный экран - maximize, поместить окно на задний план - lower (за окна других программ) или закрыть (close). Кроме того, с помощью этого же меню можно указать, что данное окно должно присутствовать во всех (occupy all workspaces) или нескольких (occupy workspace) рабочих пространствах. При переключении из одного пространства в другое окно буцет "переходить" вслед за вниманием пользователя из одного пространства в другое. Второй элемент управления служит для свертывания окна (эквивалентно выбору minimize в меню первого элемента управления, а третий - для развертывания во весь экран (эквивалентно maximize). У развернутого окна третий элемент управления выглядит иначе (впалый квадрат) и служит для восстановления первоначального размера окна (restore). В качестве графической среды кроме CDE в Solaris, начиная с версии 9, поставляется GNOME 2.0. Можно использовать эту альтернативу CDE, особенно там, где требуется исполнять программы, специально разработанные для работы с GNOME. Текстовый редактор В графической среде можно использовать не только текстовый редактор vl или его аналог, но и редактор, в котором окно и меню представлены в графическом виде и есть возможность выбирать пункты
меню как нажатием комбинаций клавиш, так и мышью. Можно также использовать предустановленные редакторы dtp ad (вызывается с управляющей панели CDE из группы Applications - Text Editor или командой dtpad& из командной строки) или xedit - из командной строки. Редактор dtpad представляет собой несколько урезанный по функциям аналог WordPad из систем Windows. Текстовый редактор vi Vi может находиться в одном из двух режимов - командном режиме или режиме ввода. При запуске редактор начинает работу в командном режиме. В этом случае все, что вы набираете на клавиатуре, интерпретируется как команда. Команды в vi короткие - почти все состоят из одной или двух букв. Некоторые команды редактора vi отображаются в служебной строке. Служебной строкой в vi считается последняя строка экрана. Большинство команд редактора никак не отображаются, хотя выполняются. Это не очень удобно, если у пользователя дрожат руки, или он не помнит, какую клавишу только что нажал. Так можно легко стереть или модифицировать текст неожиданным образом. Старайтесь не допускать случайных нажатий на клавиши в командном режиме! Vi отображает вводимую команду в служебной строке, если это команда поиска, или если команда вводится в режиме совместимости с редактором ed. При отображении чего-либо в служебной строке экрана строка файла, которая раньше показывалась в этой строке, никак не меняется. Для перехода в режим ввода дайте команду a, i или о. После этого можно будет начинать ввод текста. Текст начнет соответственно вводиться в позиции курсора, в позиции, следующей за позицией курсора, или в начале новой строки, которая появится под текущей строкой. В режиме ввода все клавиши, которые набираются на клавиатуре, за исключением клавиши <Esc>, интерпретируются как набираемый текст. <Esc> - это переход из режима ввода в режим команд. В режиме ввода не всегда можно пользоваться клавишами
передвижения по тексту (стрелками, PgUp, PgDn, Home, End и т.д.). Если терминал настроен не совсем корректно, то нажатие, например, клавиши "стрелка вверх", vi может воспринять как нажатие <Esc>, за которым следует [В. Поэтому может случиться так, что нажав стрелку "вверх" в режиме ввода, вы незаметно для себя перейдете в режим команд. Если вы продолжите ввод текста, он будет воспринят как команда. Таким образом, иногда можно передвигаться по тексту в режиме ввода, но лучше сначала выйти в командный режим, затем перейти по тексту в нужное место и снова перейти в режим ввода. Переход по тексту в командном режиме выполняется клавишами передвижения по тексту (стрелками, PgUp, PgDn, Home, End), а также нажатием <Ctrl-F> (forward, вперед на страницу), <Ctrl-B> (backward, назад на страницу). Бывает, что клавиши-"стрелки" не работают. Тогда можно использовать вместо них клавиши h, j, k, 1 следующим образом: Ik 1 Рис. 2.4. Эти клавиши были выбраны только потому, что они расположены рядом; буквы h, j, к и 1 не соотносятся с английскими словами, которые можно было бы ассоциировать с передвижениями вверх-вниз, вправо-влево. В таблице 2,2 перечислены основные команды редактора vi . Полный список можно посмотреть в руководстве по vi ( man vi ) или в книгах Арнольда Роббинса (Arnold Robbins) "Vi Pocket Reference"^ и "Learning the vi Editor". Таблица 2.2. Основные команды редактора vi начало ввода перейти в режим ввода, начать ввод в позиции, следующей за позицией курсора i перейти в режим ввода, начать ввод в позиции курсора перейти в режим ввода, добавить пустую строку под
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 о текущей строкой и начать ввод в новой строке операции с буфером dd вырезать текущую строку в буфер х вырезать текущий символ в буфер и отменить последнее действие у у копировать текущую строку в буфер р вставить строку из буфера под текущей замена символа гп заменить символ в позиции курсора на п перемещение по тексту О перейти в начало строки $ перейти в конец строки j перейти на сроку вниз к перейти на строку вверх h перейти на символ влево 1 перейти на символ вправо если курсор стоит в позиции символа "скобка" (круглая, % квадратная или фигурная), перейти в позицию соответствующей второй скобки Ctrl-G показать текущую позицию (номер строки) в файле поиски замена / поиск вперед ? поиск назад : s/что/ на поиск и замена что/[д] запись и завершение редактирования Z Z выход из редактора, запись файла : q выйти из редактора
: w записать изменения : wq записать и выйти записать, даже если нет права записи в файл (срабатывает, : w! . только если выполнена от имени root) имя файла записать в файл с другим именем; в дальнейшем : w будет считаться, что редактируется именно этот файл с другим именем <Esc> переход в командный режим Все команды, начинающиеся с двоеточия, - это команды режима совместимости с редактором ed. Ввод двоеточия интерпретируется vi как переход к этому режиму. Как только вы введете двоеточие, оно отобразится в начале служебной строки, и оставшуюся часть команды вы будете набирать, видя ее в этой строке. В качестве служебной строки используется последняя строка экрана. Перед любой командой vi , где это имеет смысл, за исключением команд, начинающихся с двоеточия, можно набрать число, которое будет указывать, сколько раз требуется повторить идущую за ним команду. Например, 15dd означает, что нужно вырезать в буфер пятнадцать строк, начиная с текущей. Важная часть команд - команды поиска и замены. Обычный поиск выполняется командой /образец, т.е. знак "слэш", за которым следует образец для поиска. При поиске назад по файлу вместо слэша используется вопросительный знак. Для продолжения поиска ставится слэш или вопросительный знак без образца. Если в образце встретится слэш или вопросительный знак, vi сочтет их ограничителем образца и проигнорирует остаток образца. Поиск и замена выполняется командой : з/образец/на_что_менять/. В ней указывается образец для поиска и строка, которой следует его заменить. После завершающего слэша может стоять модификатор д. Если его не поставить, заменен будет только первый образец в строке. Если в строке есть еще
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 подстроки, отвечающие образцу, они останутся нетронутыми. Если поставить модификатор д, буцут заменены все подстроки, отвечающие образцу Все команды режима совместимости с редактором ed могут быть предварены выражением n,m, где n,m - номера строк, ограничивающих диапазон выполнения команды. Если такого выражения нет, команда выполняется для текущей строки. Например: :23,33s/black/white/g означает, что нужно заменить все вхождения black на white во всех строках с 23 по 33 включительно. В выражении, описывающем диапазон, допустимы числа и символы " ." и " $ ", а также арифметические выражения. Символ " ." обозначает текущую строку, символ " $ " - последнюю строку файла. Например, :.,.+7 s/black/white/g означает замену black на white в восьми строках, начиная с текущей. Допустим, мы находимся в первой строке. Тогда выражение .,.+7 фактически означает 1,1+7 т.е. 1,8 Команда :. ,$s/yellow/blue/g означает замену yellow на blue во всех строках, начиная с текущей и до конца файла. В режиме совместимости можно не только выполнять команды поиска
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 и замены. Здесь есть еще команда удаления - d. Команда :l,.d удалит все строки с первой по текущую. Диапазон может состоять из одной строки, например команда :4d означает требование удалить четвертую строку Ввод числа за двоеточием без всяких команд означает переход к строке с указанным номером, например :56 вызовет переход к 56-й строке. Коротко о документации. Организация шап-страниц Невозможно изучать или пользоваться UNIX, не имея руководства по системе. Печатное руководство поставляется только с коммерческими системами, да и то не всегда. Кроме того, печатные руководства, как правило, куда-то исчезают именно в тот момент, когда они вам позарез нужны. К счастью, любой диалект UNIX устанавливается вместе с электронной копией документации. Эта документация состоит из нескольких разделов (обычно их семь или восемь, иногда больше). Каждый раздел содержит статьи, каждая из которых посвящена одной команде, файлу, понятию или системному вызову UNIX. Любая статья имеет свой заголовок, в котором есть имя команды (файла, вызова и т.п.) и ее очень короткое описание, например: ср - copy files and directories Руководство вызывается командой man . Программа тап форматирует страницу руководства и показывает ее на экране с помощью программы форматирования nrof f и программы поэкранной выдачи текста more
(или ее аналога - page, pg, less ). На диске страницы руководства хранятся в неформатированном виде, так как это экономит место на диске. Страницы руководства хранятся в каталогах /usr/share/man/manN (N - номер раздела) или /usr/man/manN либо в каком-нибуць похожем подкаталоге /usr. Однажды отформатированные страницы man складывает в подкаталоги catN. Иногда они расположены там же, где и manN, иногда - нет. Программу man можно запустить с ключом -М, чтобы указать, в каком каталоге искать страницы руководства. Иногда при установке некоторых программ руководства по ним размещаются вне стандартного дерева каталогов man , тогда этот ключ может пригодиться. Ссылки на man -страницы в литературе обычно включают номер раздела, в котором расположена статья, например, inetd.conf(5) означает статью о конфигурационном файле inetd.conf демона inetd в пятом разделе руководства. В этой книге мы тоже буцем так ссылаться на статьи руководства по системе. В таблице 2,3 перечислены разделы руководства, к которым обращается man . В BSD и System V руководства организованы немного по-разному. Таблица 2.3. Разделы электронного руководства по UNIX раздел System V BSD 1 2 3 4 Команды Системные вызовы Библиотечные несистемные вызовы (например, из библиотеки Perl) Драйверы устройств, файлы и протоколы 5 Разные документы файлы конфигурации игры и 6 7 Игры и демонстрационные программы Драйверы устройств и сетевые протоколы (другие System V системы) демонстрационные программы тексты, кодировки, выражения 8 утилиты системного администрирования
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Некоторые коммерческие системы UNIX имеют дополнительные страницы руководства, описывающие специфические элементы данной системы. Они обозначаются, как правило, номером раздела с какой-нибудь буквой, например 1Ь. Чтобы получить справку по любой команде UNIX или даже понятию, наберите man то_что_Вас_интересует Набирайте man -к тема для поиска подстроки тема в заголовках статей руководства. Команда man -к предполагает, что существует индексированный список заголовков статей руководства. Этот список создается командой catman или каким-нибудь ее аналогом. Синоним man -к - это команда apropos. Для поиска информации о программах можно использовать еще и команду what i s. Некоторые команды в UNIX - это встроенные команды командного процессора, а не отдельные программы. Например, alias и jobs. Поэтому, если вы не можете найти справку по таким командам, попробуйте почитать man по командному процессору, которым вы пользуетесь (скорее всего, sh или bash ). Кроме man , документация содержится в гипертекстовых файлах формата info и файлах HOWTO. Файлы info нужно читать программой info. Можно ее запустить без параметров и затем дать команду ? для знакомства с системой встроенных команд info. Она отличается от man своей "гипер-текстовостью" и позволяет переходить по ссылкам как внутри документа, так и между документами. HOWTO - это набор документации, распространенный в Linux. В документах HOWTO разъясняются многие действия, которые могут понадобиться при администрировании. HOWTO распространяется в формате html или в виде текстовых файлов. В отличие от man , не существует жесткой структуры HOWTO. Это просто набор документов, и на одном сайте он может оказаться более полным, чем на другом.
В Интернете есть несколько сайтов, на которых размещен перевод на русский язык man и HOWTO в формате htmL Перевод не всегда хорош, поэтому если вы не в состоянии понять, что написано в переводе документации, остается в сердцах ругать переводчика и обращаться к оригиналу Где хранятся настройки ОС? Большинство файлов конфигурации UNIX расположены в каталоге /etc. Практически все файлы конфигурации представляют собой обычные текстовые файлы. Довольно часто их содержание снабжено неплохими комментариями. Все строки, которые в файле конфигурации начинаются со знака # (решетка), являются комментариями. Исключением являются файлы конфигурации паше-сервера (DNS) - там признаком комментария служит символ ; (точка с запятой). Формат файлов конфигурации бывает разным и зависит от того, чей это файл конфигурации. Файлы конфигурации пользовательских приложений, особенно тех, что установлены после установки системы без компиляции из исходных текстов, могут находиться не в /etc, а в каталогах типа /usr/local/etc или внутри дерева каталогов, куда установлен пакет программ (/usr/local/apache/conf). Файлы конфигурации можно редактировать в обычном текстовом редакторе. Некоторые файлы сгенерированы системой или какой-нибудь утилитой автоматически на основании других; в начале таких файлов обычно содержится предупреждение, что для реального изменения конфигурации нужно редактировать не этот файл, а источник, на основании которого сделан файл конфигурации. Упражнения 1. Запустите редактор vi . Наберите в нем произвольный текст, используя только латинские буквы, знаки препинания и цифры. Запишите получившийся текст в файл proba.pera. 2. Откройте файл proba.pera с помощью редактора vi . Замените все вхождения символа а на символ z во всех строках файла со второй по пятую включительно. Запишите файл.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 3. При возникновении вопросов по выполнению пп. 1 и 2 воспользуйтесь справочным руководством по vi . 4. Дайте команду выключения системы. Выключите компьютер. Ц 1st Edition January 1999. Series: Pocket References. ISBN: 1-56592-497-5 O'Reilly Assosiates.
Торчинский Ф.И., Ильин Е.С. Установка ОС Solaris Лекция подробно рассказывает об установке системы. Рассматриваются все способы установки; эта информация важна для принятия решения о том, как устанавливать системы на несколько компьютеров. Подробное руководство по установке системы размещено на web-сайте компании Sun Microsystems по адресу ссылка: httpy/docs.srui.com/app/docs/doc/816-7171/6md6pohml?a=view (или здесь скачать: ../projects/3/816-7171.pdf). Здесь будут рассмотрены основные концепции установки и некоторые детали этого процесса. Дистрибутив Solaris 9 может быть бесплатно переписан с сайта ссылка: http://www.sun.com для любой поддерживаемой платформы (х86 и SPARC), а также получен в виде комплекта компакт-дисков или диска Solaris 9 DVD. Способы установки Прежде всего надо определить, что предстоит сделать: • установить Solaris на один компьютер или на несколько однотипных компьютеров; • установить только операционную систему Solaris или же еще какие-либо дополнительные пакеты программного обеспечения. Ниже описаны шесть способов установки Solaris 9 и даны краткие рекомендации по их применению, на основании чего вы сможете выбрать тот, который подходит вам больше. 1. Solaris Web Start Installation Program. 2. Solaris suninstall Program. 3. Solaris Live Upgrade Method. 4. Factory JumpStart Installation Method. 5. Custom JumpStart Installation Method. 6. Web Start Flash Installation Feature. Последние два способа применяются для установки Solaris на несколько
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 однотипных компьютеров и требуют использования созданного администратором профиля^ (profile) установки. Названия способов здесь и далее приводятся по-английски, чтобы легче было руководствоваться англоязычной документацией и англоязычным пояснительным текстом на web-сайте ссылка: http://www.sun.coin или на компакт-дисках дистрибутива Solaris 9. Установка с помощью Solaris Web Start Installation Program Этим способом стоит воспользоваться в следующих случаях: 1. установку выполняет "умеренно опытный" системный администратор, для которого важна возможность выполнить шаг назад в установке ; 2. установку необходимо провести в графическом режиме; 3. требуется установить не только Solaris 9, но и дополнительные программы, пакеты которых уже готовы к установке (имеются в локальной сети или на компакт-дисках). Этот способ отличается от других тем, что обеспечивается отдельным Java-приложением Solaris Web Start Installation. Установка производится с компакт-диска Solaris Web Start Installation или диска Solaris 9 DVD. С помощью Solaris Web Start Installation неудобно устанавливать несколько однотипных систем, потому что этот способ предполагает интерактивное общение между программой-установщиком и системным администратором. Для пакетной (неинтерактивной) установки следует воспользоваться способами Custom JumpStart Installation или Web Start Flash Installation. Установка с помощью Solaris suninstall Program Установка посредством программы suninstall производится с компакт-диска Solaris 9 Software 1 of 2. Этот способ позволяет установить только саму операционную систему Solaris 9 без дополнительных приложений. Установка с помощью suninstall
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 выполняется с интерфейсом командной строки. Так же, как и предыдущий, этот способ неудобен для пакетной установки системы на несколько компьютеров, потому что предполагает интерактивное общение между программой-установщиком и системным администратором. Для пакетной (неинтерактивной) установки следует воспользоваться способами Custom JumpStart Installation или Web Start Flash Installation. Для того чтобы начать установку способом sun in st all, достаточно просто загрузиться с компакт-диска Solaris 9 Software 1 of 2. Установка способом Custom JumpStart Этот способ позволяет установить систему с нуля или выполнить обновление более ранней версии Solaris. Установка производится с интерфейсом командной строки и предполагает использование ранее подготовленного профиля установки для установки Solaris на нескольких компьютерах. Создание профиля установки (файл конфигурации с описанием параметров и особенностей установки ) - дело достаточно трудоемкое, поэтому если планируется установить Solaris на два-три компьютера, может оказаться проще установить Solaris на каждый из них способом Solaris Web Start Installation Program или с помощью suninstall. Custom JumpStart Installation Method специально предназначен для пакетной установки системы на несколько компьютеров и не предполагает интерактивного общения между программой-установщиком и системным администратором. Установка способом Web Start Flash Web Start Flash Installation позволяет произвести установку Solaris 9 на большое количество компьютеров на основе настроек, заранее сделанных на главном сервере установки (master server). Для установки Solaris этим способом следует вначале настроить главный сервер установки, а затем создать архив Web Start Flash. Можно создать
несколько архивов и указать, какие из них следует использовать для установки системы на определенные компьютеры. Архив Web Start Flash представляет собой образ установки, поэтому установка из такого архива выполняется намного быстрее, чем любым другим способом. Это связано с тем, что при установке другими способами программа установки обновляет базу установленных пакетов при установке каждого выбранного пакета программ, а образ Web Start Flash уже содержит и все требуемые для установки пакеты и базу установленных пакетов. Каждый из перечисленных способов позволяет организовать сервер установки и создать на нем образ Web Start Flash. Программа-установщик спрашивает, желаете ли вы установить образ Web Start Flash, если вы используете метод установки Web Start Installation, Solaris Live Upgrade или программу suninstall. В остальных случаях вы можете указать, что это следует сделать, используя настройки профиля установки. После того как образ Web Start Flash создан, его нельзя изменить. Если требуется установить Solaris на несколько разных компьютеров с разными установками, следует создать по одному образу Web Start Flash для каждого вида компьютеров в отдельности. Помните, что образ Web Start Flash занимает много места на диске: это образ всех устанавливаемых каталогов. Этот способ лучше всего подходит для установки системы на множество однотипных систем. Если требуется установить много систем разных конфигураций, надо пользоваться способом Custom Jump Start Installation. Как создать образ Web Start Flash Вначале установите Solaris на главный сервер установки. Все остальные компьютеры буцут клонированы именно с этого сервера, т.е. их системы буцут в точности повторять систему главного сервера установки. Поэтому прежде всего любым из способов следует установить Solaris 9 на этот компьютер. Затем, с помощью программы flarcreate следует создать образ установки:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 fiarcreate -п имя ключи путь Создаваемый образ установки будет иметь заданное имя (оно идентифицирует образ и может не совпадать с именем файла, где сохранен образ), и будет записан в указанный каталог и файл, как требует параметр путь. Доступные ключи можно изучить в man fiarcreate. Для разделения и объединения созданных архивов служит команда f lar. Чтобы клонировать установленную систему с помощью созданного образа установки, следует записать этот образ на один из следующих носителей, путь к которому затем надо будет указать в качестве источника для установки Solaris везде, где его требуется установить: • каталог NFS; • web-сервер; • FTP-сервер; • лента; • компакт-диск CD или DVD; • локальный жесткий диск компьютера, на который планируется установить Solaris. Образ установки можно сжать для экономии места на диске, если указать соответствующий флаг программе fiarcreate, которая после создания образа установки вызовет программу compress для сжатия образа. Программа compress является стандартным средством сжатия архивов в любой системе UNIX. Для установки системы из образа установки можно воспользоваться любым из вышеперечисленных методов. Если производится интерактивная установка Web Start, то следует начать ее обычным образом, например, загрузившись с компакт-диска Solaris Installation CD. Как только установочная программа попросит выбрать местоположение дистрибутива (Specify Media), надо выбрать местоположение образа установки (Web Flash Archive). В зависимости от типа носителя, на котором он хранится, следует либо вставить компакт-диск с образом установки (местоположение на CD или DVD), либо указать путь к
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 образу (NFS), либо указать адрес и, если требуется, информацию о прокси-сервере (http или ftp), или указать файл устройства ленты, если выбрана установка с ленты. Аналогично следует поступить при установке с помощью программы sun install: в диалоговом окне Flash Archive Retrieval Method потребуется указать путь к образу установки. При установке методом Custom Jumpstart следует: 1. Создать на главном сервере установки файл правил rules, как описано в лекции 14 курса "Администрирование ОС Solaris". 2. Создать на главном сервере установки файл профиля, как описано лекции 14 курса "Администрирование ОС Solaris", и в нем указать тип установки, местоположение образа установки и правила разбиения дисков на разделы. Это может выглядеть, например, так: install_type flash_install archive_location nfe masterserver:/export/so]aris9archive partitioning explicit filesys rootdisk.sO 3000 / filesys rootdisk.sl 512 swap filesys rootdisk.s7 free /export/home 3. Указать на главном сервере имена компьютеров, на которые через сеть буцет установлена система Solaris 9: # cd /export/home/s9cdsparc/Solaris_9/Tools # ./add_install_client -d hero sun4u Вместо /export/home/s9cdsparc следует указать каталог образа установочного компакт-диска, в котором в вашей системе находится программа add_install_client. В данном примере hero - имя сервера, который буцет установлен через сеть (а не главного сервера установки!), a sun4u - название платформы этого сервера. 4. Выполнить установку систем-клонов.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Более подробно об установке способом Custom JumpStart говорится в лекции 14 курса "Администрирование ОС Solaris". Solaris Live Upgrade Method Метод обновления системы Solaris Live Upgrade позволяет создать копию среды загрузки и обновить только копию, пока задействован оригинал. Можно запустить обновление в графической среде или с интерфейсом командной строки. Сначала создается копия действующей среды загрузки, после чего можно обновить систему или установить образ установки типа Web Start Flash в неактивную копию. Затем обновленная копия активируется при следующей перезагрузке. Это позволяет при необходимости вернуться обратно, указав, что следует пользоваться старой средой. Подробности этого способа обновления системы можно почерпнуть из руководства по установке. Factory JumpStart Installation Method Способ Factory JumpStart автоматически устанавливает Solaris 9 на новые системы архитектуры SPARC. Для этого требуется включить систему и вставить первый компакт-диск Solaris 9 Software или Solaris 9 DVD в привод CD или DVD. Параметры установки будут выбраны автоматически, в зависимости от типа компьютера, на который производится установка. Для систем архитектуры х86 этот способ недоступен. Выбор оборудования Это самый важный этап установки. Изучите список Hardware Compatibiliiy List, размещенный по адресу ссылка: httpy/www.sun.com/bigadmin/hcV, чтобы избежать лишних проблем на этапе установки. Если Solaris не поддерживает какие-либо устройства, установленные на вашем компьютере, не следует ожидать, что при установке он неожиданно начнет их поддерживать. Многократно проверено, что установка Solaris на компьютеры с неподдерживаемыми устройствами заканчивается установкой других устройств и перенастройкой Solaris. В тех редких случаях, когда система все же
"принимает" такое устройство, оно не предоставляет достаточной функциональности. Например, неподдерживаемый видеоадаптер даст возможность работать, но графическая среда будет работать с разрешением 640 на 480 в 16 цветах. Правда, заманчивая перспектива увидеть мир Solaris глазами создателей первых IBM PC АГ? Если вы устанавливаете сервер, от которого потребуется высокая производительность (особенно дисковая или сетевая), а за финансированием дело не станет, надо рассмотреть возможность покупки компьютера на RISC-платформе SPARC. В этом случае, так как платформа является родной для Solaris, вы определенно избежите несовместимости операционной системы и оборудования. Однако это решение потребует примерно вдвое или даже втрое больше затрат и ограничит круг соотечественников, у которых вы можете попросить совета. Количество пользователей компьютеров SPARC в России очень невелико. Если выбор уже сделан в пользу архитектуры i386 или финансовые ограничения не предполагают иного выхода, то внимание при выборе конфигурации оборудования следует уделить прежде всего следующему: • сетевой адаптер обязан входить в список совместимого оборудования Solaris (HCL - Hardware Compatibiliiy List). Обратите внимание на то, что каждая версия Solaris имеет свой собственный список! Некоторые сетевые адаптеры (например, Realtek 8139) работают только при условии установки драйверов сторонних производителей. Сведения о конкретных драйверах можно почерпнуть, в частности, из конференции ссылка: http ://www. Solaris, op ennet.ru; • видеоадаптер может отсутствовать в списке совместимого оборудования Solaris, и при этом работа в системе будет возможна (как в текстовом, так и в графическом режиме), однако в этом случае работать в графической среде CDE будет крайне неудобно; адаптеры АП поддерживаются, насколько показывает наш опыт, лучше других; • контроллеры AIAPI (IDE) не всегда корректно работают в режиме DMA. В этом случае следует отключить поддержку DMA (см. раздел 'Начало установки" в этой лекции) и смириться с заметным снижением быстродействия системы. По возможности следует
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 использовать контроллеры и диски SCSI, при условии, что устанавливаемый в компьютер контроллер содержится в списке совместимого оборудования Solaris. Выбор набора программ Все программы и другие компоненты системы, которые инсталлируются в процессе установки Solaris, объединены в пакеты программ. Эти пакеты имеют имена, начинающиеся на SUNW, например, SUNWdtab. Пакет ( software package ) объединяет файлы, каталоги и сценарии установки в какой-то одной категории (конкретное приложение, система). Например, пакет SUNWesu включает такие программы, как lastcomm, banner и т.п. Пакеты организованы в так называемые кластеры ( software clusters ). Кластерам даются имена, начинающиеся на SUNWC, например, кластер SUNWCdtusr содержит пакеты SUNWdtezt, SUNWdthe,SUNWdthev, SUNWdthez, SUNWdticn, SUNWdtim и другие, необходимые для работы графической среды CDE. Кластеры ПО объединены в группы ПО ( software groups ), которых всего пять: • Core (SUNWCreq); • End User (SUNWCuser); • Developer (SUNWCprog); • Entire distribution (SUNWCall); • Entire distribution plus OEM (SUNWCxall). Каждая из этих групп содержит в себе все предшествующие группы с неким дополнением, как матрешка. Группа Core включает в себя только минимально необходимые для работы компоненты системы. Если установить только группу Core, система займет 718 Мб дискового пространства. В эту группу входят базовое программное обеспечение для работы с сетью и драйверы, которые требуются для работы графической среды, но не входит сама
графическая среда. Установка только группы Core может подойти для тех систем, которые буцут эксплуатироваться в качестве серверов (без графического интерфейса). Скорее всего, кроме группы программ Core потребуется установить некое дополнительное программное обеспечение, которое и будет обеспечивать функциональность сервера (например, СУБД). Группа End User состоит из программ группы Core и программ, необходимых пользователю рабочей станции, в частности, графического интерфейса CDE или GNOME и программ для работы в нем. Группа Developer содержит программы группы End User и необходимые разработчикам библиотеки, заголовочные файлы (include files) и утилиты. Внимание! Компилятор языка С не входит в стандартную поставку Solaris 9! Можно скачать GNU С с web-сайта ссылка: http://www.gnu.org или взять фирменный компилятор Sun и лицензию на него с ограничением по времени работы; все это - на web-сайте ссылка: http://www.sun.com. Группа Entire distribution включает в себя все кластеры ПО Solaris, относящиеся к платформе вашего компьютера. Этот набор пакетов -заведомо избыточный, но если на диске есть свободные полтора гигабайта, почему бы не заполнить их разным ПО? Группа Entire distribution plus OEM состоит из программ группы Entire distribution и дополнительных драйверов для поставщиков ОЕМ-систем. Эти дополнительные драйверы могут не иметь отношения к конфигурации вашего компьютера и представлять интерес только для владельцев систем SPARC. Какой из этих групп программ отдать предпочтение? Если на диске достаточно места (есть свободные полтора гигабайта, которые не предназначены для других надобностей), то Entire Distribution представляется хорошим выбором, поскольку позволяет не заботиться о возможных взаимосвязях устанавливаемых программ. Если вы остановились на другой группе ПО, следует, устанавливая затем в систему дополнительные программы, позаботиться о том, чтобы для этих программ в системе были все необходимые библиотеки. В то же время установку большого количества программ, ненужных и
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 (возможно) открывающих какие-то опасные "дыры" в системе безопасности ОС, нельзя считать наилучшей практикой. Выход состоит в том, чтобы при установке большого числа программных пакетов жестко контролировать их автоматический запуск. Никогда не следует автоматически запускать те программы, назначение которых вам неизвестно, неясно, или те, которые не выполняют важных функций в системе, а запускаются "про запас" или "потому что лень искать, как запретить их запуск" Термины "группа программ" (Software Group), "метакластер" (metacluster), "вариант установки" (distribution), 'Установочный кластер" (installation cluster) часто употребляются в качестве синонимов в отношении наборов пакетов программ в Solaris. Постарайтесь относиться терпимо к этому словарному разнообразию. Эту словесную путаницу нередко усугубляет неудачный перевод, а также и сама компания Sun Microsystems, которая употребляет слово cluster и в отношении групп пакетов программ, и в отношении объединенных в аппаратный кластер компьютеров. Аппаратным кластером принято называть совокупность компьютеров, которые с помощью специального программного обеспечения могут выполнять программы параллельно на всех процессорах кластера, обеспечивая оптимальную загрузку каждого из них. При этом такой аппаратный кластер обычно обеспечивает и общее дисковое пространство. Для проверки того, какая группа программ была установлена при установке системы Solaris, следует изучить содержимое файла /var/sadm/system/admin/CLUSTER. Важно отметить, что в реальности некоторые пакеты устанавливаются независимо от того, какой набор был вами выбран. Например, пакеты локализации не отнесены ни к одному из кластеров ПО, и в то же время они устанавливаются при выборе любого из перечисленных вариантов установки. С другой стороны, некоторые пакеты ПО, относящиеся к поддержке конкретной аппаратной конфигурации и входящие в группу программ Entire Distribution Plus OEM, также устанавливаются при выборе любого из типов установки. А как же иначе система будет работать с
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 оборудованием? Независимо от используемого метода установки, программа-установщик обязательно спросит, какую группу ПО следует установить. Выбор за вами. Порядок установки Прежде всего запускается Solaris Device Configuration Assistant (DCA). Это программа с текстовым интерфейсом, которая распознает, какие в компьютере установлены устройства, и помогает настроить ядро для последующей установки системы и ее дальнейшей работы. При старте DCA находит устройства, установленные в компьютере. То, что найдено на этом этапе, может не поддерживаться ядром. Если некое устройство распознано, это не значит, что ядро Solaris сможет работать с этим устройством после установки системы. Например, сетевой адаптер SMC 9432 EtlierPower II прекрасно распознается программой DCA, но впоследствии не поддерживается ядром Solaris 9. Некоторые устройства, возможно, придется поддерживать с помощью драйвера, написанного вне Sun Microsystems, так как "фирменный" драйвер, идущий в поставке системы, не обеспечивает их стабильной работы. Так, для сетевого адаптера Realtek 8139 рекомендуется установить драйвер от Масаюки Мураямы (Masayuki Murayama), ссылка: http 7/homepage2 .nifty.com/miym3/taiyodo/eng/. Если при старте DCA какие-то из устройств не были обнаружены, следует указать явным образом, что именно следует искать (это делается нажатием клавиши F3). Когда все устройства определены, приходит пора указать, с какого устройства будет происходить загрузка. Имеется в виду первичная загрузка ядра в момент установки. Этим устройством может быть сеть или CDROM. В подменю Boot Tasks можно выбрать параметры автозагрузки - таймаут для выбора альтернативного варианта загрузки и т.п. Настройки по умолчанию являются вполне приемлемыми. После этого работа DCA завершается, и начинается этап, который зависит от выбранного метода установки. Мы рассмотрим вариант
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Solaris Webstart Installation. Потребуется выбрать язык установки: предлагается французский, немецкий, два диалекта китайского, японский, а также английский. Язык установки не связан с тем, какие языки будут поддерживаться системой после установки. После выбора языка запускается Solaris Installation Program. Следующей по порядку запускается kdmconfig. Это программа выбора параметров графической подсистемы. Здесь потребуется указать тип монитора, видеоадаптера и размер экрана. Можно отказаться от настройки графической подсистемы, тогда при каждой следующей загрузке системы буцет предлагаться настроить эти параметры. Впоследствие можно запустить kdmconfig вручную из командной строки в текстовом режиме или в окне терминала. Не следует указывать эти параметры наобум: попытка протестировать видеорежим с неверным типом видеоадаптера kdmconfig безнадежно "подвесит" компьютер. Если это произошло на этапе установки системы, установку придется начать заново. В общем случае, если настраивать параметры графического режима в момент установки нет времени, возможности или желания, лучше пропустить эту настройку вовсе, чем лгать установщику. Если графическая подсистема не настроена, Solaris после установки будет после старта системы предоставлять на консоли текстовый интерфейс командной строки. После kdmconfig настает черед разделения диска на разделы. По умолчанию весь имеющийся диск отдается в монопольное пользование системе Solaris. При этом минимальный раздел swap займет 414 Мб (512 Мб по умолчанию) и расположится в первых цилиндрах диска (начиная с третьего). Этот раздел будет вначале (при установке системы ) использоваться в качестве временного диска. Если установка системы неожиданно прервалась на этапе, когда разделы диска уже определены, можно попробовать запустить ее заново командой /sbin/cdO_install. При разделении диска можно предусмотреть отдельные разделы для разных файловых систем. По умолчанию создаются раздел swap и корневой раздел (/). Рекомендованные минимальные размеры дисков,
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 включая раздел swap, различны для разных наборов программ, выбираемых при установке: Entire Solaris Software Group Plus OEM Support 2.9 Gbytes Entire Solaris Software Group 2.7 Gbytes Developer Solaris Software Group 2.4 Gbytes End User Solaris Software Group 2.0 Gbytes После определения разделов диска программа установки начнет копировать mini_root на жесткий диск. Этот процесс занимает около 20 минут, хотя на быстрых дисках протекает значительно быстрее. Mini-root - это минимальное ядро Solaris, достаточное для обеспечения работы программы установки. Если при копировании mini-root возникнут множественные ошибки чтения компакт-диска или ошибка с сообщением Warning: /pci@0,0/pci-ide@7,l/cmdk@0,0 (Disk 0) Error for command 'read sector'. Error level 'Informational' Sense Key: aborted command Vendor 'Gen-ATA' error code: 0x3 следует отключить поддержку DMA. Подробности можно почерпнуть из лекции 4, раздел "Отсутствие поддержки DMA". Затем установку системы можно начать снова. После копирования mini-root система перезагрузится и потребуется вставить диск Solaris Software 1, а затем - Solaris Software 2. Не забуцьте при перезагрузке вынуть компакт-диск, уже использованный программой установки. После перезагрузки запускается syslogd и начинается выполнение программы webstart (вначале в командной строке, затем в графическом режиме). Графический режим включится только в случае корректных настроек видеоадаптера, выполненных с помощью kdmconf ig.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Потребуется выбрать часовой пояс (time zone), имя компьютера (hostname), пароль пользователя root. Затем следует выбрать тип установки: default или custom install. Для установки корректной локализации (например, русификации) Solaris это - ключевой момент. Надлежит выбрать custom install, т.к. по умолчанию устанавливается только поддержка английского языка (English locale). При выборе русской локализации, отличной от RU.UTF-8 (поддержка кириллической страницы unicode), будет невозможно переключаться между языками при вводе текста в системе с помощью нажатия комбинации клавиш. Будет доступно переключение только с помощью мыши в специальном окне, ассоциированном с приложением. Такое "подокно" появится только в системных приложениях. Например, его не будет для приложения OpenOffice 1.1, которое вы, возможно, захотите установить дополнительно после установки системы. Подробнее о работе с русским языком в Solaris 9 говорится в лекции 4. После выбора типа установки осуществляется выбор набора программ (software group). О том, как это сделать, речь шла выше в разделе 'Выбор набора программ". Наконец, система потребует подтвердить, что вы уверены в правильности выбранного деления дисков на разделы, после чего начнется установка указанного набора программ. Длительность этой процедуры зависит от выбранного набора программ, скорости процессора и (в наибольшей степени) от скорости привода CD-ROM. После завершения установки производится перезагрузка, и свежеустановленная система загружается в многопользовательском режиме. Упражнения Выполните установку Solaris 9 с использованием загрузочного CDROM Solaris Installation CD и Solaris 9 Software CD 1 of 2 и Solaris 9 Software CD 2 of 2. При необходимости воспользуйтесь материалом лекции 4 для борьбы со сбоями при установке системы.
Профиль - это термин, который закрепился в языке как калька с английского profile и почти всегда обозначает некий набор настроек (прим. авт.).
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Установка ОС Solaris и управление пользователями Лекция описывает особенности установки системы на различные аппаратные платформы и содержит сведения о том, какие основные проблемы могут встретиться при установке Solaris на платформу х86, а также рассказывает о том, как управлять учетными записями пользователей. В ней рассмотрены ограничения, которые накладывает система на длину и содержание имен пользователей и групп, а также на их пароли. Кроме этого, в лекции рассмотрены форматы файлов /etc/passwd, /etc/group и /etc/shadow. Отличия установки Solaris на компьютеры SPARC Система устанавливается на компьютеры различной архитектуры сходным образом, но при этом следует помнить о некоторых различиях. Во-первых, для каждой архитектуры используется свой дистрибутив (количество компакт-дисков в дистрибутиве одинаково для обеих архитектур). Во-вторых, для установки на платформе Intel недоступен способ Factory JumpStart. В-третьих, установка на системы SPARC начинается со взаимодействия с firmware - встроенным в ПЗУ программным обеспечением компьютера, которое производит загрузку установочной программы с компакт-диска, ленты, через сеть с NFS-сервера и т.п. Для установки Solaris на компьютер архитектуры х86 проще всего использовать загрузочный компакт-диск из дистрибутива. В-четвертых, на компьютеры SPARC устанавливается 64-битная версия Solaris, которая не может работать с 32-битной архитектурой х86. Solaris 9 специально создана для компьютеров SPARC, поэтому возможных проблем при установке на эти компьютеры неизмеримо меньше. Например, практически исключена несовместимость оборудования и ПО. Именно поэтому далее речь будет идти о трудностях, которые можно встретить при установке Solaris 9 на компьютеры х86.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Трудности при установке Solaris 9 на компьютеры х86 Отсутствие поддержки DMA В процессе копирования mini-root на жесткий диск может появиться ошибка, информация о которой выглядит так: вначале несколько раз повторяется сообщение^ Warning: /pci@0,0/pci-ide@7,l/ide@0 (ataO) timeout: abort request, target=O lun=0 а затем копирование прекращается с сообщением об ошибке: Warning: /pci@0,0/pci-ide@7,l/cmdk@0,0 (Disk 0) Error for command 'read sector'. Error level 'Informational' Sense Key: aborted command Vendor 'Gen-ATA' error code: 0x3 Это говорит о том, что система не смогла корректно работать с АТА DMA (Direct Memory Access) в вашем компьютере и поддержку АТА DMA в Solaris (а не в BIOS!) следует отключить. Для этого надо: 1. Запустить установку заново. 2. После того как DCA определит, какие устройства есть в системе и загрузит соответствующие драйверы, появится экран с вопросом о том, какой диск является загрузочным (в заголовке экрана будет написано Boot Solaris). Выбрать Boot Tasks (нажав F4). 3. Появится экран Boot Tasks, там следует выбрать View/Edit Property Settings. 4. Найти в появившемся списке свойств ata-dma-enabled. 5. Присвоить этому параметру значение 0. 6. Выбрать возврат к предыдущему экрану (Back), нажав F2. 7. Возвратиться к экрану Boot Solaris, нажав F3. 8. Продолжить установку системы, как было показано ранее. Надо отметить, что в Solaris 8 х86 поддержка АТА DMA по умолчанию была выключена. В Solaris 9 умолчание изменили: теперь поддержка
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 АГА. DMA включена по умолчанию. Есть данные, говорящие о том, что Solaris 8 х86 при установленном в DCA параметре ata-dma-enabled=l корректно работал с приводами ATAPI CDROM/DVD-ROM, в отличие от Solaris 9 х86, который не использует DMA для этих устройств. Невозможность работы в графическом режиме Если параметрам видеосистемы присвоить значения, которые не соответствуют аппаратной конфигурации компьютера (неверный тип видеокарты, неподдерживаемые разрешение или частота кадровой развертки монитора), то при попытке работы в графическом режиме (например, при переходе к графической части установки способом Web Start) программа установки зависнет. Попробуйте нажать Ctrl-C, возможно, программа kdmconfig будет аварийно завершена и установку можно будет продолжить. Если это не помогло, придется устанавливать систему заново с указанием правильных параметров видеоадаптера и монитора программе kdmconfig. В случае, если Solaris не поддерживает установленное у вас в компьютере видеооборудование (например, очень старая или весьма оригинальная видеокарта), то следует либо выбрать минимальный вариант видеоадаптера (VGA, 16 цветов, 60 Гц развертка), либо отказаться от работы в графическом режиме и вообще не запускать графическую среду Solaris. В последнем случае возможным выходом явится установка системы с помощью программы suninstall. Неожиданное прерывание установки Если установка системы прервалась на этапе копирования файлов, когда разделы диска уже определены, можно запустить ее заново командой /sbin/cdO_install. Часть настроек придется повторить. Это возможно только в том случае, если в результате прерывания установки вы видите стандартное приглашение к вводу команд в командной
Торчинский Ф.И., Ильин Е.С. строке, вот такое: # Невозможность войти под именем root С именем root запрещено входить в систему интерактивно через сеть или подсоединяться к ней по протоколу ftp. Однако если пароль root забыт или неизвестен, следует обнулить этот пароль так, чтобы он стал пустым. Методика этого процесса описана в лекции 1. Помните, что для этого требуется физический доступ к компьютеру под управлением Solaris, удаленно сбросить пароль root невозможно. Поэтому не следует бояться, что злонамеренные хакеры воспользуются описанным способом без вашего ведома. С другой стороны, следует ограничить доступ к компьютеру посторонних людей! Не распознается сетевая карта Еще на начальном этапе установки DCA (вы, конечно, помните, DCA -это Device Configuration Assistant, программа, которая определяет, что за оборудование установлено в компьютер, и помогает обнаружить новые устройства) легко определил вашу сетевую карту и вы до самого конца установки пребывали в уверенности, что Solaris ее поддерживает. Не тут-то было! Никакой сетевой карты после установки Solaris не видит, и все настройки сети отправились коту под хвост! Что можно сделать в этом случае? Возможно, следует поменять сетевую карту. Однако для NE2000-совместимых карт можно попробовать менее сложный способ. Правда, покажется ли он вам менее сложным к концу следующей страницы? В Solaris для драйвера каждого устройства существует конфигурационный файл, в котором указано, какие адреса портов и прерывания использует соответствующее устройство. Конфигурационный файл может содержать одни комментарии, тогда драйвер будет использовать значения по умолчанию. Однако файл конфигурации должен присутствовать в любом случае. Файлы
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 конфигурации расположены в файлах /kernel/drv/*.conf и /platform/i86pc/kemel/drv/*.conf. Мы уже предположили, что у нас есть сетевой адаптер, совместимый с NE2000. Обычно эти адаптеры имеют диапазон адресов портов от 0x240 до 0x360. Но Solaris по умолчанию не ищет адаптер с адресом больше 0x300, так как NE2000 может конфликтовать с другими устройствами. Стало быть, для того чтобы Solaris мог работать с адаптером NE2000 на 0x320, следует изменить файл конфигурации, предварительно удостоверившись в том, что аппаратных конфликтов при этом не будет. В Solaris файл устройства и драйвер для семейства адаптеров, совместимых с NE2000, принято называть пег В некоторых системах этот драйвер просто выключен по умолчанию. Для изменения параметров, используемых драйвером, в нашем случае понадобится изменить файл /kernel/drv/neiconf. Возможно, вместо этого придется менять файл /platform/i86pc/kemel/drv/neiconf, в зависимости от системы. Иногда файлы *.conf с одинаковыми именами есть в обоих каталогах - тогда, как показывает практика, лучше использовать каталог /platform/i86pc/kemel/drv/. Для платформы, отличной от х86, следует выбрать каталог, соответствующий платформе. В файле *.conf должно быть нечто вроде: name="nei" parent="isa" reg=0xl,0x320,Oxlf interrupts=ll; Здесь name = "nei" обозначает символическое имя, которое будет иметь файл устройства в каталоге /dev. Параметр parent="isa" означает тип шины. Здесь тип ISA включает и шину PCI, что может поначалу ввести в заблуждение. Для Solaris этот параметр равен либо sysbus (это системная шина SPARC), либо isa, что означает любую шину, кроме SPARC sysbus. Флаг "0x1 " означает, что далее идет определение диапазона I/O портов, а не смещения в памяти; 0x320 показывает начальный I/O адрес в шестнадцатеричном виде; Oxlf есть размер диапазона портов ввода-вывода от начального адреса; " interrupts = l 1 "показывает IRQ 11 в десятичном виде. При выполнении подобной операции с файлом конфигурации драйвера
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 другого устройства попробуйте команды grep conf /kernel/drv/*.conf и grep conf platform/'uname -m'/kemel/drv/*.conf чтобы выяснить, как называется нужный файл. Выключите компьютер и (если требуется) измените адрес перемычками на сетевом адаптере. После перезагрузки система должна увидеть карту. Для карт "plug and play" следует отключить функцию самонастройки и установить конкретные номер порта и IRQ. При добавлении ранее неизвестного системе сетевого адаптера необходимо также создать файл /etc/hostname.neiO и указать в нем IP-адреса. Это требуется для того, чтобы система увидела не только новое устройство, но и распознала в нем новый сетевой интерфейс. Также добавьте в /etc/hosts строчку, сопоставляющую имя данному интерфейсу, например: 10.1.1.1 rnycomputer.doinain.com В этом примере предполагается, что файл /etc/hostname.neiO содержит адрес 10.1.1.1. Для того чтобы в каталогах /devices и /dev гарантированно были нужные файлы нового устройства, дайте команду devfsadm (для Solaris 8 и более ранних версий - drvconf ig ): devfsadm или /usr/sbin/drvconfig -i nei Эта команда выполняется автоматически при добавлении нового устройства с помощью команды add_drv во время следующей перезагрузки системы. Подробнее о добавлении устройств говорится в лекции 12.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Далее наберите touch /reconfigure; reboot (это можно делать только как root). После перезагрузки, чтобы быть уверенным, что адаптер опознан, дайте команду ifconfig neiO plumb Строка neiO должна появиться в выводе программы prtconf. Русификация Solaris Solaris 9 имеет встроенную поддержку русского языка во всех кодировках, включая кодировку Unicode (UTF-8). Поэтому все поставляющиеся с системой программы корректно работают с русским языком. Для корректной работы клавиатурного переключателя языков и программы Netscape Navigator следует при установке системы выбирать вариант локализации RU.UTF-8. Как и в других системах UNIX, поддержка русского языка в программах, которые вы скачали из Сети в исходных текстах или двоичном виде и установили в систему, зависит только от разработчика этих программ. Гарантировать корректность такой поддержки нельзя. Использовать русскоязычные имена файлов в системе можно, но из соображений совместимости с другими системами этого лучше не делать. При установленной локализации RU.UTF-8 (Unicode) переключение с английского алфавита на русский при вводе текста осуществляется нажатием клавиш Compose+c, с. Клавиша Compose на стандартной 104-клавишной клавиатуре находится между клавишей "Win" и правой клавишей "Control". Нажатие Compose+c, с означает, что сначала вы нажимаете одновременно клавиши "Compose" и "с", а затем, отпустив их, однократно нажимаете клавишу "с". Для обратного переключения языка ввода на английский следует нажать Ctrl-пробел. Сброс конфигурации системы
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Бывают ситуации, когда вы уже окончательно запутались в настройке системы и готовы начать все заново, лишь бы она заработала. Для сброса настроек служит команда sys-unconfig Сбрасываемая информация о настройках включает в себя имя хоста, имя домена NIS, часовой пояс, IP-адреса интерфейсов, маску сети и пароль root. То, что делает sys-unconfig, является операцией, обратной по отношению ктому что выполняют программы sysidnet, sysidns и sysidsys. Более детальная информация об этих программах находится на соответствующих страницах руководства по sysidtool. Программа sys-unconfig: • записывает /etc/inet/hosts в /etc/inet/hosts.saved; • если /etc/vfstab содержит файловые системы, монтируемые по NFS, копирует /etc/vfstab в /etc/vfstab.orig; • восстанавливает в первоначальное состояние /etc/inet/hosts (как было сразу после установки системы ); • удаляет имя хоста из файлов /etc/hostname.interface для всех настроенных к этому моменту интерфейсов (тех, что показывает команда ifconfig -а ), за исключением файла локального интерфейса петли (1о0); • удаляет имя домена из /etc/defaultdomain; • устанавливает часовой пояс в значение PST8PDT в /etc/TIMEZO NE; • отменяет работу NIS и NIS+, если они были настроены; • удаляет упоминания данного хоста в /etc/net/*/hosts; • удаляет файл /etc/inet/netmasks; • удаляет файл /etc/defaultrouter; • удаляет пароль root из /etc/shadow ; • удаляет файл /etc/.rootkey; • запускает все программы конфигурации системы (см. man sysidconf ig ) с ключом -и ; • удаляет файл /etc/resolv.conf; • удаляет файлы, относящиеся к LDAP, отменяя работу LDAP:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 /var/ldap/ldap_client_cadie, /var/ldap/ldap_client_file, /var/ldap/ldapclient—cred, /var/ldap/cacheirigr.log. По окончании работы sys-unconfig выполняет остановку системы. После перезагрузки потребуется настроить систему заново. Зачем распределять пользователей по группам? Как уже говорилось в лекции 1, в Solaris есть ряд предопределенных групп. Большинство из них созданы для запуска системных процессов от имени этих групп. Но одна из групп - staff - предназначена для того, чтобы ее членами были все обычные пользователи, которым разрешена интерактивная работа с системой Solaris. Некоторые приложения (например, sendmail или СУБД Oracle) требуют создания специфических групп с определенными именами. При необходимости вы можете создать новую группу и назначить ее в качестве главной или дополнительной группы тем пользователям, которым следует делегировать одинаковые права. Группа staff часто является главной группой большинства пользователей. При добавлении пользователя с помощью команды user add пользователь попадает в группу other, если явно не указано иное. Эта группа имеет идентификатор 1. При необходимости изменения учетной записи пользователя следует воспользоваться программами управления этими записями. Они описаны в разделе "Программы управления учетными записями пользователей" этой лекции. При распределении пользователей по группам уцобно назначить им в качестве главной группы такую, которая бы соответствовала их основной роли в системе. Например, те пользователи, чья работа с системой будет ограничена получением почты из почтовых ящиков, должны быть отнесены к группе рорЗ или imap4. ЭДобно дать таким группам имена, по которым вы сразу можете вспомнить, ради чего эта
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 учетная запись вообще появилась в системе. Представьте: после четвертой чашки кофе ваш взгляд упирается в файл /etc/passwd и в мозгу начинает неотвязно биться мысль: нет ли в системе лишних пользователей? Может быть, завалялись какие-нибудь устаревшие учетные записи и их можно вычистить? Открыв /etc/passwd, вы видите несколько сотен пользователей, полтора года назад отнесенных к группе рорЗ. Ага, догадываетесь вы, эти забирают почту с нашего сервера. А вот эти, из группы oldlamer, что тут делают? После того как пользователям назначена главная группа, каждый из них может быть добавлен в другие группы. Все группы, кроме главной, в которых участвует пользователь, называются дополнительными для этого пользователя. Для добавления пользователя в дополнительные группы следует использовать программы управления учетными записями. Эти программы изменят файл /etc/group, так как именно этот файл хранит информацию о дополнительных группах пользователей. С другой стороны, вы можете вручную исправить запись о группе в /etc/group, указав в ее последнем поле через запятую тех пользователей, которых собираетесь добавить в эту группу. Концепция безопасности UNIX Вся система безопасности UNIX изначально строилась на трех китах: разделение всех пользователей по отношению к объекту на владельца объекта, группу объекта и всех остальных; назначение им прав доступа по отдельности; обязательное наличие у каждого объекта владельца и группы. В современных системах UNIX для большей гибкости при настройке прав доступа введены дополнительные свойства объектов, такие как флаги для файлов и каталогов, списки управления доступом (ACL) для файлов и каталогов, аутентификация и авторизация с использованием различных служб аутентификации, подобных TACACS и RADIUS, а также модули аутентификации и авторизации (Pluggable Audientication Modules - РАМ). В этой книге TACACS и RADIUS не рассматриваются, а технология и настройки РАМ обсуждаются в лекции 10 курса "Администрирование ОС Solaris".
Естественно, надежность усовершенствованной системы безопасности снизилась, а сложность администрирования выросла, как и при любом другом усложнении любой системы. Так что остается признать: чем больше возможностей по настраиванию системы предоставляется, тем внимательнее надо быть администратору. Тем не менее для начала познакомимся с классической концепцией безопасности, так как все остальные дополнения представляют собой лишь надстройку над ней. Объект Объектом в контексте разговора о безопасности мы называем файл, каталог или процесс. Файл и каталог записаны на некий носитель, их свойства хранятся на том же носителе. Процесс запущен в памяти системы, его свойства возникают при запуске процесса, существуют вместе с ним, пока он работает, и исчезают, как только процесс завершается. Вообще говоря, одну и ту же программу можно запустить с совершенно разными свойствами. Разделение всех пользователей по отношению к объекту У каждого объекта есть владелец. Им может быть только один из пользователей данной системы UNIX. Появление объектов, которыми владеют пользователи, не зарегистрированные в данной системе, - это ошибка системного администратора. Такое может произойти при разархивировании файла, созданного в другой системе. Если вместе с файлом была сохранена информация о его владельце, то легко может оказаться, что в другой системе есть пользователь с таким идентификатором (UID), а в нашей - нет. Обратите внимание: для системы важны не имена пользователей, а их идентификаторы. Допустим, что в чужой системе есть пользователь ivan с UID, равным 1000, а в нашей ivan имеет UID, равный 2001. Тогда при переносе файла с чужой системы к нам с сохранением информации о
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 владельце файла, в нашей системе появится "бесхозный" файл, если у нас нет пользователя с UID 1000, или принадлежащий тому пользователю, чей это UID, если такой найдется. Право владения объектом в UNIX передается по наследству от процесса к процессу, а при создании файла или каталога его владельцем становится тот пользователь, от чьего имени запущен процесс, создавший файл или каталог. Однако в ряде случаев запускаемый процесс будет принадлежать не тому кто запустил процесс-родитель, а иному пользователю. Например, при входе в систему пользователь сообщает имя и пароль программе login. Она работает от имени root (т.е. ее владельцем является пользователь root). Но программа login запускает для пользователя командный интерпретатор так, чтобы владельцем процесса командного интерпретатора был сам входящий в систему пользователь. Любой объект имеет не только владельца, но и группу. Иногда владельца называют "хозяином", а группу - " группой владельца", "групповым владельцем", "групповым хозяином" и т.п. Смысл этого понятия в том, что каждому объекту в UNIX сопоставляется не только UID (User IDentificator), который идентифицирует владельца объекта, но и GID (Group IDentificator), который идентифицирует группу пользователей, имеющую особые права на объект. Таким образом реализуется разделение всех пользователей по отношению к объекту на владельца объекта, группу, имеющую особые права на объект, и всех остальных. Группу, обладающую особыми правами на объект, мы буцем называть группой объекта. Соответственно, мы буцем говорить о группе файла, группе каталога или группе процесса. При этом надо помнить, что группа файла - это не группа, в которую входит файл или его владелец. В общем случае это произвольная группа, объединяющая произвольных пользователей и имеющая особые права на этот объект. Назначение прав доступа поотдельности Владельцу файла, группе файла и всем остальным пользователям могут
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 быть поотдельности назначены разные права доступа к файлу. То же справедливо и в отношении каталога. Так реализуется назначение прав доступа к объекту в отдельности его владельцу группе и "всем остальным". Последних в документации и профессиональных разговорах иногда называют world ("мир"), имея в виду "вообще всех остальных пользователей этого компьютера". Этот термин происходит из далеких времен, когда компьютеров было мало, а пользователей у одного компьютера - очень много, и администратор мог гордо говорить о них -"мой мир". Каждый объект имеет владельца и группу Любой файл, каталог или процесс имеет владельца и группу. Это означает, что файлу каталогу и процессу обязательно сопоставлены два идентификатора, которые называются UID (User ID) и GID (Group ID) соответственно. Администрировать систему легче, если все объекты имеют UID и GID из числа представленных в /etc/passwd и /etc/group соответственно. 'Бесхозные" объекты вносят сумятицу в стройные ряды прав доступа и делают права доступа к ним владельца и группы бессмысленными - ведь никто из пользователей не может получить "чужое" право доступа. Структура файлов /etc/passwd, /etc/shadow, /etc/group Файлы /etc/passwd и /etc/group в Solaris имеют такой же формат, как и в других системах UNIX, а файл /etc/shadow одинаков для всех систем ветви System V. Рассмотрим примеры файлов (для этого потребуется воспользоваться командой cat или командой more ): Учетные записи пользователей cat /etc/passwd rootx:0 :1 :Super-User:/:/sbin/sh daemonx:l:l:y:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 binx:2:2 ::/usr/bin: sysx:3:3::/: admx:4:4:Adminyvar/adnT lpx:71:8:Line Printer Adminz/usr/spool/lp: uncp x:5:5 :uucp Admin:/usr/lib/uucp: smmsp:x:25:25:SendMail Message Submission Program^: listenx:37:4:Network Admin:/usr/net/nls: nobodyx:60001:60001 :N obody/: noaccessoc60002:60002:No Access User:/: nobody4:x:65534:65534:SunOS 4.x Nobody:/: colx:100:1 ::/home/col:/bin/sh temp x:l 01:1 :Aome/temp ybin/sh qazx:102:1 ::/home/qaz:/bin/sh Termos x:103:1 ::/home/Termos :/usr/bin/bash Файл состоит из записей, каждая из которых описывает одного пользователя и занимает одну строку. Поля записей разделяются двоеточиями. Первое поле - имя пользователя в системе. Это имя пользователь вводит для входа в систему Имя в Solaris должно иметь длину от 2 до 8 символов и содержать только латинские буквы и цифры. Имя пользователя в Solaris может содержать прописные латинские буквы, однако из соображений совместимости с другими системами UNIX рекомендуется использовать только строчные (маленькие) буквы. Второе поле - признак наличия пароля. Пустое поле означает отсутствие пароля. Для фактического отсутствия пароля у пользователя необходимо, кроме того, чтобы второе поле в файле /etc/shadow в описании этого пользователя имело значение NP. Третье поле - идентификатор пользователя, UID. Четвертое поле - идентификатор главной группы пользователя, GID. Пятое поле (иногда его называют GECOS) - описание пользователя. Обычно оно содержит полное имя пользователя (имя и фамилию) и координаты для связи с ним - номер офиса, адрес, телефон или пейджер.
Шестое поле - домашний каталог пользователя. При интерактивном входе в систему пользователь сразу попадает именно в этот каталог. Кроме того, некоторые сетевые службы (например, ftpd) требуют, чтобы у каждого пользователя, пытающегося получить доступ к сетевой службе, был "честный", т.е. на самом деле существующий и доступный для пользователя домашний каталог. Седьмое поле - командный процессор, который будет запущен для пользователя при интерактивном входе в систему Некоторые сетевые службы (например, ftpd) требуют, чтобы у каждого пользователя, пытающегося получить доступ к сетевой службе, был существующий в системе на самом деле командный процессор. Файл /etc/shells описывает доступные в системе командные процессоры, которые следует назначать пользователям. Сразу после установки системы файл /etc/shells не образуется. Системный администратор должен создать его вручную, если он требуется для каких-то программ в системе, например, для ftpd. Относительно содержания поля GECOS следует сделать несколько замечаний. Поле GECOS часто называют полем комментария, и это верно: в нем следует записывать контактную информацию о пользователе. Системному администратору ничего не скажет строка в файле протокола, свидетельствующая о проблеме, вызванной работой пользователя ikonst34. Кто это? Иван Константинович из планового отдела или Илья Константинов из технического? Или это Иконников Станислав из филиала 34? Чтобы не мучаться ассоциациями, навеянными именем пользователя, а точно знать, кто скрывается за лаконичным username, следует заполнять поле комментария. Каждый элемент этого поля (например, полное имя, номер комнаты в офисе, контактный телефон) принято отделять от других запятой, но это необязательное требование. В настоящее время, к сожалению, не существует строго определенного правила заполнения поля комментария. Хорошим стилем является указание в этом поле следующей информации: • полные фамилия, имя и (если это необходимо для однозначной идентификации) отчество пользователя или, если это учетная
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 запись предопределенного псевдопользователя типа bin, полное название приложения, использующего эту запись; • номер комнаты и ее местоположение, или контактное лицо, ответственное за запуск приложения, использующего запись; • рабочий телефон; • другая контактная информация (пейджер, факс, мобильный телефон и т.п.). Не всегда требуется указывать всю эту информацию. На деле достаточно указать ровно столько сведений, сколько достаточно системному администратору для однозначной идентификации владельца учетной записи. Только имейте в виду - не одному-единственному конкретному системному администратору а любому администратору которому придется управлять созданной вами системой. Ведь нынешний системный администратор может уволиться или уехать в отпуск. Сможет ли его преемник или заместитель быстро разобраться в записях /etc/passwd? Делайте записи в поле комментария полезными сведениями, а не отписками. Например, файл /etc/passwd может содержать такие записи: root:*:0:0:Root - Michael Kruglov, room 601, 89119119 111 :/root:/bin/basli ftp:*:23:l:FTP Admin, Andrei Nezvanyi, 9733333yiiome/ftp Vbin/bash apache:*:404:40:Web Master, Elena О satanenko, 1001010 yusr/local/httpdVbin/sh Каждая запись в файле /etc/passwd размещается на одной строке, здесь они перенесены из-за ограниченного размера страницы книги. Последнее, что следует сказать о поле GECOS, это почему оно так называется. В свое время компания General Electric владела компьютером, операционной системой которого была GECOS (General Electric Comprehensive Operating System). Компьютеры под управлением UNIX использовались для подготовки задач для этого компьютера. Изначально в поле комментария хранилась информация для запуска командных
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 файлов и пакетных задач, которые были предназначены для системы GECOS: cat /etc/shadow root::6445:::::: daemon:N P :6445:::::: bin:NP:6445:::::: sys:NP:6445:::::: adnrNP:6445:::::: lp:NP:6445:::::: uucpJMP:6445:::::: nuucp:NP:6445:::::: sminsp :NP :6445:::::: listen:*LK *::::::: nobody:NP:6445:::::: noaccess :NP:6445:::::: nobody4JMP:6445:::::: cot9Nv£ZSaIQgcQk:12435:::::: temp :*LK qaz:v.srD227fHRx2:12448:::::: Tennos:o3HzHXFopdwbU::::::: Этот файл тоже описывает пользователей. В нем хранятся зашифрованные пароли пользователей. Формат файла таков: Первое поле - имя пользователя. Второе поле - зашифрованный пароль, *LK* означает, что учетная запись заблокирована (locked), a NP - что пароль отсутствует (по password). Третье поле - число дней между 1 января 1970 года и датой последнего изменения пароля. Четвертое поле - минимальное количество дней, которое должно пройти от одной смены пароля до другой. Пятое поле - максимальное количество дней, в течение которого пароль считается действительным; по истечении этого срока система попросит ввести новый пароль, так как старый утратит силу
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Шестое поле - количество дней, за которое система предупредит пользователя о необходимости смены пароля. Седьмое поле - количество дней, которое пользователь может не работать в системе и считаться активным; по истечении этого срока учетная запись автоматически блокируется. Восьмое поле - дата, до которой учетная запись считается действительной; после этой даты пользователь не сможет войти в систему Девятое поле зарезервировано и сейчас не используется. Данный формат /etc/shadow характерен как для Solaris, так и для других относящихся к System V систем UNIX, например, для Linux. В /etc/shadow обязательно наличие только первых трех полей в каждой записи, остальные могут отсутствовать - все или часть из них. Рекомендуется вносить исправления в /etc/shadow не вручную, а с помощью программ admintool, usermod, useradd, passwd. Однако, в одном случае - когда забыт пароль root - придется исправлять /etc/shadow в текстовом редакторе. Пользовательские файлы конфигурации У каждого пользователя в домашнем каталоге есть несколько файлов конфигурации. Обычно присутствуют файлы конфигурации командного процессора. Если в системе используется несколько командных процессоров, имеет смысл сделать файлы конфигурации для каждого из них (о файлах конфигурации командных процессоров см. лекцию 10). Кроме того, могут быть файлы конфигурации графической среды (.Xsession и другие), файлы конфигурации почтовой системы (.elm, .forward и другие), файлы с историей команд (.history, .bash_history) и прочие. Их объединяет то, что их имена практически всегда начинаются с символа " ." (точка). Можно увидеть их в списке файлов каталога, если дать команду 1s -а
Пользовательские файлы конфигураций создаются заранее системным администратором. Стандартные пользовательские файлы конфигураций по умолчанию поставляются вместе с операционной системой и в Solaris располагаются в /etc/skel (от слова skeleton - скелет, т.е. основа). При добавлении в систему нового пользователя они автоматически копируются из каталога /etc/skel в домашний каталог нового пользователя. При добавлении нового пользователя или модификации существующей учетной записи можно указать другой каталог с файлами конфигурации, чтобы копировать не файлы по умолчанию, а другие файлы. Их предварительно следует создать и модифицировать в соответствии с настройками, которые требуется установить для новых пользователей. Если изменить файлы в каталоге /etc/skel, то измененные файлы буцут копироваться в домашние каталоги только тех пользователей, которые буцут добавлены после модификации этих файлов. Если новые версии файлов конфигурации надо разложить по каталогам всех пользователей, это надо сделать явным образом, с помощью скрипта или вручную. Мы будем далее называть /etc/skel каталогом базовых пользовательских файлов конфигурации. После того как пользователь войдет в систему он может изменить настройки, сделанные для него в файлах конфигурации в своем каталоге, или добавить новые, если системный администратор не запретил ему запись в файлы конфигурации. Группы пользователей Все группы, определенные в системе, перечислены в файле /etc/group. cat /etc/group root::0Toot other ::1: bin::2 Toot,bin,daemon sys ::3 :root,bin, sys, adm adm::4:root,adm, daemon uucp ::5 Toot,uucp mail::6:root tty::7:root,adm
Торчинский Ф.И., Ильин Е.С. lp::8Toot,lp,adm nuucp ::9 Toot, nuucp staff::! О: daemon::12:root,daemon sysadmin::14: smmsp ::2 5 :smmsp nobody::60001: noaccess "60002: nogroup "65534: Первое поле - имя группы. Второе поле - зашифрованный пароль; это устаревшее поле, в настоящее время нет команды, которая бы позволила установить пароль на группу, и обычно нет необходимости это делать. Если все же такая необходимость появится, то можно установить требуемый пароль какому-нибудь пользователю с помощью программы passwd, а затем копировать поле пароля из /etc/shadow в /etc/group. Пароль группы используется в Solaris только программой newgrp. Эта программа требуется для изменения эффективного группового идентификатора пользователя в ходе его интерактивной работы. Если группа, которой соответствует новый групповой идентификатор, имеет пароль, то программа newgrp его запросит. Третье поле - идентификатор группы (GID). Этот идентификатор должен быть уникальным в пределах системы, а в случае использования общих файлов групп и паролей - в пределах всей сети организации. Номера от 0 до 99 и от 60001 до 60002 зарезервированы для системных групп. Создавайте свои группы с идентификаторами от 100 до 60000 включительно. Четвертое поле - список пользователей через запятую; для этих пользователей данная группа будет являться дополнительной. В Solaris принято по умолчанию, что один пользователь может принадлежать не более чем к 15 дополнительным группам. Программы управления учетными записями пользователей
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Для управления учетными записями можно использовать программу admintool при работе в графическом режиме или программы useradd, usermod, userdel, groupadd, groupmod, groupdel в текстовом режиме или в окне терминала. admintool Программа admintool является устаревшей, и в системах Solaris 9 и в более поздних, начиная с мая 2002 года, ее может просто не быть. Вместо нее рекомендуется использовать Solaris Management Console (SMC). Однако, в доступных нам версиях Solaris программа admintool вполне способна работать и может оказаться уцобной, поэтому здесь мы коротко рассмотрим ее функции. Подробнее программа Solaris Management Console рассматривается в лекции 16 курса "Администрирование ОС Solaris". Программа admintool предназначена для управления пользователями, группами, принтерами, последовательными портами (serial ports), для назначения имени и IP-адреса компьютера (фактически - редактирования файла /etc/hosts) и управления ПО. Последняя функция в admintool в Solaris 9 х86 не всегда поддерживается, но поддерживалась в версиях до Solaris 8 включительно. Для управления пакетами ПО следует использовать программу prodreg (запускается в графическом режиме), которая служит полноценным интерфейсом для установки и удаления пакетов программ, управляя Solaris Product Registry - базой данных об установленных продуктах. Для запуска программы следует набрать admintool & в окне терминала при работе в графической среде. В текстовой среде admintool не работает. Тип объектов, которыми вы собираетесь управлять с помощью admintool, следует выбрать в пункте меню Browse (рис. 4.1): Действия, которые можно совершить с выбранным объектом, доступны через пункт меню Edit. Можно добавить или удалить объект, или
Торчинский Ф.И., Ильин Е.С. изменить его свойства. Например, можно установить любые свойства учетной записи пользователя, которые перечислены выше, при рассмотрении формата файлов /etc/passwd, /etc/shadow и /etc/group. Фактически, любая программа управления учетными записями, будь то admintool, Solaris Management Console или любая другая программа, для работы со свойствами пользователя в графическом режиме все равно вызывает простые системные программы с интерфейсом командной строки для выполнения любых операций со свойствами пользователя. В Solaris для создания новой учетной записи пользователя (добавления пользователя в систему) используется программа use г add, для модификации учетной записи пользователя - usermod, для удаления учетной записи - use г del. rile Edit Bro ига» User Наг Admin took Users Неф riaewon Сгацрв HlDStS ID Оишшнъ! Юс) ; 1 bp rostcses rnbDclj HJUDP ItcdL jtiiKiBp Printers -37 Serial Ports Strfitwcir®- rjj БЭ53И 9 102 □ NetiUDrk Rd min I_Litb PrlrfcB'r AdiriJ_n no Recess user-HctaJu ЗыпГй Hcfccdy SsndHall 'lesssee FtfonisisLc. i Program •Kip 101 d S Bloat: sola Рис. 4.1. Окно программы admintool useradd Для добавления нового пользователя следует выполнить команду useradd: При этом пользователь попадает в группу other, если явно не указано иное. Эта группа имеет идентификатор 1.
При добавлении пользователя в Solaris происходит добавление соответствующей строки в файлы /etc/passwd, /etc/shadow и /etc/user_attr. Первые два файла нам уже знакомы. Последний служит для записи дополнительных атрибутов пользователя. Он используется только в Solaris, в других системах UNIX такого файла нет. К дополнительным атрибутам относятся административные права, данные этому пользователю, перечень ролей, назначенных ему и указание на то, является ли эта учетная запись пользователя информацией о реальном пользователе или информацией о роли. Более подробно о ролях говорится в лекции 11 курса "Администрирование ОС Solaris", для получения детальной информации о /etc/user_attr - следует изучить man по user_attr. По умолчанию use г add добавляет учетную запись пользователя в файлы /etc/passwd и /etc/shadow. Кроме этого, при указании ключа -G запись о пользователе помещается в /etc/group в строку тех групп, которые указываются в качестве дополнительных для него. С помощью ключа -т можно указать, что для пользователя следует создать домашний каталог. Новые учетные записи пользователей остаются блокированными до тех пор, пока пользователю не будет назначен пароль с помощью программы pas swd. Имя пользователя или роли не может быть длиннее 8 символов и должно содержать только латинские символы, цифры, точку, знак подчеркивания и дефис. Точка является допустимым символом не для всех систем UNIX, поэтому ее не рекомендуется использовать в Solaris в целях совместимости, хотя это требование не является жестким. Первый символ имени должен быть буквой, и по крайней мере одна буква в имени должна быть буквой нижнего регистра. Следующие ключи изменяют значения свойств учетной записи пользователя, которые задаются по умолчанию в отсутствие этих ключей: • -Ь base_dir - каталог, в котором должен быть создан домашний каталог пользователя ; не требуется указывать, если используется ключ - d ;
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 • -с comment - поле GECOS общей информации о пользователе, как минимум, следует указать полное имя пользователя ; • -d dir - домашний каталог пользователя ; по умолчанию создается в каталоге /home и носит то же имя, что и пользователь (для пользователя lena создается домашний каталог /home/lena); • -D - показать значения по умолчанию для группы, системного каталога для домашних каталогов, каталога базовых пользовательских файлов конфигурации, командного процессора и ряда других свойств. Значения по умолчанию, принятые в системе, перечислены в таблице 4.1. Таблица 4.1. Значения свойств учетной записи пользователя по умолчанию Группа Other (GID =1) Каталог с домашними каталогами пользователей /home Командный процессор /bin/sh Профиль не назначается Роль не назначается • -е expire - дата истечения срока действия учетной записи; формат даты определен, как указано в man ЗС getdate ; по умолчанию не задано, после наступления этой даты пользователь не сможет войти в систему; используется для создания учетных записей временных сотрудников или гостей; • -f inactive - максимальное число дней, в течение которых пользователь может не входить в систему по истечении этого срока учетная запись блокируется; удачное решение для забывчивых системных администраторов, которые не удаляют учетные записи при увольнении сотрудника, позволяет бороться с накоплением "мертвых душ" в системе; • -g group - группа пользователя, по умолчанию - other ; подробности настройки групп по умолчанию - в man us er add ; • -k skel_dir - каталог с базовыми пользовательскими файлами конфигураций, указанный каталог должен существовать, копии всех содержащихся в нем файлов будут помещены в домашний каталог нового пользователя. По умолчанию - /etc/skel; • -m - требует создать домашний каталог нового пользователя ; если
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 каталог уже есть, у главной группы пользователя должно быть право на чтение, запись и поиск в этом каталоге ( права доступа к файлам и каталогам обсуждаются в лекции 6); • -о - разрешить пользователю иметь UID, совпадающий с UID существующего пользователя ; может применяться для дублирования учетной записи root. Это может понадобиться для того, чтобы от имени пользователя root входить в систему только в экстренных случаях, а обычно пользоваться другой учетной записью. Во FreeBSD для этого по умолчанию предоставляется учетная запись toor (root наоборот). Это может быть удобно для назначения администратору командного процессора, отличного от /bin/sh, например /usr/local/bin/bash. Назначить такой командный процессор пользователю root нельзя, т.к. его командный процессор должен работать даже тогда, когда доступна только файловая система /, a /usr даже не смонтирована; • -s shell - полное имя файла, который будет назначен пользователю в качестве командного процессора при входе в систему; файл должен существовать; • -u uid - явное указание значения UID. Ряд ключей, служащих для управления ролями, обсуждается в лекции 11 курса "Администрирование ОС Solaris". Для изменения свойств пользователя следует запускать программу usermod. Ее синтаксис предполагает явное задание изменяемого свойства, а не интерактивное взаимодействие. При запуске без ключей только с указанием имени пользователя, чью учетную запись мы намерены изменить, программа usermod выдает сообщение об ошибке и краткую подсказку по использованию: usermod ivan UX: usermod: ERROR: Invalid syntax. usage: usermod -u uid [-o] | -g group | -G group[[,group]...] | - d dir [-m] | -s shell | -c comment | - 1 new_logname | -f inactive | -e expire - A authorization [, authorization...] | - P profile [, profile ...] | - R role [, role ...] login
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Для удаления пользователя используйте userdel. Для добавления группы следует использовать groupadd, для удаления - groupdel ; для изменения учетной записи группы - groupmod. Упражнения 1. Добавьте учетную запись пользователя lover с помощью useradd. В какую группу попал пользователь lover? Изменился ли файл /etc/group? Объясните, почему 2. ЭДалите учетную запись lover с помощью admintool. 3. Добавьте пользователя hardworker в группу staff с помощью admintool. Ждалось ли добавить пользователя с таким именем? Если нет, выясните причину и, если потребуется, измените вызвавшее проблему условие. 4. Измените главную группу этого пользователя на other, но сохраните его в качестве члена группы staff. Пришлось ли внести какие-то изменения в файл /etc/group? 5. Изучите содержимое файла /etc/shadow. Установите новый пароль какому-нибудь пользователю. Изменилось ли содержимое /etc/shadow? А файла /etc/passwd? Ц Конкретный номер после знака @ может быть иным, он зависит от того, на какой из установленных в компьютере жестких дисков ATAPI (IDE) происходит копирование.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Файловая система: идеология и структура Лекция посвящена файловой системе Solaris. В ней рассказывается как о классических принципах файловых систем UNIX, воплощенных в Solaris, так и о более новых расширениях, таких как списки управления доступом. Рассматриваются все управляющие структуры файловых систем, рассказывается о создании и монтировании файловых систем. Файлы устройств Solaris Каждому физическому устройству в Solaris обязательно соответствует файл устройства. Файл устройства по сути - это указатель на область кода ядра, в которой находится драйвер устройства. Файлы устройств располагаются в каталоге /dev и его подкаталогах. Такое расположение является стандартным для всех систем UNIX. Однако на самом деле в Solaris все файлы в каталоге /dev являются символическими ссылками на "настоящие" файлы устройств, которые располагаются в подкаталогах каталога /devices. Там эти файлы сгруппированы по отношению к своему месту в конфигурации компьютера. Подробнее это рассматривается ниже в разделе "Каталог /devices". О символических ссылках говорится также в лекции 5 раздела "Ссылки". Файлы устройств имеют специальные типы: файл символьного устройства и файл блочного устройства. Вывод программы 1 s иллюстрирует это: Is -1/devices/pseudo/ crw-rw-rw- 1 root sys 26, crw-rw-rw- 1 root sys 26, crw-rw-rw- 1 root sys 26, crw-rw-rw- 1 root sys 26, 0 Map 17 10:56 ptsl@01typ0 1 Map 17 10:56 ptsl@01typl 2 Map 17 10:56 ptsl@01typ2 3 Map 17 10:56 ptsl@01typ3 Is -1 /devices/pci@0,0/pci-ide@7,l/ide@0 brw-r---1 root sys 102, 0 Map 17 10:56 cmdk@0,0:a crw-r---1 root sys 102, 0 Map 17 10:56 cmdk@0,0:a,raw brw-r---1 root sys 102, 1 Map 24 21:19 cmdk@0,0:b
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 crw-r---1 rootsys 102, 1 Map 17 10:56 cmdk@0,0:b,raw Файл устройства является псевдофайлом, он не размещен на диске, о нем есть только запись, которая используется при доступе к устройству. Первое число, которое стоит в поле длины файла в выводе программы 1s для файлов устройств, - это major-номер, а второе, после запятой -minor-номер. Первый из них означает номер типа устройств и одновременно - позицию в ядре, в которой следует искать драйвер устройства. Второй - номер экземпляра устройства данного типа. Поэтому файлы однотипных устройств в вышеприведенном выводе 1 s имеют одинаковые major-номера. Устройство каждого типа имеет свой major-номер. Major-номера назначаются автоматически программой add_drv. Соответствие имени драйвера и major-номера определяется в файле /etc/name_to_major. В Solaris каждое устройство имеет три разных имени: логическое имя, физическое имя и экземплярное имя. Логические имена - это имена файлов устройств, которые хранятся в /dev. Физические имена - это имена файлов устройств, хранящихся в /devices. Экземплярные имена - это укороченные физические имена устройств, которые ядро назначает устройствам. Ниже рассмотрен пример назначения всех перечисленных типов имен. Файлы разделов дисков в Solaris Мы предполагаем, что читатель знаком с физическим устройством жестких дисков, поэтому здесь не объясняются термины "головка", "дорожка", "цилиндр", "сектор" и другие. Все они являются общими для описания любых жестких дисков в любых компьютерах, независимо от архитектуры или используемой операционной системы. Жесткий диск принято делить на разделы (в Solaris их называют slices).
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Раздел - это группа расположенных рядом цилиндров. Смысл разделения диска на разделы состоит в том, чтобы: • минимизировать расстояние, которое потребуется головке диска для считывания фрагментов одного файла ; • разделить данные разных типов, чтобы обезопасить системные данные от возможной порчи пользовательскими программами; • зарезервировать под системные нужды достаточное пространство на диске так, чтобы несистемные файлы не могли его занять. В Solaris на одном физическом жестком диске может быть до восьми разделов, которые принято нумеровать цифрами от 0 до 7. Каждому разделу соответствует свой файл устройства в каталоге /dev/dsk. Пространство под разделы выделяется цилиндрами. Раздел однозначно определяется номерами начального и конечного цилиндров. В Solaris принята следующая концепция именования таких файлов устройств: в имени устройства учитываются номер контроллера, SCSI ID (target number), номер диска (LUN - Logical Unit Number) и номер раздела на диске (см. рис. 5.1). Если это диск IDE, то роль SCSI ID играет пара master/slave (соответственно, 0/1). Для встроенных дисков SCSI и любых дисков IDE номер диска равен 0. Это иллюстрирует рис. 5.2. Рис. 5.1. Формирование имени устройства - раздела SCSI-диска
Рис. 5.2. Конфигурация с IDE-устройствами Так, для системы с дисками SCSI Zdev/dsk/cOtOdOsO будет указывать на нулевой контроллер SCSI (сО), диск со SCSI ID 0 (tO), диск номер 0 на этом SCSI контроллере (dO), нулевой раздел на этом диске (sO). Как показано на рис. 5.2, при создании файла устройства для раздела, который находится на IDE-диске, в названии файла учитываются номер адаптера IDE (как правило, в компьютерах х86 используют системные платы с одним адаптером, который поддерживает два канала IDE), номер канала (он кодируется как SCSI ID, как показано в табл. 5.1), номер диска (всегда dO) и номер раздела (первый раздел на диске - sO и т.д., подобно разделам на SCSI-дисках). Таблица 5.1. Соответствие между SCSI ID и позицией IDE-диска в подсистеме IDE Номер диска в подсистеме IDE Позиция диска в подсистеме IDE О primary master 1 primary slave 2 secondary master 3 secondary slave Сказанное выше об именовании файлов устройств дисков IDE
относится к системам на платформе SPARC. На платформе х86 файлы устройств, соответствующие разделам дисков IDE, именуются несколько иначе. Файлы, соответствующие разделам fdisk, обозначаются cNdMpK, где после с идет номер контроллера, после d - номер диска, а после р -номер раздела fdisk. На каждом из разделов fdisk может быть создано несколько подразделов (slices), если этот раздел fdisk является разделом типа Solaris. Любой раздел fdisk имеет свой тип, он указывается в таблице Master Boot Record (MBR), в которой описаны все разделы fdisk-диска. По умолчанию при установке Solaris на IDE-диск на платформе IA (х86) программа-установщик создает два раздела fdisk - загрузочный (примерно 20 Мб) с программой-загрузчиком и раздел, на котором будут находиться все остальные части системы, а также пользовательские файлы. Первый раздел fdisk имеет тип FAT, а второй - тип Solaris. На втором разделе создаются подразделы (slices). Они именуются по такому же принципу как и разделы на дисках систем SPARC, но без указания SCSI ID: cOdOsO, cOdOsl и т.д. Каждому файлу из каталога /dev/dsk соответствует файл устройства прямого доступа (raw disk) в каталоге /dev/rdsk: # Is /dev/dsk cOdOpO cOdOsl cOdOslS c0d0s7 clt0d0p3 clt0d0sl2 cltOdOs4 cOdOpl cOdOslO c0d0s2 c0d0s8 cltOdOp4 clt0d0sl3 cltOdOsS c0d0p2 cOdOsll c0d0s3 c0d0s9 cltOdOsO cltOdOsl4 clt0d0s6 c0d0p3 c0d0sl2 c0d0s4 cltOdOpO cltOdOsl cltOdOslS clt0d0s7 c0d0p4 c0d0sl3 c0d0s5 cltOdOpl cltOdOslO clt0d0s2 clt0d0s8 cOdOsO c0d0sl4 c0d0s6 clt0d0p2 cltOdOsll clt0d0s3 clt0d0s9 # Is /dev/rdsk cOdOpO cOdOsl cOdOslS c0d0s7 clt0d0p3 clt0d0sl2 cltOdOs4 cOdOpl cOdOslO c0d0s2 c0d0s8 cltOdOp4 clt0d0sl3 cltOdOsS c0d0p2 cOdOsll c0d0s3 c0d0s9 cltOdOsO cltOdOsl4 clt0d0s6 c0d0p3 c0d0sl2 c0d0s4 cltOdOpO cltOdOsl cltOdOslS clt0d0s7 c0d0p4 c0d0sl3 c0d0s5 cltOdOpl cltOdOslO clt0d0s2 clt0d0s8 cOdOsO c0d0sl4 c0d0s6 clt0d0p2 cltOdOsll clt0d0s3 clt0d0s9 В Solaris принято, что раздел номер 2 (slice 2) представляет собой весь
диск, т.е. является репрезентацией всего диска в целом, со всеми его разделами. Иначе говоря, на диске на самом деле может быть создано до 7 разделов, а восьмой ( раздел 2) всегда охватывает все эти разделы вместе. Поэтому в разделе 2 нельзя создать файловую систему и записывать туда файлы: он служит для системных надобностей. В частности, в структурах, адресуемых через раздел 2, хранятся сведения о диске в целом: реальный размер, число цилиндров и т.п. Замечание о разных типах имен устройств можно проиллюстрировать на примере именования разделов диска. Так, разделам SCSI-ди ска со SCSI ID, равным 6, присоединенным к нулевому контроллеру будут соответствовать логические имена устройств ( разделов диска ) от Zdev/dsk/c0t6d0s0 до /dev/dsk/c0t6d0s7, физические имена от /devices/pci@ lf,O/pci@ l,l/scsi@6/sd@0,0:a до /devices/pci@lf,0/pci@l,l/scsi@6/sd@0,0:g. При этом диску в целом будет соответствовать экземплярное имя sd6. Каталог /devices Каталог /devices отражает аппаратную конфигурацию компьютера. Дерево его подкаталогов строится в соответствии с реальными подключениями устройств к шинам и контроллерам. Поэтому для компьютеров различных архитектур структура дерева подкаталогов /devices будет разной. Содержание этих подкаталогов будет разным для разных компьютеров, даже если они имеют одинаковую архитектуру потому что компьютеры могут иметь разную конфигурацию: неодинаковое количество жестких дисков, различные контроллеры интерфейсов (SCSI, IDE), по-разному подсоединенные к ним диски. Например, для компьютера х86 дерево может быть таким: ./pseudo ./isa ./isa/fdc@ l,3f0 ./isa/i8042@ 1,60 ./pci@0,0 ./pci@0,0/pci8086,7191@l ./pci@0,0/pci-ide@ 2, l/ide@ 0 ./pci@0,0/pci-ide@2,l/ide@ 1 ,/pci@0,0/pci-ide@2,l
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Это пример дерева каталогов Solaris 9, установленного на ноутбук IBM ThinkPad 390Х. Полный список всех устройств компьютера, с которыми система Solaris готова работать, содержится в файле /etc/path_to_inst. Файл /etc/path_to_inst содержит соответствия физических имен устройств и номеров экземпляров устройств (тех, что называются minor-номерами устройств). Чтобы эти соответствия сохранялись от загрузки к загрузке, система записывает их в файл /etc/path_to_inst. Этот файл во время загрузки доступен только для чтения, он может быть изменен с помощью программ add_drv (1М) и drvconf ig (IM). Обычно системному администратору незачем изменять этот файл. Для просмотра полного списка устройств следует использовать команду prtconf: prtconf Для просмотра списка устройств, фактически работающих в системе, используйте prtconf | grep -v not Это позволяет отфильтровать в выводе prtconf строки, содержащие слово "not", например, "device not attached". Более подробно об изменении аппаратной конфигурации и добавлении драйверов устройств говорится в лекции 1 курса "Администрирование ОС Solaris". Разбиение диска на разделы Каждый диск состоит из нескольких разделов. Все разделы, кроме раздела для свопинга, имеют точки монтирования. Вся файловая система UNIX представляет собой единое дерево. К нему можно присоединять (монтировать) новые "ветви". Предположим, что для начала у нас есть только корень дерева (корневой раздел ). Он изображен большим эллипсом. Мы можем присоединить к нашей файловой системе еще один раздел (в нем хранятся какие-то
каталоги, но пока он не имеет имени в нашей файловой системе ). Присоединяемый раздел обозначен малым эллипсом: Рис. 5.3. Для присоединения мы должны указать, в какое место существующей файловой системы (точку монтирования ) следует смонтировать новый раздел. После монтирования все каталоги нового раздела будут доступны в качестве подкаталогов точки монтирования. При этом истинная структура файловой системы оказывается прозрачной для пользователя. После того как раздел смонтирован, пользователь не отличит каталоги одного раздела от каталогов другого. Предположим, мы смонтировали раздел в каталог /usr : Рис. 5.4. Посмотреть, какие разделы в какие точки монтирования присоединены, можно командой mount: mount / on Zdev/dsk/cOdOsO read/write/setuid/intr/largeffles/xattr/onerror=panic/dev= 1980000 on Sat Jan 31 20:08:40 2004 /boot on /dev/dsk/cOdOpO:boot read/write/setuid/nohidden/nofoldcase/dev= 19a3 010 on Sat Jan 31 20:08:38 2004 /proc on /proc read/write/setuid/dev=2d80000 on Sat Jan 31 20:08:39 2004 /etc/mnttab on mnttab read/write/setuid/dev=2e40000 on Sat Jan 31 20:08:39 2004
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 /dev/fd on fd read/write/setuid/dev=2e80000 on Sat Jan 31 20:08:42 2004 /var/run on swap read/write/setuid/xattr/dev=l on Sat Jan 31 20:08:45 2004 /tmp on swap read/write/setuid/xattr/dev=2 on Sat Jan 31 20:08:48 2004 /export/home on Zdev/dsk/c0d0s7 read/write/setuid/intr/largefiles/xattr/onerroi=panic/dev= 1980007 on Sat Jan 31 20:08:48 2004 /floppy/noname on /vol/dev/disketteO/noname read/write/setuid/nohidden/nofoldcase/dev=1740002 on Sat Jan 31 21:34:36 2004 Обратите внимание на то, что если каталог является точкой монтирования, то он находится на отдельном разделе, а если нет - то он расположен на том же разделе, что и родительский каталог. Например, каталог /usr расположен на отдельном разделе, а каталог /etc - в том же разделе, что и каталог /. Разбиение диска на разделы производится в двух случаях: при установке системы и при подключении нового диска. Разбиение на разделы следует спланировать так, чтобы в будущем размеры разделов были достаточны для установки программ и размещения файлов данных. В Solaris должны быть созданы как минимум два раздела: корневой (root) раздел, монтируемый в файловой системе в корень ее дерева и обозначаемый символом " / " (слэш), и раздел для свопинга. Последний не имеет точки монтирования, так как не принадлежит к файловой системе и не размечается, а используется для прямых чтения страниц с диска и записи страниц на диск. Для более надежной и быстрой работы системы принято, кроме упомянутых разделов, создавать разделы с точками монтирования /usr, /export/home и, возможно /opt. Далее мы будем называть разделы по именам точек монтирования (например, раздел /usr). В корневом каталоге системы располагается несколько файлов и ряд обязательных для работы системы подкаталогов. Это подкаталоги /bin, /sbin, /dev, /devices, /etc, /tmp. Кроме того, обычно есть подкаталоги /usr и /opt, а также /export, они обычно являются точками монтирования
Торчинский Ф.И., Ильин Е.С. других разделов. Корневой каталог в типичной установке Solaris (набор программ Entire Distribution - подробнее см. лекции 3 и 4) занимает 200 Мб (при условии, что каталоги /usr, /var и /export/home размещены в других разделах ). При установке системы ему следует выделить 300 Мб - с запасом. Каталог /usr займет не меньше 1400 Мб, /var - не менее 100 Мб. Для каталога /var имеет смысл выделить больше места, т.к. именно в нем будут содержаться быстро растущие в размере файлы протоколов, почтовые ящики пользователей и прочее. Приведенные объемы разделов справедливы для варианта установки с набором программ Entire Distribution. Вообще говоря, перед планированием разделов следует подумать о том, как будет использоваться компьютер под управлением Solaris. Если это будет сервер Oracle, надо зарезервировать один неразмеченный (неотформатированный) раздел под базы данных Oracle. Если планируется сделать почтовый сервер, то следует отвести под раздел /var достаточно места для размещения всех почтовых ящиков в каталоге /var/mail, а если это будет файловый сервер, надо сделать отдельный большой раздел для хранения файлов пользователей (например, /export/home). Таким образом, фактическое пространство, которое следует отвести под каталог /var, зависит от назначения компьютера. Исходя из собственного опыта, я всегда создаю для /var раздел размером как минимум 256 Мб в системах с небольшой нагрузкой (почтовый сервер, http-cache и ftp для сети из 10-50 компьютеров) и до 2-3 Гб в системах со средней нагрузкой (почтовый сервер, http-cache, СУБД типа MySQL, web-сервер с 5-10 виртуальными хостами в сети из 50-150 компьютеров). При установке системы программа-установщик предложит вам разумные значения по умолчанию. Если специфика устанавливаемой системы требует изменений, можно нажать кнопку Modify в окне Lay Out File Systems и затем изменить размеры разделов там, где требуется. Окно Lay Out File Systems появляется ближе к концу работы установщика, после выбора типа установки. О типах установки (установка базового комплекта, установка полного комплекта ПО Solaris и т.п.) подробнее рассказано в лекциях 3 и 4.
При установке нового диска его разметку поможет провести программа format. Эта программа также может использоваться для получения информации о геометрии диска, для низкоуровнего форматирования SCSI-дисков и восстановления некоторой служебной информации после сбоев. Разметка нового диска Предположим, мы подключили новый диск, и это IDE primary slave диск. Для того чтобы создать на нем файловую систему, потребуется создать на новом диске разделы (по крайней мере один) и затем в каждом из разделов создать новую файловую систему. Создание разделов на диске выполняется с помощью команды format или fdisk. Последняя применяется только для платформы х86. Однако из format можно вызвать fdisk, и предпочтительнее делать именно так. Почему - будет ясно из следующего описания. После подключения нового диска нет надобности перенастраивать ядро Solaris, если диски этого типа в системе уже есть. Например, если у вас уже есть один IDE-диск и система с ним уже работает, незачем перезапускать систему с ключом г или создавать файл /reconfigure и перезапускаться для обнаружения нового устройства. Достаточно создать новые файлы устройств в каталогах /devices и /dev. Для этого в более ранних версиях Solaris использовалась программа disks, а в Solaris 9 следует запустить devfsadm. При запуске без параметров новый диск будет обнаружен и требуемые файлы будут добавлены в каталоги /devices, /dev/dsk и /dev/rdsk. Теперь любая программа работы с диском, требующая файл устройства в каталоге /dev/rdsk, уже может работать с диском. Запустим программу format. В меню программы следует выбрать диск, а затем выбрать запуск fdisk. После этого мы будем работать в среде программы fdisk. Ее интерфейс нам знаком по другим системам, нужно лишь обратить внимание на то, что есть возможность создавать разделы нескольких типов. Если мы добавляем дополнительный диск для работы с ним из среды Solaris, то следует выбрать тип Solaris. Раздел на новом диске не должен быть помечен как "активный", если только с
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 него не буцет загружаться какая-нибуць система в будущем. Можно запустить программу fdisk самостоятельно, без предварительного вызова программы format, но последняя все равно будет нужна на следующем этапе. После создания раздела следует выйти из fdisk и в программе format выбрать partition->print. Если определен размер только одного подраздела (partition), а именно -подраздела номер 2, это говорит о том, что для созданного раздела fdisk следует определить подразделы. Если это отвечает вашим намерениям, достаточно создать всего один подраздел размером с весь раздел fdisk. Это можно сделать через меню Partition программы format. Выбрав partition->HOMep подраздела (например, 0), будет легко задать его размер. Теперь необходимо выбрать пункт label для записи получившейся таблицы разделов на диск. После этого можно создать новую файловую систему на получившемся подразделе. Помните: разделы fdisk для Solaris - это лишь место для размещения подразделов типа Solaris (slices). А на этих подразделах как раз и существует файловая система UES и располагаются файлы и каталоги. Файловую систему на новом диске создадим командой newf s. Программа mkf s позволяет создавать файловые системы разных типов, включая UFS, a newfs является более удобным интерфейсом к mkfs исключительно для создания файловых систем UES: # newfs /dev/rdsk/cOdlsO newfs: construct a new file system /dev/rdsk/cOdlsO: (у/n)? у /dev/rdsk/cOdlsO: 2060352 sectors in 2044 cylinders of 16 tracks, 63 sectors 1006,0MB in 128 cyl groups (16 c/g, 7,88MB/g, 3776 i/g) super-block backups (for feck -F ufs -o b=#) at: 32, 16224, 32416, 48608, 64800, 80992, 97184, 113376, 129568, 145760, 161952, 178144, 194336, 210528, 226720, 242912, 258080,
274272, 290464, 306656, 322848, 339040, 355232, 371424, 387616, 403808, 420000, 436192, 452384, 468576, 484768, 500960, 516128, 532320, 548512, 564704, 580896, 597088, 613280, 629472, 645664, 661856, 678048, 694240, 710432, 726624, 742816, 759008, 774176, 790368, 806560, 822752, 838944, 855136, 871328, 887520, 903712, 919904, 936096, 952288, 968480, 984672, 1000864, 1017056, 1032224, 1048416, 1064608, 1080800,1096992, 1113184, 1129376, 1145568, 1161760, 1177952, 1194144, 1210336, 1226528, 1242720, 1258912, 1275104, 1290272, 1306464, 1322656, 1338848, 1355040, 1371232, 1387424, 1403616, 1419808, 1436000, 1452192, 1468384, 1484576, 1500768, 1516960, 1533152, 1548320, 1564512, 1580704, 1596896, 1613088, 1629280, 1645472, 1661664, 1677856, 1694048, 1710240, 1726432, 1742624, 1758816, 1775008, 1791200, 1806368, 1822560, 1838752, 1854944, 1871136, 1887328, 1903520, 1919712, 1935904, 1952096, 1968288, 1984480, 2000672, 2016864, 2033056, 2049248, Смонтируем получившуюся файловую систему в каталог /test: # mount -F ufe Zdev/dsk/cOdlsO /test # Is test lost+found Обратите внимание, при создании файловой системы в ней сразу создается каталог lost+found, это делается для того, чтобы при автоматическом восстановлении файлов после сбоя (при перезагрузке, например) программе fsck было куца записать потерявшиеся фрагменты файлов. Кроме того, в некоторые блоки (их список выводится при работе newfs или mkfs ) записана резервная копия суперблока новой файловой системы. Количество индексных дескрипторов в файловой системе Количество индексных дескрипторов в создаваемой файловой системе типа UFS можно задать посредством указания параметра с ключом -i: newfe -i nbpi raw_device_name
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Например newfs -i 2048 Zdev/rdsk/cOdOpO Параметр nbpi обозначает число байтов, приходящихся на один индексный дескриптор^, что при известном объеме диска однозначно определяет число индексных дескрипторов в файловой системе. Программы mkfs и newfs поддерживают еще ряд ключей, которые позволяют гибко описывать параметры создаваемой файловой системы. Поддерживаемые типы файловых систем Основной ("родной") файловой системой Solaris является UFS (Unix File System). Всего Solaris 9 поддерживает 13 файловых систем, перечисленных в таблице 5.2. Таблица 5.2. Файловые системы, поддерживаемые Solaris 9 Файловая система Тип Устройство Описание UFS обычная диск родная файловая система Solaris VxFS обычная диск журналируемая система от Veritas Corp QFS обычная диск файловая система от LSC Inc. pels обычная диск MSDOS FAT и FAT32 hsfs обычная диск файловая система High Sierra (для CD-ROM); она же - ISO9660 tmpfs nfs обычная память псевдосистема сеть использует оперативную память и область свопинга файловая система для монтирования каталогов на других компьютерах (подобно разделяемым каталогам Windows) использует локальный диск для cachefs псевдосистема другая ФС кэширования удаленной файловой системы NFS
использует динамические autofs псевдосистема другая ФС объекты для монтирования других файловых систем specfs псевдосистема драйверы файловая система файлов устройств /dev procfs псевдосистема ядро /ргос - отображение процессов в структуру Ф С sockfs псевдосистема сеть соединения типа "сокет" fifos псевдосистема файлы программные каналы (pipe API) В довольно старых версиях UNIX поддерживалась всего одна файловая система. С увеличением разнообразия носителей возникла необходимость поддержки разнородных файловых систем на носителях разной природы. Так в 1985 году компания Sun Microsystems пришла к реализации концепции виртуальной файловой системы. Виртуальная файловая система представляет собой абстрактную файловую систему, которая позволяет операционной системе одинаковым образом обращаться к файловым системам разных типов. К 1985 году операционные системы фирмы Sun использовали Berkeley Fast Filesystem (FFS). Эта файловая система базировалась на концепции индексных дескрипторов, которая органично трансформировалась в концепцию виртуальных индексных дескрипторов в новой файловой системе UFS, вобравшей в себя структуру FFS и новые идеи организации виртуальной файловой системы. Взаимодействие независимого от конкретного типа файловой системы уровня виртуальной файловой системы и файловых систем строго определенных типов иллюстрирует рисунок 5.5.
VFS— ВЕгртуальная файловая система, vnodes Рис. 5.5. Структура виртуальной файловой системы Solaris Файловая система UFS с 1985 года претерпела некоторые изменения. Так, начиная с выпуска Solaris 9 8/03 поддерживаются многотерабайтные разделы, в то время как до этого UFS в Solaris могла работать только с разделами размером до 1 Тб. В настоящее время большие разделы поддерживаются только в 64-разрядной версии Solaris 9. Файловые системы UFS, VxFS и QFS, поддерживаемые в Solaris, отличаются по некоторым важным параметрам, влияющим на их надежность и производительность. Различные файловые системы обладают разными алгоритмами выделения пространства под файлы, а также механизмами журналирования. Таблица 5.3. Некоторые свойства файловых систем UFS, VxFS и QFS Файловая Как выделяется пространство Есть ли система под файл журналирование UFS блоками (block) Да VxFS экстентами (extent) Да QFS экстентами (extent) нет Выделение пространства блоками позволяет минимизировать фрагментацию файловой системы, в то время как выделение пространства экстентами (большими частями пространства диска, состоящими из многих блоков) снизить объем служебной информации, которая записывается на диск.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 В файловой системе UFS размер блока может составлять от 512 байт до 8192 байт, по умолчанию в Solaris принят размер 8192 байт В Solaris поддерживается журналирование (logging) файловых систем UFS и VxFS. Журналирование позволяет записывать в журнал информацию обо всех начатых транзакциях. Если транзакция (т.е. операция записи на диск) по каким-то причинам не была завершена (например, отключилось питание), то после перезапуска системы файловая система будет автоматически возвращена в состояние, в котором она была до начала транзакции. Подобную функциональность предоставляет файловая система ext3fs в Linux, reiserfs для FreeBSD и Linux и некоторые другие. В последние годы непременным условием использования файловой системы стала поддержка современных дисков больших объемов и больших файлов. Если несколько лет назад "большим" назывался диск объемом в 1 гигабайт, то сейчас дисковые массивы объемом в несколько терабайт становятся обычными для систем среднего класса. Скоро они придут в системы малых офисов и в дома, а сети предприятий начнут работать с серверами, в которых установлены дисковые массивы, содержащие десятки и сотни терабайт информации. Что на это отвечают создатели файловых систем для UNIX? С 1991 года файловая система UFS претерпела заметные изменения -появилась версия UFS2, которая пока поддерживается только во FreeBSD 5.0. В Solaris модификация файловой системы позволила достичь предела поддерживаемого дискового объема одного раздела UFS в 1 терабайт. Элементы файловой системы Файловая система каждого из разделов диска состоит из нескольких структурных элементов. Это суперблок, таблица индексных дескрипторов, блоки описания файлов, блоки, содержащие списки управления доступом к файлам (ACL - Access Control Lists), каталоги и собственно файлы. Термин " файловая система " в литературе используется для обозначения трех разных понятий:
• Во-первых, файловая система - это набор правил и конструкций, описывающих то, как сохраняются файлы на диске. В этом смысле мы употребляем, например, выражение "файловая система FAT32", и "файловая система" здесь тождественна понятию "тип файловой системы". • Во-вторых, файловая система - это совокупность всех файлов, хранимых в компьютере. • В-третьих (и это значение термина характерно именно для UNIX-систем) файловая система - это совокупность всех файлов на разделе диска или устройстве. В этой книге мы буцем говорить о файловых системах во всех трех смыслах, и там, где из контекста неясно, что именно имеется в виду, буцем отдельно оговаривать, в каком смысле мы употребляем это выражение. Файловая система UFS содержит четыре основных компонента с управляющей информацией: загрузочный блок, суперблок, таблицу индексных дескрипторов (i-node table) и каталоги. Кроме того, в Solaris (начиная с версии 2.5, с 1995 года^ ) в файловой системе хранятся списки управления доступом (ACL). Хранение списков ACL обеспечивают так называемые теневые индексные дескрипторы (shadow inodes). В System V каждый раздел жесткого диска форматируется (размечается) для размещения на нем файловой системы UNIX, в BSD - один раздел жесткого диска разбивается на подразделы, каждый из которых форматируется. Мы называем "разделом UNIX" такой размеченный в формате файловой системы UNIX раздел или подраздел. Загрузочный блок (boot block) - это, как правило, часть метки диска (disk label). В загрузочном блоке записана маленькая программа, которая при старте системы загружает ядро ОС с диска в оперативную память. Загрузочный блок располагается в первом секторе диска. Загрузочный блок имеет смысл только для первого раздела жесткого диска, однако место для него резервируется в каждом разделе . Суперблок содержит общую информацию о файловой системе как совокупности файлов на данном разделе жесткого диска, в частности,
размере раздела UNIX, числе свободных и занятых блоков и индексных дескрипторов, флаге целостности файловой системы. Этот флаг устанавливается при успешном завершении работы с файловой системой, например, при корректной остановке операционной системы. В случае, если компьютер выключили рубильником, не дождавшись корректной остановки системы, при следующем старте системы программа fsck автоматически начнет проверку дисков и выдаст сообщение "clean flag is not set in superblock". Копии суперблока записываются в нескольких блоках внутри каждого раздела для большей надежности. В файловой системе UFS записывается по одной копии суперблока на каждую группу цилиндров. Если выяснится, что оригинал суперблока в начале раздела поврежден, буцет использована копия суперблока. Таблица индексных дескрипторов (i-node table) содержит дескрипторы файлов. Дескриптор файла содержит сведения о типе файла, размещении файла на диске, правах доступа к нему UID владельца файла, GID группы файла, время последнего доступа к файлу, время последней модификации файла, время последней модификации самого индексного дескриптора. Подробнее структура таблицы индексных дескрипторов рассмотрена в подразделе 'Таблица индексных дескрипторов: детали". Размер индексного дескриптора фиксирован и составляет в Solaris в UFS 128 байт. Размер таблицы индексных дескрипторов фиксирован и задается при создании файловой системы на разделе. Программе mkfs (и, соответственно, newfs ) можно явно указать требуемое количество байт данных, которые должны приходиться на один индексный дескриптор, что определит количество индексных дескрипторов на разделе. Например, если раздел состоит из 1000000 байт, и число байт на дескриптор составляет 1000, то буцет создано 1000 индексных дескрипторов. Таблица индексных дескрипторов: детали В ранних версиях UNIX таблица индексных дескрипторов занимала фиксированное пространство в начале устройства; в файловых системах
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 UFS современных систем эта таблица распределена по диску, потому что каждая часть таблицы отвечает за часть диска. В файловых системах, которые основаны на FFS (ext2, ext3, UFS), диск разбит на группы цилиндров. Каждая группа цилиндров имеет свою копию суперблока, битовую карту свободных блоков этой группы цилиндров и таблицу индексных дескрипторов для файлов, расположенных на цилиндрах этой группы. Такая структура хороша тем, что, во-первых, ускоряется доступ к системным структурам данных, во-вторых, повышается устойчивость к сбоям диска. При повреждении одного участка поверхности диска теряется только небольшая часть служебной информации о файлах и диске (такая информация в документации часто называется метаданными - metadata). Если метаданные расположены рядом с пользовательскими данными, уменьшается расстояние, на которое перемещаются головки жесткого диска при переходе от служебной информации к запрошенным данным. К тому же при переходе от одного цилиндра к другому времени уходит значительно больше, чем при считывании данных в пределах одного цилиндра. Каждому файлу соответствует индексный дескриптор. Он хранит информацию о различных атрибутах файла и его размещении на диске. В индексном дескрипторе записаны: • тип файла; • права доступа к файлу; • идентификатор владельца файла ; • идентификатор группы файла ; • время последней модификации файла ; • время последнего доступа к файлу; • время последней модификации самого индексного дескриптора ; • число повторных использований индексного дескриптора (т.е. случаев, когда файл был стерт и его индексный дескриптор был использован для хранения данных о другом файле ); • длину файла в байтах (для файлов устройств это поле имеет смысл сочетания major- и minor-номера устройства, см. раздел "Файлы устройств Solaris"); • идентификатор файловой системы, в которой расположен файл ;
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 • количество ссылок на файл ; • число блоков файла (требуется для поддержки работы с файлами, содержащими большие области, заполненные символами с кодом "ноль", т.е. пустое пространство; такие файлы называются holey files - файлы с пустотами); • номер теневого индексного дескриптора (если требуется); • структура из 15 номеров блоков, описывающая размещение файла на диске; каждый номер блока занимает 4 байта. Структура, описывающая физическое размещение файла на диске, в UFS представляет собой последовательность из номеров блоков. Если файл занимает более двенадцати блоков (т.е. его длина больше 12*8192 =98304 байт), то предпоследние три номера обозначают не номера блоков данных, а номера косвенных блоков (indirect blocks), в которых хранятся указатели на следующие блоки данных и, возможно, на следующие косвенные блоки. Первые двенадцать номеров блоков содержат просто номера блоков данных. Тринадцатый номер - это номер косвенного блока первого уровня. В блоке первого уровня содержится до 2048 адресов блоков данных (речь идет о 8192-байтных блоках). Четырнадцатый номер блока содержит номер косвенного блока второго уровня. Косвенный блок второго уровня содержит 2048 номеров косвенных блоков первого уровня, таким образом, через косвенный блок второго уровня адресуется до 20482 блоков данных. В пятнадцатый номер блока записан номер косвенного блока третьего уровня. Косвенный блок третьего уровня содержит 2048 номеров косвенных блоков второго уровня, так что через косвенный блок третьего уровня адресуется до 20483 блоков данных. Файл не может располагаться на разных разделах UNIX. Файл может быть фрагментирован, хотя файловая система построена так, чтобы свести фрагментацию к минимуму Теоретически рекомендуется не заполнять файловую систему более, чем на 70%, чтобы не увеличивать фрагментацию при работе.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Максимальный размер файла может быть легко посчитан, так как мы знаем правила адресации блоков данных. Если размер блока равен 512 байт, то напрямую адресуемые из индексного дескриптора блоки в сумме дают размер 12 х 8192 байта = 98304 байта. Адресуемые через номер косвенного блока первого уровня - 2048 х 8192 байта = 16777216 байт. Адресуемые через номер косвенного блока второго уровня - 20482 х 8192 байта = 34359738368 байт. Адресуемые через номер косвенного блока третьего уровня - 20483 х 8192 байта = 70368744177664 байта. Вместе получается примерно 64 Тбайт. Однако Solaris 9, насколько об этом можно судить по доступным фактам, не поддерживает файлы размером более 1 Тбайт на данный момент. Все современные системы UNIX используют 128-байтный индексный дескриптор, который вмещает больше информации и номер блока в нем занимает не 3 байта (как в прошлом), а 4. Поэтому адресовать можно весьма большие разделы. 28 байт в таком дескрипторе отводится под разные расширения, включая место для 32-разрядных идентификаторов владельца и группы файла, а также под 64-разрядные поля времен модификации. Введение 64-разрядных полей времени в UNIX вместо прежних 32-разрядных нужно для того, чтобы избежать "проблемы 2031 года", т.к. именно в этом году перестанет хватать 32 байт для представления времени в системах UNIX. Разработчики обоснованно полагают, что до тех пор все существующие системы UNIX будут заблаговременно переведены на 64-разрядную архитектуру Обычные индексные дескрипторы Обычные индексные дескрипторы (i-nodes) используются повсюду во всех системах UNIX. В Solaris существует специальный тип индексных дескрипторов - теневые индексные дескрипторы. Они служат для
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 хранения информации о расширенных правах доступа к файлам и каталогам. Теневые индексные дескрипторы Теневые индексные дескрипторы (shadow i-nodes) содержат информацию, позволяющую получать доступ к расширенным правам доступа (ACL) файла или каталога. Этот тип файловых дескрипторов существует в реализации файловой системы UFS в Solaris, начиная с версии 2.5.1. Solaris 9 поддерживает теневые индексные дескрипторы для файловых систем UFS (Unix File System), NFS (Network File System версий 2 и 3), CacheFS (Cache File System). Расширенные права доступа могут быть назначены в отношении каталогов, обычных файлов, символических ссылок и именованных каналов (FIFO). Если файлу назначены расширенные права доступа (например, с помощью команды setfacl ), то будет создан теневой индексный дескриптор для этого файла и в обычный индексный дескриптор этого файла будет записана ссылка на теневой индексный дескриптор. Теневой индексный дескриптор не имеет специального формата, он представляет собой точно такой же индексный дескриптор, как и обычный, но с указанием в поле типа дескриптора на то, что он -теневой. Расширенные права доступа хранятся в специальном файле, который создается в момент назначения таких прав. Теневой дескриптор указывает на этот специальный файл. В Solaris разрешено создавать не более 1024 записей в таком файле - следовательно, расширенные права доступа могут содержать не более 1024 специфических определений прав. Этого с избытком хватает для установки каких угодно специфических прав доступа. Каждая запись ACL занимает 12 байт, поэтому обычно эти записи не требуют много места на диске. Однако при назначении специфических прав доступа большому числу объектов в файловой системе следует помнить о том, что для этого требуется дополнительный объем дисковой памяти. Для назначения и просмотра расширенных прав доступа используются команды setfacl и getfacl, о которых более подробно
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 рассказывается в лекции 6. man lofiadm (как работать с образом диска) Для работы с образом диска, записанным в файл, может оказаться полезной программа lofiadm, которая позволяет настроить обращение к файлу как к блочному устройству Эта программа управляет драйвером lofi, который позволяет связать файл с блочным псевдоустройством. После этого содержимое файла будет доступно посредством обращения к файлу этого блочного устройства. У системы будет полное впечатление, что это и есть устройство и его можно монтировать с помощью mount, проверять на корректность записей на нем с помощью f sck и т.п. Программу lofiadm следует использовать для добавления таких псевдоустройств, удаления связи файла и псевдоустройства и вывода информации о таких устройствах в системе. Например, можно смонтировать образ компакт-диска стандарта ISO, лежащего в файле ex.iso: lofiadm -a /home/ivan/ex.iso /dev/lofi/1 Затем можно смонтировать новое устройство в системе: mount -F hsfs -о го /dev/lofi/1 /mnt и проверить, видно ли оно: df -k /mnt Filesystem kbytes used avail capacity Mounted on /dev/lofi/1 512418 512418 0 100% /mnt Для демонтирования псевдоустройства и его удаления из системы следует дать следующие команды: umount /mnt
Торчинский Ф.И., Ильин Е.С. lofiadm -d /dev/lofi/1 Обратите внимание на возможность создания файловой системы на псевдоустройстве и появлении устройства прямого доступа (rlofi, аналогично rdsk) после выполнения lofiadm -а: lofiadm -a /export/home/test /dev/lofi/1 newfs /dev/rlofi/1 newfs: construct a new file system /dev/rlofi/1: (у/n)? у /dev/rlofi/1: 71638 sectors in 119 cylinders of 1 tracks, 602 sectors 35.0MB in 8 cyl groups (16 c/g, 4.70MB/g, 2240 i/g) super-block backups (for feck -F ufe -o b=#) at: 32, 9664, 19296, 28928, ... К файлу, который смонтирован в качестве псевдоустройства с помощью lofiadm, нельзя обращаться напрямую, как к файлу. Это аналогично тому что нельзя напрямую обращаться к диску для записи файла, а следует делать это через драйвер файловой системы. Надлежит устанавливать такие права доступа к файлам, монтируемым как устройства, чтобы предотвратить несанкционированный доступ к ним как к обычным файлам. После перезагрузки связь файла и псевдоустройства теряется; если требуется сделать ее постоянной, надо написать скрипт, который будет запускаться при загрузке и добавлять соответствующее псевдоустройство в систему а затем его монтировать. Возможность управлять псевдоустройствами зависит от прав доступа к файлу /dev/loficd. По умолчанию правом монтирования и демонирования псевдоустройств обладает только root. Дерево каталогов Файлы в UNIX разложены по каталогам. Каталоги образуют древовидную структуру: есть корневой каталог, который обозначается знаком " / " (слэш), и его подкаталоги. В каждом из последних есть свои подкаталоги и т.д. Ограничений на число файлов в каталоге нет. Разные
каталоги ("ветви" дерева каталогов ) могут размещаться на разных дисках, это незаметно для пользователя. Чтобы обратиться к файлу, не нужно знать о том, на каком физическом устройстве или разделе диска он записан. Это значит, что лихорадочный поиск по дискам С:, D: Е:, К:, R:, Y: не знаком человеку работающему с UNIX. Он лихорадочно ищет потерянные файлы в густой кроне UNIX-каталогов, начиная от корня. Между прочим, забавно, что уже много лет все упорно называют деревом структуру каталогов, у которой корень находится наверху а его ближайшие отростки-подкаталоги называются каталогами верхнего уровня: Кто из нас видел деревья, растущие кронами вниз? Монтирование и демонтирование файловых систем При старте системы после загрузки ядра и запуска процесса in it инициируется проверка тех файловых систем, которые следует проверить и смонтировать автоматически. Их список содержится в файле /etc/vfstab^. Типичный файл /etc/vfstab выглядит так: #device device mount FS feck mount Mount #to mount to feck point type pass at boot Options # Fd - /dev/fd fd - no /proc - /proc proc - no Zdev/dsk/cOdOsl - swap - no Zdev/dsk/cOdOsO Zdev/rdsk/cOdOsO / rife 1 no /dev/dsk/cOdOpO:boot- /boot pels - no Zdev/dsk/c0d0s7/ dev/rdsk/c0d0s7 /export/home rife 2 yes swap - /tmp tmpfs - yes Те файловые системы, которые в столбце mount at boot отмечены как yes, буцут проверены и смонтированы при старте системы. Файловую систему можно смонтировать в любой момент, надо лишь указать ей в качестве точки монтирования пустой каталог, который уже создан и доступен в системе. Операцию монтирования и демонтирования файловой системы может осуществить только root. Монтирование файловой системы выполняется командой mount:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 mount device mount_point Например mount /dev/dsk/cOdlsO /test Для монтирования файловой системы, которая описана в /etc/vfstab, можно не указывать имя файла устройства, а сразу указать точку монтирования. Такую "сокращенную" команду mount можно применять только для монтирования файловых систем, перечисленных в /etc/vfstab. При монтировании файловой системы следует явно указывать ее тип, если он отличается от UFS. Демонтирование файловой системы делает ее недоступной для чтения и записи, файлы, которые расположены на демонтируемом разделе, конечно же, остаются на месте. Просто после демонтирования они не видны: точка монтирования снова превращается в пустой каталог, как это было до монтирования в нее диска или раздела. Нельзя демонтировать занятую файловую систему. Занятой считается такая файловая система, файл которой открыт в настоящее время кем-то из пользователей, или каталог которой является текущим каталогом кого-то из работающих в системе пользователей. Чтобы все-таки демонтировать файловую систему, следует найти и устранить причину ее занятости. Часто для этого достаточно просто самому выйти из того каталога, который собираешься демонтировать. Это типичная ошибка системного администратора: пытаться демонтировать /usr в тот момент, когда находишься в /usr/admin или подобном подкаталоге, который лежит в том же разделе, что и /usr. Демонтирование файловой системы выполняется командой umount: umount mountpoint Например umount /mnt
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Монтирование дискет и прочих сменных носителей Для монтирования дискет, компакт-дисков и других сменных носителей в Solaris имеется специальная программа void (Volume Management daemon). Она следит за тем, вставлен ли компакт-диск, дискета или, к примеру zip-диск в соответствующее устройство. Как только диск оказывается в устройстве, void вызывает программу volcheck, чтобы проверить, действительно ли в привод установили новый диск, а затем программу rmmount для монтирования диска в заранее определенную точку монтирования. Программа rmmount выясняет тип файловой системы вставленного диска, и, если этот тип поддерживается, монтирует диск. Список предопределенных точек монтирования можно посмотреть с помощью man rmmount Поведение rmmount определяется файлом конфигурации /etc/rmmount. conf. Программу rmmount можно запускать и вручную. Кроме того, можно использовать команду vol rmmount для форсирования операций перемонтирования или демонтирования файловой системы на сменном носителе. Более подробно об этой команде говорится в man volrmmount. Проверка файловых систем Широко известная из систем Windows программа scandisk имеет аналог в UNIX - программу fsck. В Solaris fsck по умолчанию проверяет все файловые системы, перечисленные в /etc/vfstab. Обычно имеет смысл запускать fsck вручную с указанием конкретной файловой системы: fsck Zdev/dsk/c0d0s7 Программа fsck проверяет файловую систему и, если находит ошибки, исправляет их. Обнаружив ошибки, об исправлении которых она не может принять самостоятельное решение, fsck выдает сообщение об
этом на терминал, с которого ее запустили, и ждет решения администратора. Если в настоящий момент файловая система смонтирована, fsck не начинает ее проверку. Это правило можно обойти, если потребовать от fsck обращаться к диску как к символьному устройству а не как к блочному: feck Zdev/dsk/c0d0s7 Zdev/dsk/c0d0s7 is a mounted file system, ignored feck Zdev/rdsk/c0d0s7 ** /dev/rdsk/c0d0s7 * * Currently Mounted on/export/home * * Phase 1 - Check Blocks and Sizes * * Phase 2 - Check Pathnames * * Phase 3 - Check Connectivity * * Phase 4 - Check Reference Counts * * Phase 5 - Check Cyl groups 2 files, 9 used, 3823540 free (20 frags, 477940 blocks, 0.0% fragmentation) Упражнения 1. Подключите новый IDE-диск, дайте команду format. Виден ли диск системе? 2. Выполните программу devfsadm, снова запустите format. Стал ли виден новый диск? Почему? Имеется в виду число байт данных в файлах этого раздела, а не длина индексного дескриптора, последняя фиксирована и равна 128 байтам (прим. авт.). Фактически, впервые Sun Microsystems ввела поддержку ACL для файловой системы UFS в 1993 году в специальной версии Solaris -Trusted Solaris, которая была сертифицирована на уровень безопасности В1. 31 Внимание! В других системах UNIX этот файл имеет другое название - /etc/fstab.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Файловая система: разделы, файлы и каталоги Лекция рассказывает о свойствах файлов, каталогов, о деталях работы с ними и соглашениях об именах файлов, а также о правах доступа к файлам и каталогам. Эта информация важна всем, в особенности полезны могут быть сведения о механизме управления доступом к файлам с помощью списков управления доступом (ACL). Оптимизация размеров разделов Вопрос об оптимизации дисковой подсистемы обычно встает как неизбежный результат отсутствия детального планирования системы в целом. Поэтому первым правилом, которое следует соблюдать системному администратору желающему видеть свою систему быстрой и надежной, будет "планируй все заранее". Когда требуется установить новый сервер Solaris, стоит подумать, чем этот сервер будет занят. В современном мире задачи компьютеров меняются быстрее, чем оборудование. Если пять лет назад почтовый сервер, обслуживающий сто пользователей, мог работать на медленном компьютере с диском 1 Гбайт, то нынче с почтой связано намного больше задач, чем просто прием, передача и хранение. Современный почтовый сервер для тех же ста пользователей принимает почту проверяет ее на вирусы, блокирует спам, возможно, выполняет контекстный анализ письма для фильтрации спама и только после этого сохраняет его на диске. Объемы передаваемой почты тоже существенно возросли. Письма часто отправляются в формате HTML, а многие адресаты вкладывают в письма не только текстовые документы, но и фотографии, музыкальные файлы и видеоклипы. Поэтому, планируя свой новый почтовый сервер с запасом, вы не ошибетесь. Сейчас средний пользователь хранит в своем почтовом ящике несколько сотен мегабайт информации, следует ожидать, что в ближайшее время придется оценивать возможную нагрузку на файловую систему почтового сервера исходя из 5-10 Гбайт на каждого пользователя. Это не относится к серверам, которые только передают почту но не хранят почтовые ящики пользователей. Для передачи и приема нескольких писем в секунду придется
установить новый компьютер с процессором Pentium IV, если на сервере будет запущена программа контекстного анализа писем для фильтрации спама (например, spamasassin ). Объем памяти, естественно, тоже должен быть достаточным для одновременного запуска десятков копий программы sendmail или ее аналога. Из этого видно, что характер работы сервера надо планировать еще до начала его установки. Во время установки следует задать верные размеры файловых систем. Это избавит вас от необходимости модифицировать их размеры в дальнейшем. В Solaris размер корневой файловой системы / вполне может быть менее 3 Гбайт. Даже с учетом возможного обновления системы этого достаточно. Но файловая система /usr, куда будут устанавливаться все новые пакеты, должна быть спланирована с запасом. Если работа сервера будет связана с большой дисковой нагрузкой (кэширование http-запросов, хранение файлов или почты), то для этих специфических целей (например, кэш http-запросов) можно выделить отдельный раздел и назначить ему такой размер, который соответствует вашим потребностям. Надо будет учесть такие факторы, как возможный рост потребностей, требуемая производительность (для подсистем SCSI лучше установить шесть дисков по 9 Гбайт, чем один размером 54 Гбайт, - так будет быстрее) и не забыть учесть "запас", который создает система на каждом разд ел еЦ Как узнать, сколько места осталось на диске? Оценить, как в текущий момент используется диск, поможет программа df: df / (Zdev/dsk/cOdOsO): 1787406 blocks 419477 files /boot (/dev/dsk/cOdOpO:boot): 19452 blocks -1 files /proc (/proc ): 0 blocks 2896 files /etc/mnttab (mnttab ): 0 blocks /dev/fd (fd ): 0 blocks 0 files 0 files
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 /var/run (swap ): 1265832 blocks 30240 files /tinp (swap ): 1265832 blocks 30240 files /export/home (/dev/dsk/c0d0s7 ): 7647080 blocks 481212 files Чтобы получить более удобную картину в которой размер занятых блоков приводится в килобайтах, следует дать команду df - к: df-k Filesystem kbytes used avail capacity Mounted on Zdev/dsk/cOdOsO 1857844 964142 837967 54% / /dev/dsk/cOdOpO:boot 11234 1508 9726 14% /boot /proc 0 0 0 0% /proc Mnttab 0 0 0 0% /etc/mnttab Fd 0 0 0 0% /dev/fd Swap 632924 20 632904 1% /var/run Swap 633208 304 632904 1% /tmp Zdev/dsk/c0d0s7 3823549 9 3785305 1% /export/home Команда df-о i сообщит о количестве свободных и занятых индексных дескрипторов на разделе. Обратите внимание на то, что в других вариантах UNIX это делается с помощью команды df -i Для оценки размеров подкаталогов любого каталога используйте du. Например, для определения того, сколько места на дисках занимают подкаталоги корневого каталога, дайте команду du - s / *: du -s /* 2 /bin 3011 /boot 87255 /cdrom 1424 /core 3068 /dev 76 /devices 6262 /etc
Торчинский Ф.И., Ильин Е.С. 26 /export 6 /floppy 4 /fonnatJog 1 /home 20702 /kernel 2 /lib 16 /lost+found 2 /Mail 2 /mnt 1 /net 2 /nsmail 14 /opt 3822 /platform 730131 /proc 50 /qq 2 /qqqq 34154 /sbin 640 /tmp 46 /TT_DB 1811752 /usr 46138 /var 0 /vol 19 /xfii В этой команде ключ -s указывает, что следует выдать суммарные значения по всем подкаталогам, а аргумент /* требует, чтобы была посчитана статистика по всем подкаталогам и файлам корневого каталога. Без указания ключа - s программа du сообщит о том, сколько места занимает каждый из "листьев" дерева каталогов, т.е. выдаст длинный и подробный список всех подкаталогов вообще, включая подкаталоги подкаталогов подкаталогов... Минимальное свободное пространство При создании файловой системы часть раздела диска резервируется на всякий случай. Эта доля задается параметром minfree (параметр free при запуске программы mkfs ) и по умолчанию составляет 10%
общего объема файловой системы. Ко "всяким случаям" относят переполнение диска, т.е. превышение выделенного лимита пространства размещенными на разделе файлами, необходимость срочно найти свободный дисковый блок, когда диск почти заполнен, и тому подобное. В современных системах, когда файловые системы размером в сотни гигабайт - явление обычное, 10% свободного объема составляет значительный объем дискового пространства. Чтобы уменьшить такие колоссальные издержки, значение minfree достаточно установить равным 1%. Кстати, при установке Solaris 9 на мой ноутбук ThinkPad 390Х с диском размером 4 Гбайт, по умолчанию файловая система была создана именно с таким minfree. Несмотря на это, документация на mkfs_ufs утверждала, что 10% является значением по умолчанию. При создании файловой системы минимальное свободное пространство можно задать так: mkfs_ufs -о free=l или так: newfs -ml Изменить параметры файловой системы UNIX можно с помощью программы tunef s. После того как на диске осталось свободного пространства менее, чем указано в minfree, запись на диск сможет выполнить только root. Фрагментация Любая файловая система так или иначе ищет компромисс между бесконтрольной фрагментацией, как в системе FAT, и полным запретом на фрагментацию, как в файловой системе ОС RT-11. Одной из проблем FAT является необходимость регулярно дефрагментировать раздел, а в файловой системе RT-11 приходилось регулярно выполнять программу squeese, которая записывала друг за другом, последовательно, все файлы, разбросанные по диску. Фрагментация FAT приводила к снижению производительности ввода-вывода, а запрет на фрагментацию в RT-11 делал невозможным запись на диск большого
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 файла, даже если на диске имелось полно участков, размер которых был лишь немногим меньше его длины, так как файл должен был быть записан только в последовательно расположенные блоки. В файловой системе UFS проблема фрагментации решается очень изящно. Фактически, фрагментация диска редко превышает 1-2% от его объема, что в мире Windows считается превосходным показателем. Как уцается достичь такого? Нужно ли что-то делать системному администратору чтобы фрагментация не мешала производительности в UNIX? Надо отметить, что термин "фрагментация" в UNIX означает явление, совсем не похожее на фрагментацию в FAT. В UFS, если на диск записывается файл размером меньше блока, ему выделяется фрагмент блока, но фактически "резервируется" целый блок, и файл, таким образом, имеет резерв для расширения до размера блока. Файлы размером больше блока записываются в свободные (по-возможности, последовательные) блоки файловой системы. Однако размер файла не всегда кратен длине блока, поэтому последний из блоков, в которые записан файл, буцет, скорее всего, заполнен не до конца. В этот блок в UFS можно записать фрагмент другого файла. В этом смысле "фрагментом" файла в UFS называется часть файла, меньшая по размеру чем блок. Фрагменты одного файла не могут храниться в разных блоках. Это иллюстрирует рис. 6.1. файл А блок 1 блок 2 файл Б блок .3 Рис. 6.1. Фрагментация в UFS Индексный дескриптор хранит достаточно информации для того, чтобы идентифицировать не только блок, но и номер фрагмента в блоке, когда речь идет о размещении файла на диске. Фрагментации в том смысле, в котором она мучает пользователей Windows, в файловой системе UFS не бывает, так как драйвер файловой системы сам заботится о том, чтобы размещать файл по-возможности в
пределах одного цилиндра. Чтобы выяснить, много ли фрагментов (в понимании UFS) на разделе, можно использовать команду fsck -п. Для уменьшения числа фрагментов (в понимании FAT), т.е. частей файла, записанных на разделе в разных цилиндрах вдали друг от друга, и для записи файла в последовательные блоки следует воспользоваться коммерческими программами дефрагментации (см., например, ссылка: http://www.eaglesoft.com/products.htrnl- только для платформы SPARC) или выполнить резервное копирование всех файлов раздела и обратное их восстановление посредством программ uf sdump / ufsrestore. Изменение размеров раздела Для изменения размеров раздела UFS можно воспользоваться программой growfs. Если же изменить размер раздела по какой-либо причине не представляется возможным, следует установить новый диск и перенести часть информации на него, возможно, создав соответствующие символические ссылки на переполненном разделе. Подробнее об изменении размеров разделов дисков и повышении их производительности сказано в лекции 7 курса "Администрирование ОС Solaris". Дерево каталогов Все файлы в UNIX организованы древовидно: всегда существует корневой каталог, который обозначается "/". В нем есть подкаталоги. Обычно используются подкаталоги, перечисленные в табл. 6.1. Каталог /bin в Solaris является символической ссылкой на каталог /usr/bin. Характерным свойством Solaris является выделение отдельного каталога /exports, в котором сосредотачиваются разделяемые по сети подкаталоги, доступные для пользователей других компьютеров. Каталог /opt, куца устанавливается некоторое дополнительное программное обеспечение (от optional, необязательное) тоже есть в системах Solaris, но отсутствует во многих других системах UNIX.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Таблица 6.1. Обычные подкаталоги корневого каталога Solaris 9 Irwxrwxrwx 1 root root 9 Янв 22 14:54 bin -> ,/usr/bin drwxr-xr-x 1 root root 16384 Янв 1 1970 boot drwxr-xr-x 2 root root 512 Янв 29 14:42 cdrom drwxr-xr-x 14 root sys 3584 Map 16 15:49 dev drwxr-xr-x 5 root sys 512 Янв 22 15:03 devices drwxr-xr-x 51 root sys 3584 Map 16 15:49 etc drwxr-xr-x 3 root other 512 Янв 28 17:38 exports drwxr-xr-x 3 root nobody 512 Янв 28 16:57 floppy dr-xr-xr-x 1 root root 1 Map 16 15:49 home drwxr-xr-x 12 root sys 512 Янв 22 14:56 kernel drwx 2 root root 8192 Янв 22 14:53 lost+found drwxr-xr-x 2 root sys 512 Янв 22 14:54 mnt drwxr-xr-x 3 root sys 512 Янв 22 15:48 opt dr-xr-xr-x 63 root root 30912 Map 16 15:52 proc drwxr-xr-x 2 root sys 1024 Янв 22 15:51 sbin drwxrwxrwt 6 root sys 368 Map 16 15:50 tmp drwxr-xr-x 34 root sys 1024 Янв 28 19:16 usr drwxr-xr-x 32 root sys 512 Янв 22 15:57 var Каталог для временных файлов /tmp монтируется в Solaris на отдельную виртуальную файловую систему типа tmpfs. Это особый тип файловой системы. Если в системе есть свободная оперативная память, то драйвер tmpfs хранит данные, записанные на файловую систему этого типа, в оперативной памяти, а не диске. Если объем свободной памяти сокращается и она начинает требоваться другим программам, файлы из tmpfs записываются на раздел свопинга. Получается, что файлы, размещенные в файловой системе типа tmpfs, всегда занимают остаток оперативной памяти системы, для того чтобы она использовалась эффективно. Если свободной памяти нет, tmpfs размещается в пространстве свопинга. Это автоматически приводит к тому, что записанные в файловую
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 систему tmpfs файлы теряются после перезагрузки. Поэтому не следует хранить в /tmp какие-либо полезные файлы. Скорость работы файловой системы tmpfs высока, т.к. часто все ее файлы физически расположены в оперативной памяти. Вследствие этого кэширование файлов на tmpfs не производится: они и так хранятся не на диске. Казалось бы, использование tmpfs таит в себе резерв увеличения производительности любого приложения, поскольку достаточно записать данные в каталог /tmp и работать с ними там, чтобы скорость доступа к данным возросла многократно. На самом деле это не так, потому что чтение и запись любых дисков кэшируется, и лишь для некоторых приложений использование tmpfs оправдано. Несомненно увеличивается быстродействие компиляторов и других программ с большими объемами промежуточных файлов - но они и так используют /tmp для хранения временной информации в процессе работы. По умолчанию Solaris применяет tmpfs только для /tmp. При этом система избегает существенного объема дискового ввода-вывода, так как /tmp используется для временных файлов различных программ. Внимание: создание отдельного раздела /tmp на диске приведет к тому что /tmp не буцет создан системой автоматически с типом файловой системы tmpfs и производительность системы может уменьшиться! Файлы и каталоги Типы файлов Если дать команду Is -1, то тип файла буцет указан первым символом первого столбца вывода: Is -1 /etc Irwxrwxrwx 1 root root 14 Янв 22 14:59 aliases -> ,/mail/aliases drwxr-xr-x 2 root bin 512 Янв 22 15:53 apache
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 -rw-r—г— 1 root root 12 Янв 23 08:35 defaultrouter - г—г—г— 1 root root 1825 Янв 22 15:42 device.tab - rw-r—г— 1 root sys 2467 Янв 22 15:02 devlink.tab drwxr-xr-x 2 root sys 512 Янв 22 14:54 dfs prw-------1 root root 0 Map 16 15:50 initpipe - rw-r—r— 1 root sys 1087 Янв 23 08:33 inittab Вывод команды 1 s для каталога /etc в этом примере сильно обрезан, на самом деле там несравнимо больше файлов. Нас интересуют различные типы файлов, которые мы здесь встретим. В системах UNIX файлы могут быть обычными (этому типу соответствует обозначение -), а также представлять собой каталог (d), файл символьного (с) или блочного (Ь) устройства, символьную ссылку на другой файл (1), программный канал (р). В Solaris есть еще специальный тип door (дверь), ассоциированный с набором потоков в системе и требуемый для программирования взаимодействия потоков. Обычный файл может содержать текст или двоичные данные - система не делает никаких предположений о содержимом файла в зависимости от его имени, в отличие от Windows-систем. Возможность запустить файл определяется исключительно правами доступа к файлу. Если вы попытаетесь запустить двоичный файл, система будет искать в нем корректный заголовок исполняемого кода. Если этот файл на самом деле не является программой UNIX, система просто сообщит об ошибке. При попытке выполнить текстовый файл он будет рассматриваться как скрипт командного процессора (если иное не указано в первой строке файла, где можно указать иной интерпретатор). Если файл не является скриптом, командный процессор завалит вас сообщениями об ошибках. Он будет выдавать не меньше одного ругательного сообщения на каждую строку Не пытайтесь запускать то, что не должно запускаться! Каталог представляет собой файл специального формата, содержащий имена файлов, которые лежат в этом каталоге, и номера их индексных дескрипторов. Подробнее об индексных дескрипторах рассказано в разделе "Индексные дескрипторы". Файлы символьных или блочных устройств - это файлы, которые располагаются в каталоге /dev или связанном с ним (см. лекцию 5). Обмен данными с символьным устройством (например, с терминалом)
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 идет посимвольно, с блочным (например, с диском) - поблочно. О символических^ ссылках будет рассказано ниже в разделе "Ссылки"; это - файлы специального типа, аналог ярлыка в Windows. Программный канал - это файл, образующийся в некоторых случаях при организации каналов связи между процессами. От администратора обычно не требуется никаких действий в отношении файлов типа р. В каталоге /etc мы видим обычные файлы, символические ссылки, каталоги и даже один программный канал. Файлы этих типов (за исключением файлов каналов) и составляют большинство в системе. Таким образом, в Solaris используются следующие типы файлов: d каталог (directory); D дверь (door); 1 символическая ссылка (symbolic link); b файл блочного устройства (block); с файл символического устройства, устройства прямого доступа (character); р специальный файл программного канала (FIFO, named pipe); s сокет; - обычный файл. Имена файлов и каталогов На имена файлов и каталогов распространяются одинаковые ограничения. Так, длина имени файла не должна превышать 255 символов, полное имя файла (т.е. путь от корня файловой системы до файла ) не должен быть длиннее 1023 символов.
Имена файлов и каталогов в UNIX состоят из латинских букв верхнего и нижнего регистра, цифр и знаков препинания. Регистр букв имеет значение! Буквы верхнего и нижнего регистра в UNIX считаются разными символами, имена Alliance и alliance - это разные имена, хотя и отличаются всего лишь регистром одной буквы. Из знаков препинания рекомендуется использовать только точку " .", тире " - "и подчеркивание "_ ". Использование других знаков (запятых, скобок, звездочки, решетки, вопросительного и восклицательного знаков и других) теоретически возможно, но неудобно. Дело в том, что командные процессоры и стандартные системные функции в UNIX интерпретируют такие знаки специальным образом (а именно, как шаблоны имен файлов или модификаторы команд в командном процессоре). Обращаться к файлу с именем , /?*&Лд- + | ! придется тоже специальным образом, а это быстро надоест. В UNIX не используется понятие "расширение имени файла ", так как точка считается равноправным символом в имени. Следовательно, имя severaLnews.from.New.York смотрится в UNIX не более экзотично, чем index.htmL UNIX не делает предположений о содержимом или назначении файла в зависимости от его имени и того, какие символы стоят справа от самой правой точки в имени. Для того чтобы узнать, что содержится в файле, не открывая его, можно использовать программу file: file bad.words English text Программа file использует специальный файл образцов - /etc/magic. Он содержит сведения о том, как должен выглядеть файл, чтобы его можно было отнести к какому-либо известному типу: текст (text), текст программы на языке С (С program), исполняемый код (executable file), данные (data) и т.д. Имя может быть полным (абсолютным) или относительным. Полное имя файла - это имя с указанием пути к файлу от корневого каталога, например, /usr/loca]/squid/etc/squid.conf. Полное имя легко идентифицировать: оно всегда начинается с символа " / ".
Относительное имя файла может быть очень коротким, например, просто £ Если в имени файла вообще нет знака " / " (слэш), то имя относится к файлу текущего каталога. Если слэш есть (но не в начале имени - например, squid/etc/squid.conf), то все, что находится слева от первого в имени слэша, расценивается как подкаталог текущего каталога. Полное имя любого файла не должно быть длиннее 1023 символов. Однако, для обращения к файлу, расположенному очень глубоко в структуре каталогов, следует перейти в промежуточный каталог командой cd и оттуда обратиться к файлу по относительному имени. Скажем, вместо vi/usr/home/ivan/projects/imited_states/texas/cowboys/horses/ red/seats/sellers_training можно обратиться к тому же файлу так: cd /usr/home/ivan/proj ects/united_states vi texas/cowboys/horses/red/seats/sellerstraining Кстати, обратите внимание на ввод многострочных команд: при необходимости перехода на другую строку при вводе длинной команды следует использовать символ экранирования (обратный слэш) " \ ". Следующий за ним символ перевода строки в таком случае будет интерпретирован как пустой символ, а не как символ завершения команды. Полное имя файла также называют "путем к файлу ", "путем файла " или "путевым именем файла ". Символ " ~ " (тильда) в большинстве командных интерпретаторов обозначает домашний каталог пользователя. Например, команда cd ~аппа/ требует перейти в домашний каталог пользователя anna, а знак " ~ " без имени пользователя означает домашний каталог текущего пользователя. Впрочем, интерпретатор sh знак ~ так не воспринимает, пользуйтесь bash!
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Действия с файлами и каталогами Обычный (regular) файл может содержать текст или двоичные данные. Создать текстовый файл можно в любом текстовом редакторе или перенаправив вывод какой-либо программы в файл. Часто для создания какого-нибудь тестового короткого файла так и делают. Например, после установки web-сервера можно проверить, корректно ли он откликается на внешний запрос, только если у нас уже есть файл index.htinl, который он должен выдать в ответ на запрос. Быстрее всего создать этот файл так: #cat > index.html <HTML> <BODY> Hello everybody! </BODY> </HTML> AD # Пустой файл можно создать командой touch, которая изначально была придумана для изменения времени модификации файла на текущее системное время: touch filename Эта операция бывает нужна при сборке программы из нескольких файлов, если мы хотим, чтобы были перекомпилированы все исходные тексты (по умолчанию компилируются только свежие). Файлы копируют командой ср: ср fflel ffle2 Переименование файла выполняет команда mv: mv filel ffle2
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Командой mv файл можно переместить в другой каталог: mv file /usr/progs/useless/ Если вы переносите или копируете файл или несколько файлов в каталог, то имя каталога правильнее указывать с завершающим слэшем в конце имени (например, /usr/progs/useless/). Это явным образом указывает на то, что имеется в виду именно каталог. Если произошла ошибка и последний аргумент команды оказался не каталогом, а файлом, программа сообщит об этом. Если слэш не указать, то в случае ошибки старое содержимое файла, в который копируется новая информация, будет безвозвратно утеряно. Файлы удаляют с помощью команды rm. В системах UNIX не предусмотрена возможность восстановления удаленных файлов (unerase), поэтому все, что стерто, пропадает навсегда. Системы UNIX в структуре файловой системы не имеют "мусорной корзины" (trash), в которую файлы попадают перед окончательным удалением. Правда, большинство графических сред обеспечивают такую "корзину", но только для тех файлов, которые были удалены программами, специально написанными с учетом этой возможности среды. Так, в Solaris в CDE есть своя корзина. В нее попадают те файлы и каталоги, которые были удалены программами, знающими об этой корзине. Как правило, о ее существовании подозревает только File Manager CDE. Возможность восстановления стертых файлов предоставляется не операционной системой, а графической оболочкой CDE, поэтому не стоит рассчитывать, что любой файл можно восстановить из корзины CDE. Например, если файл был удален командой rm из командной строки xterm (эмулятор тер минала для графической среды), то его уже не восстановить. Команда rm не знает о существовании корзины в CDE, даже если запускается в окне терминала в графическом режиме. Вывести файл на экран можно командами cat, more, less, pg, page. Программы cat и more есть в любой системе UNIX, другие перечисленные выше команды - это варианты команды more и присутствуют не всегда. Назначение more и ее "коллег" - поэкранный
вывод длинных файлов. При выводе информации программа more останавливается, заполнив экран содержимым очередной страницы файла, и ждет команды. При нажатии "Enter" выводится следующая строка, при нажатии "пробела" - следующая страница. Можно искать подстроку в тексте, по команде /подстрока Клавишами <Ctrl-B>, <Ctrl-F> можно перемещаться назад и вперед на одну страницу клавиша q служит для выхода из программы во время просмотра текста. Каталоги Слово " каталог " употребляется наряду со словом "директория" (directory). В терминологии большинства Windows-систем то же самое обозначает слово "папка" (folder). Среди системных администраторов UNIX принято употреблять термин " каталог ". Каталог представляет собой файл особого типа, который содержит таблицу из двух столбцов: в первом значится имя файла, во втором -номер индексного дескриптора, который описывает файл . В одном каталоге не может быть файлов или подкаталогов с одинаковыми именами. Каталог может содержать и файлы, и подкаталоги. Пустой каталог создается командой mkdir. Удалить пустой каталог можно командой rmdir, непустой каталог удаляется командой rm -rf каталог Например, по команде rm -rf Zusr/local/squid/ будут удалены каталог Zusr/local/squid, а также все файлы в нем и все его подкаталоги. Перенести или переименовать каталог можно командой mv, для
копирования каталогов вместе с подкаталогами используется команда ср -Rp. Список файлов и подкаталогов в каталоге выдает команда 1s. Если запустить 1s без параметров, она выдаст только список имен файлов. Эта команда имеет множество ключей, из которых наиболее полезны перечисленные в табл. 6.2. Таблица 6.2. Некоторые ключи программы 1s 1 (long) вывести полную информацию о файле , 11ч вывести все файлы, в том числе те, чьи имена начинаются с a (all) точки i (i- вывести номера индексных дескрипторов nodes) t (time) отсортировать файлы по времени последней модификации При создании каждого каталога в нем всегда появляются две записи - "." (точка) и (две точки). 'Точка" ссылается на сам текущий каталог, а "две точки" - на родительский каталог. В корневом каталоге обе эти записи указывают на корневой каталог. По умолчанию программа 1 s выводит информацию обо всех файлах, за исключением тех, чьи имена начинаются с символа "." (точка). При указании ключа - а эти файлы тоже включаются в общий список. Файлам, которые содержат важную конфигурационную или служебную информацию, традиционно дают имена, начинающиеся с символа 'Точка". Таковы, например, файлы, profile, .xsession, .bashrc, .history и Другие- Перейти из одного каталога в другой можно по команде cd каталог Команда cd без аргументов вызывает переход в домашний каталог текущего пользователя и эквивалентна cd ~. Вывод на экран полного имени текущего каталога выполняется
Торчинский Ф.И., Ильин Е.С. командой pwd. Ссылки В любой системе UNIX используются жесткие и символические ссылки. Жесткая ссылка - это ссылка на индексный дескриптор файла. В этом смысле имя файла и есть жесткая ссылка, причем у одного файла может быть несколько разных имен в разных каталогах. Это значит, что в разных каталогах могут быть записи, ссылающиеся на один и тот же файл и, следовательно, один и тот же индексный дескриптор. Этот файл будет доступен под всеми этими именами. Число жестких ссылок на файл хранится в его индексном дескрипторе: # 1s -К file* 16852 -rw-r—г— 2 root root 0 Mar 20 16:11 file 16852 -rw-r—г— 2 root root 0 Mar 20 16:11 fflel В этом примере видно, что в каталоге есть два файла с разными именами, но все остальные свойства у них одинаковы. Это обусловлено тем, что файлы имеют один и тот же индексный дескриптор (его номер выводится в первом столбце). Число в третьем столбце показывает, сколько в файловой системе есть жестких ссылок на этот файл. Физически файл один, так как местоположение содержимого файла на диске определяется индексным дескриптором. При этом можно обратиться к этому файлу, называя его разными именами. Фактически, после создания жесткой ссылки на файл определить, какое из имен было придумано раньше, невозможно. Права доступа ко всем жестким ссылкам на файл одинаковы, так как определяются одним и тем же индексным дескриптором. Смысл жесткой ссылки состоит в возможности поместить в разные каталоги записи об одном и том же файле, без многократного копирования этого файла во все каталоги, где нужна запись о нем. При модификации файла, независимо от того, через какую именно жесткую ссылку к нему обратились, изменяется информация в самом файле. Если модифицировать файл, обратившись к нему по одному имени (через одну жесткую ссылку ), и записать сделанные изменения, то при
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 последующем обращении к нему через другую жесткую ссылку вы увидите уже новую, модифицированную информацию. Жесткие ссылки создает команда 1 и: In старое_имя новое_имя При создании жесткой ссылки сам файл не модифицируется, старое имя никак не изменяется, результат выполнения команды проявляется только в создании еще одного имени этого файла. Нельзя создать жесткую ссылку на файл, который располагается на другом разделе UNIX. Это связано с тем, что каждый раздел файловой системы имеет свою таблицу индексных дескрипторов, а указать в каталоге индексный дескриптор чужого раздела невозможно. Также нельзя создать жесткую ссылку на любой каталог. Файл в любой файловой системе UNIX считается удаленным только тогда, когда удалены все жесткие ссылки на него, каление жесткой ссылки выполняется командой rm и внешне ничем не отличается от удаления обычного файла. Найти все жесткие ссылки на файл можно с помощью команды find: find откуда_искать -inuni номер_индексного_дескриптора_файла Например, find / -inum 168 52. Символическая ссылка - это запись в каталоге, ссылающаяся на файл с определенным именем. Фактически, символическая ссылка - это отдельный файл типа "символическая ссылка ", и индексный дескриптор этого файла содержит только путь к файлу или каталогу, на который указывает ссылка: 1s-1 Irwxrwxrwx 1 root root:. qq ->/usr/home/qq Можно создать символическую ссылку на любой каталог, а также на файл, находящийся в другом разделе UNIX. Символическая ссылка является аналогом ярлыка (shortcut) в системах Windows. При удалении
символической ссылки с файлом или каталогом, на который она ссылается, ничего не происходит. При удалении файла, на который указывает символическая ссылка, она "повисает в воздухе", ссылаясь на пустоту В последнем случае при обращении к такой "пустой" ссылке возникнет ошибка file not found, несмотря на то, что сама ссылка будет видна и доступна в списке файлов. Обычно по команде Is -1 выдается не только информация о типе файла 1, если это символическая ссылка, но и указывается, на что она ссылается. Если эта информация не появилась, попробуйте дать команду Is -F. В разных системах UNIX ключи программы 1s могут незначительно отличаться. Права доступа Давно известно, что в Москве раньше были две угнетаемые нации: "погазоны" и "улюки". Их никто никогда не видел, но всем было их очень жалко. Куда ни пойдешь, везде пестрели надписи: "Погазонам не ходить", "Машины улюков не ставить". В каждой многопользовательской системе полагается развешивать такие таблички по каталогам, чтобы доступ к информации имели только те, кому он разрешен. Система безопасности UNIX основана на правах доступа к объектам файловой системы - файлам и каталогам. У каждого каталога или файла есть один владелец и один групповой владелец. Группового владельца файла мы будем для краткости называть группой файла. Словосочетание "группа файла " не означает, что файлы объединены в какие-то группы. Группа файла - это группа пользователей, которой даны некие специальные права на доступ к этому файлу. Дав команду Is -1 в любом каталоге, мы увидим нечто вроде -rw-r— г— 1 root root 433 Feb 2 10:30 acd.c Первый столбец - это тип файла (первый символ) и права доступа (остальные девять символов). Затем указаны число жестких ссылок на
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 файл, владелец и группа файла, размер файла в байтах, дата последней модификации в формате "Месяц Число Год Время" и имя файла. Год часто не указывается для тех файлов, которые были модифицированы в течение последних 12 месяцев. Права доступа делятся на три части: права, данные, соответственно, владельцу файла, группе файла и всем остальным (обозначаются термином other или world). Таким образом, девять бит слова прав доступа делятся на три части по три бита: rwx | rw- | г—| u g о Часть, обозначенная буквой u (user), определяет права доступа владельца файла, буквой д - права доступа группы файла, буквой о -права всех остальных. Существуют права трех типов: на чтение ( г, read), запись ( w, write) и запуск на выполнение ( х, execute). Пользователю, который хочет обратиться к файлу, даются права доступа либо владельца, либо группы файла, либо "всех остальных". Права доступа проверяются так (см. рис. 6.2, на примере слова прав доступа rwxrw-r— ): Рис. 6.2. Алгоритм получения доступа к файлу Когда процесс, работающий от имени пользователя, пытается получить доступ к файлу, система выясняет, является ли он владельцем файла.
Если является, то он получает права доступа, определенные для владельца файла. Если он - не владелец, но входит в группу которая является группой файла, то он получает права доступа, определенные для группы файла. Если он не относится ни к одной из этих двух категорий, он получает права, определенные для всех остальных. Права разных категорий пользователей не складываются: если доступ к файлу хочет получить его владелец, и он входит в группу файла, но права группы более широкие, чем права владельца (например, слово прав доступа r-xrwxr-- ), то он все равно получит права владельца (в последнем примере - г-х ). Для большинства файлов и каталогов права их владельца обычно шире, чем у группы. Слово прав доступа представляет собой последовательность из двенадцати бит. Для назначения прав доступа обычно используются только обсужденные выше младшие девять бит, поэтому права доступа часто записываются в виде трех десятичных чисел, показывающих права владельца, группы и всех остальных соответственно. Установленный в единицу бит говорит о наличии соответствующего права: • мнемоническое обозначение слова прав доступа: rwxrw-r-- • двоичное представление слова прав доступа: 111 110 100 • десятичное представление слова прав доступа: 7 6 4 В документации часто встречается требование при установке какой-либо программы установить для некоего каталога права доступа 7 55. Имеются в виду права rwxr-xr-x, что соответствует полному доступу владельцу и доступу на чтение и запуск группе и всем остальным. Право запуска в отношении каталога определяется как право поиска в каталоге, что на практике означает право на чтение индексных дескрипторов файлов и подкаталогов этого каталога. Действительно, возможность узнать, какие именно файлы есть в каталоге, определяется правом на чтение каталога. А вот более подробная информация о файлах (кто их хозяин, где лежат и т.п.) доступна только тем, кто имеет право на поиск в каталоге. Наличие или отсутствие права поиска в каталоге не влияет на права пользователя root: ему разрешен поиск в любом каталоге.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Старшие три бита слова прав доступа относятся к запуску файла, поэтому детально они рассмотрены в лекции 7. Вот как выглядит слово прав доступа: susgt г w х г w х г w х Старшие три бита - это бит установки владельца при запуске файла (suid), бит установки группы (sgid) при запуске файла и бит запрета выгрузки файла на диск при выполнении (t). Для каталога биты suid и sgid имеют другое значение. По умолчанию при создании файла он наследует владельца и группу от процесса, который его создал. Аналогичное правило распространяется и на каталоги. Однако если в правах доступа к каталогу установлен бит suid, то созданный в нем файл или подкаталог будет принадлежать не владельцу по умолчанию, а владельцу каталога с битом suid. Это правило не работает для систем Solaris, хотя справедливо для некоторых других систем UNIX. В Solaris это правило распространяется только на группу файла, но не на владельца. То есть владельцем нового файла будет владелец создавшего его процесса, независимо от наличия бита suid у каталога, где создан файл. Но если каталог имеет установленный бит sgid, то группой нового файла станет группа процесса-создателя. Бит запрета выгрузки файла на диск при выполнении (sticky bit) в старых версиях UNIX использовался для указания того, что при выполнении программы, записанной в этом файле, ее страницы запрещено выгружать на диск. В настоящее время sticky bit используется для каталогов, с тем, чтобы указать особые условия удаления файлов из каталога. Если sticky bit установлен для каталога, то все пользователи, кроме root, могут удалять из каталога только те файлы, которые им принадлежат, независимо от прав доступа к каталогу. В разных системах UNIX он может интерпретироваться по-разному, поэтому смотрите для уточнений man s ti ску и man chmod. Индексные дескрипторы Формат таблицы индексных дескрипторов и самих дескрипторов
обсуждался в лекции 5. Следует сказать, что непосредственное изменение индексного дескриптора невозможно, так как модификацию дескриптора выполняют различные программы в процессе своей работы. Нет необходимости вмешиваться в содержимое индексного дескриптора напрямую. Для восстановления таблицы индексных дескрипторов после сбоя следует воспользоваться программой f sc к. Списки ACL Стандартные права доступа в UNIX не всегда идеальным образом подходят для решения задач администрирования системы. Например, что сделает администратор, если доступ к файлу на чтение и запись надо дать одной группе пользователей? Конечно, сделает эту группу владелицей файла, а затем делегирует право чтения и записи файла этой группе, вот так: chgrp нужная_группа файл climod g=rw файл А если надо дать право доступа только одному из членов этой группы? Тогда можно создать новую группу специально для этой цели, сделать ее членом только одного пользователя, и затем указать, что эта новая группа будет владеть файлом: addgroup новая_группа chgrp новая_группа файл climod g=rw файл #редактируем /etc/group и добавляем в новую группу существующего пользователя vi /etc/group Такое ухищрение нам помогло, но что делать, если надо дать право чтения, записи и запуска двум разным пользователям, а еще двум -право чтения и записи, а еще одному - только чтения? А всем остальным - вообще не дать доступ к этому файлу? На такой вопрос нет ответа, если вы работаете в "классической" версии UNIX. Однако некоторые современные системы UNIX (например, Solaris, Linux и FreeBSD) обладают требуемым механизмом. Это - списки управления доступом к файловой системе, access control lists (ACLs).
Списки управления доступом дают более гибкие возможности назначения прав доступа, чем традиционные права доступа UNIX. С помощью ACL можно назначить как права доступа хозяина файла, группы файла и всех остальных, так и отдельные права для указанных пользователей и групп, а также максимальные права доступа по умолчанию, которые разрешено иметь любому пользователю. Здесь и далее мы будем называть ACL для файлов и каталогов "расширенными правами доступа ". Расширенные права доступа к файлам и каталогам устанавливаются командой s е t f ас1. Они представляют собой ряд полей, разделенных двоеточиями: entry_type:[uid|gid]:perms Здесь entry_type - тип расширенного права доступа, uid и gid -идентификаторы пользователя и группы, соответственно, a perms -собственно назначаемые права доступа. Расширенные права доступа (ACL) к файлам Расширенные права доступа к файлу могут быть такими, как показано в таблице 6.3. Таблица 6.3. Расширенные права доступа к файлам u [ ser] : :perms g[roup]::perms о[ther]:perms m [ ask] :perms права доступа хозяина файла права доступа группы файла права всех остальных маска ACL права доступа указанного пользователя; в u[ser]:uid:perms качестве uid можно указать и UID, и имя пользователя права доступа указанной группы: в качестве g[roup]:gid:perms gid можно указать и GID, и имя группы Маска задает максимальные права доступа для всех пользователей, за
исключением хозяина и групп. Установка маски представляет собой самый быстрый путь изменить фактические (эффективные) права доступа всех пользователей и групп. Например, маска г-- показывает, что пользователи и группы не могут иметь больших прав, чем просто чтение, даже если им назначены права доступа на чтение и запись. Расширенные права доступа (ACL) к каталогам d[efault]:u[ser]::perms d[efault]:g[roup]::perms d[efault]:o[ther]:perms d[efault]:m[ask]:perms dfefault]:u[ser]:uid:perms Кроме расширенных прав доступа к файлу, которые могут быть назначены и каталогу, существуют специфические права доступа к каталогу, а именно права доступа по умолчанию. Файлы и подкаталоги, которые буцут создаваться в этом каталоге, буцут получать такие же расширенные права доступа по умолчанию, которые заданы в расширенных правах доступа к этому каталогу. Таблица 6.4. Расширенные права доступа к каталогам права хозяина файла по умолчанию права группы файла по умолчанию права остальных пользователей по умолчанию маска ACL по умолчанию права доступа по умолчанию для указанного пользователя; в качестве uid можно указать и UID, и имя пользователя права доступа по умолчанию для указанной группы; в d[efault]:g[roup]:gid:perms качестве gid можно указать и GID, и имя группы Устанавливая права доступа по умолчанию для конкретных пользователей и групп, необходимо также установить права доступа по умолчанию для хозяина и группы файла, а также всех остальных, а также маску ACL (эти четыре обязательных записи указаны выше по
Присвоение расширенных прав доступа осуществляется программой setfacl с ключом -s (set). Без этого ключа расширенные права доступа модифицируются, с ним - устанавливаются в точности такими, как указано в данной команде setfacl. Например, чтобы установить права на чтение и запись файла project07 для пользователей lena и petr, надлежит выполнить команду setfacl -m userlena:rw-,user:petr:rw- project07 Ключ -m служит для добавления прав доступа, а не для их замены. Эффективные (т.е. те, которые в самом деле буцут иметь место) права доступа пользователей lena и petr определяются не только их персональными правами доступа к этому файлу, но и маской, которая показывает права доступа по умолчанию. Из персональных прав и маски выбираются наиболее строгие ограничения, поэтому если в персональных правах доступа или в маске для файла project07 отсутствует право на запись, то ни lena, ни petr не получат реальной возможности изменить файл project07. Расширенные права доступа не показываются в выводе программы 1s, но команда Is -1 позволяет установить наличие расширенных прав доступа к файлу или каталогу. Если они назначены, то в первой колонке после стандартных прав доступа владельца, группы файла и остальных буцет стоять знак " + " ("плюс"). Узнать, какие именно расширенные права доступа назначены, можно с помощью команды getfacl имя_файла Более подробную информацию о ключах setfacl и getfacl следует получить из man. Помните, что назначение прав доступа с помощью chmod может привести к изменению записей ACL, а изменение маски ACL может повлиять на фактические права доступа к объекту для его владельца, группы и всех остальных пользователей.
1. Создайте файл. Установите расширенные права доступа к нему командой setfacl-m Liser:userlxw-,user:user2:rw- имя_файла Используйте вместо userl и user 2 имена реальных пользователей вашей системы, вместо имя_файла - имя любого существующего файла в вашей системе. 2. Проверьте командой 1 s -1 права доступа к файлу. 3. Проверьте командой getfacl имя_файла права доступа к файлу. 4. Канавы эффективные права доступа к файлу? Измените маску с помощью setfacl или права доступа хозяина, группы или остальных пользователей командой chmod. 5. Оцените, какое действие - установка маски ACL или прав доступа с помощью chmod действительно изменяет эффективные права доступа к файлу для пользователей userl и user 2. 6. Выполните переход в домашний каталог командой cd Выполнилась ли команда? Если нет, то почему? Какой командный интерпретатор вы используете? Попробуйте выполнить то же действие командой cd без параметров. Ц См. "минимальное свободное пространство ". 2) Иногда символические ссылки по недосмотру называют "символьными", и автор просит прощения, если подобный недосмотр вы обнаружите в этом тексте. По-английски они называются symbolic links, что корректно переводить как "символические ссылки "
Лекция описывает процессы в Solaris, представление процессов на уровне ядра, управление ими и утилиты мониторинга процессов. Замечание о совместимости утилит Несмотря на то что Solaris удовлетворяет многочисленным стандартам, некоторые программы в системе (точнее, их возможности и ключи) расходятся со стандартом XPG4. Этот стандарт (Hie X/Open Portability Guide, Issue 4 - XPG4) представляет собой спецификацию, описывающую программы, заголовки и интерфейсы. В частности, описывается ожидаемое поведение ряда программ UNIX и их ключи. Что находится в каталоге /usr/bin/xpg4 В тех случаях, когда поведение и ключи программ Solaris расходились со спецификацией XPG4, изначальная версия программы под Solaris не изменялась, вместо этого программа, совместимая с XPG4 с примерно такими же функциональными особенностями и точно таким же именем, помещалась в каталог /usr/хрд4 /bin. Таким образом, для того, чтобы выбрать, какие программы - оригинальные или XPG4-совместимые вы предпочитаете использовать в своей системе, достаточно указать первым в переменной среды окружения PATH тот каталог, в котором лежат нужные вам "по умолчанию" программы. Если первым указан каталог /usr/bin, то при вызове команды по ее короткому имени, например, grep, а не по полному имени файла, например, /usr/xpg4 /bin/grep, будет вызываться /usr/bin/grep - оригинальная программа. Если указать в PATH первым /usr/хрд4/bin, то буцет запускаться ХРС4-совместимая версия. Помните, что оригинальные программы могут располагаться также в /bin, /usr/ ucb и /usr/ccs/bin. Спецификация XPG4 включает в себя спецификации программ из IEEE Std 1003.2-1992 и IEEE Std 1003.2а-1992 (которые вместе носят название POSIX 2).
Процессы делятся на процессы ядра и на все остальные процессы (последние называются пользовательскими процессами ). Пользовательский процесс не обязательно запущен неким пользователем, то, что он - "пользовательский", означает лишь, что он не принадлежит ядру Само ядро Solaris представляет собой множество потоков (threads), которые выполняются параллельно. Действительно, у ядра много разных дел, было бы странно, если бы ядро пыталось все делать последовательно, а не параллельно. Термин threads часто переводят как "нить", но мы будем говорить в контексте управления процессами именно о "потоках", понимая под этим "потоки команд", в отличие от "потоков данных", которые будут рассмотрены ниже. Потоки ядра чрезвычайно "легковесные", они обладают лишь маленькими сегментом данных и стэком. Передача управления от одного потока ядра другому не требует изменения базовых адресов виртуальной памяти. Каждый поток ядра имеет свой приоритет и может относиться к определенному классу потоков, в том числе и к классу потоков "реального времени". Solaris реализует многоуровневую поточную модель. Ее назначение -разделить управление потоками пользовательского уровня и работу ядра. Потоки пользовательского уровня имеют свою схему приоритетов. Их планирование проводится с помощью потока-планировщика. Такой поток создается библиотекой потоков, когда многопоточное приложение компилируется и выполняется. Внутри одного пользовательского процесса могут работать свои потоки, передача управления между которыми осуществляется внутренним планировщиком этого процесса. Благодаря этому многопоточные приложения могут порождать тысячи потоков без существенной загрузки ядра. Оно буцет видеть это приложение как один процесс. По сути, ядро не видит пользовательские потоки, пока они не присоединяются к легковесному процессу (lightweight process, LWP), имеющему определенное положение в операционной системе. Поток-планировщик отвечает за отображение пользовательских потоков в легковесный процесс (LWP), который связан с потоком ядра для
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 выполнения процессором. Каждый LWP имеет поток ядра, но необязательно каждый поток ядра имеет LWP. Часть потоков ядра задействованы исключительно операционной системой, поэтому LWP здесь не требуется. Свойства процесса Каждый процесс имеет уникальный идентификатор, владельца и группу представленные эффективным идентификатором пользователя и эффективным идентификатором группы, реальных владельца и группу класс планирования и приоритет. Процесс всегда претендует на процессорное время и определенный объем оперативной памяти, которые требуются для успешной работы процесса. Рис. 7.1. Взаимоотношения процессов в многопотоковой архитектуре Идентификаторы процесса Процесс всегда имеет свой уникальный номер - PID (process ID). PID -это целое число в диапазоне допустимых целых чисел (для 32-разрядных систем - от 0 до 65535). Процесс с номером 0 - это обычно процесс свопинга, фактически являющийся частью кода ядра. Процесс с
номером 1 - это всегда init, процесс, который порождает все остальные процессы в системе при ее старте. У всех процессов, кроме init, есть родительский процесс, и каждому процессу, кроме его собственного идентификатора PID, соответствует идентификатор родительского процесса (PPID - parent process ID). В таблице процессов, кроме идентификаторов PID и PPID, хранятся eUID (effective UID - эффективный идентификатор пользователя) владельца процесса и eGID (effective GID - эффективный идентификатор группы) группы процесса. Фактические (реальные) владелец и группа процесса - это пользователь и группа, которые запустили процесс, а эффективные владелец и группа процесса - это те, от имени которых запущен процесс. Для определения прав доступа используются эффективные идентификаторы, а для задач управления процессом (например, посылки сигнала процессам, которые запустил определенный пользователь, см. описание команды pkill ниже) -реальные. Эти идентификаторы передаются по наследству от родительского процесса дочернему Передача этих идентификаторов для пользовательских процессов организована следующим образом. При входе пользователя в систему для него запускается командный процессор, этот запуск программа login обеспечивает от имени входящего пользователя. Группой процесса этого командного процессора назначается главная группа пользователя, вошедшего в систему Любой процесс относится к какой-либо терминальной группе, т.е. группе процессов, запущеных с одного терминала. Терминал определяется параметром ТТ YID. Процесс имеет базовый и динамический приоритеты, в зависимости от приоритета запросы процесса к системе выполняются медленнее или быстрее. Получить полный список процессов в системе с выводом их идентификаторов и ряда других параметров можно с помощью команды ps -ef.
Во многих системах UNIX процесс имеет базовый приоритет ( NICE ) и динамический приоритет ( PRI ). Базовый приоритет может принимать значение от -20 до +20. Чем меньше числовое значение базового приоритета NICE, тем выше приоритет. Процесс с отрицательным приоритетом -20 - самый высокоприоритетный. Динамический приоритет вычисляется планировщикам задач на основе базового приоритета по формуле, в которую входит общее потребленное процессом процессорное время. Чтобы дать возможность выполняться новым и более коротким процессам, динамический приоритет снижается с увеличением потребленного процессом времени процессора. В Solaris применяется более сложная схема планирования приоритетов процессов, которая описывается ниже. Для процессов одного из классов планирования (с разделением времени) справедлива вышеописанная простая схема из базового и динамического приоритетов. Каждый процесс может быть представлен одним или несколькими потоками ядра. С точки зрения ядра, объектом назначения того или иного приоритета является поток ядра. Если процесс сопоставлен только одному потоку ядра, то приоритет процесса и приоритет этого потока ядра - это одно и то же. Приоритет базируется на классе планирования (scheduling class); всего различают четыре класса планирования: с разделением времени (timesharing), системный (system), реального времени (real-time) и планирование на основе справедливого раздела (fair Class scheduling, FCS). У процессов разных классов планирования свои уровни приоритета и свои очереди на выполнение. Стало быть, в системе мы имеем четыре очереди к процессору Внутри каждого класса процессы, стоящие в очереди, имеют свои уровни приоритета. Эти уровни отображаются в глобальные приоритеты планирования (global scheduling priorities). Первым процессор займет процесс, который имеет наивысший глобальный приоритет. По умолчанию, процесс из класса планирования с разделением времени имеет более низкий глобальный приоритет, чем процесс из системного класса, а тот, в свою очередь,
Процесс получает свой класс планирования и приоритет в наследство от процесса-родителя. Изменить класс планирования можно либо с помощью команды priocntl, либо посредством одноименного системного вызова. Получить информацию о текущих классах планирования процессов можно с помощью команды dispadmin. Среда окружения Каждый процесс имеет свою среду окружения - специальную область, в которой хранятся имена переменных и их значения. Среда окружения используется для модификации поведения процесса ; так, в зависимости от значения переменной TERM текстовый редактор будет выдавать разные коды управления экраном, поскольку переменная TERM используется для задания типа терминала. Переменные среды окружения могут быть помечены как экспортируемые, это означает, что такую переменную дочерний процесс унаследует от процесса-родителя. Такие переменные, как TERM, PATH, USER обычно являются экспортируемыми. Из командной строки пометить переменную как экспортируемую можно с помощью команды export: export TERM PATH К переменным среды окружения легко обратиться из прикладной программы на языке С - для этого предусмотрен специальный массив строк: char *env[] Аргументы Каждый процесс при запуске может получить один или несколько аргументов. К аргументам можно обращаться так же, как и к переменным среды окружения, через массив строк:
char *argv[] Число аргументов обязательно передается в каждый процесс в переменной: int argc Классы планирования В Solaris 9 есть шесть классов планирования: с разделением времени (timesharing, TS), интерактивный (interactive, IA), системный (system, SYS), реального времени (real-time, RT),c фиксированным приоритетом (fixed priority, FX) и планирование на основе справедливого раздела (fair share scheduling, FSS). Таблица 7.1. Соотношение глобальных и относительных приоритетов Диапазон глобальных Очередь планирования приоритетов 159-100 99-60 59-0 Процессы реального времени (0-59) Системные процессы Приоритеты процессов с разделением времени (0-59) По умолчанию процессы попадают в класс с разделением времени. С помощью команды ps -cl можно узнать глобальные приоритеты запущенных в данный момент процессов, а "внутренние" приоритеты процессов в разных классах планирования - с помощью команды dispadmin. Планирование процессов реального времени Планирование в реальном времени относится к средствам, с помощью которых процессу по мере необходимости обеспечивается квант
процессора. Такая схема характерна для некоторых типов приложений, например, в робототехнике или управлении полетом. Вообще, поддержка планирования в реальном времени важна там, где требуется гарантированное время реакции системы на внешнее событие: в системах управления технологическими процессами, военных системах, коммуникационных системах и т.п. При написании приложения, которое управляет ракетой, заслонкой дозатора краски или даже простым видеотелефоном, приходится гарантировать время его реакции на прерывание, вызванное внешним событием, чтобы обеспечить разумное поведение приложения. Может выйти накладка, если ракета пролетит мимо цели, краски в крем для торта выльется больше, чем сливок, а изображения разных частей лица на видеофоне не будут синхронизированы во времени. Существуют три варианта планирования процессов реального времени: его поддержки нет совсем, существует строгая поддержка реального времени (для приложений соблюдаются все предельные сроки) и выполняется нестрогая поддержка реального времени (предельные сроки могут быть пропущены, но поддерживается статистический минимум). Solaris - это среда с нестрогой поддержкой реального времени. А потому для управления ракетой она может и не подойти -это зависит от алгоритма управления. Поддержка статистического минимума означает, что ракета может пролететь мимо, но зато вернется (если ее не собьют раньше или не закончится топливо). В нестрогой среде реального времени период реакции должен иметь гарантированную конечную продолжительность (например, верхний предел времени, за которое приложение должно освободить процессор; в Solaris такой период составляет 5 миллисекунд). В большинстве систем UNIX поддержки реального времени нет. Это связано с тем, что: • "промахи" обращения к памяти из-за отсутствия страниц в оперативной памяти могут вызвать непредсказуемую задержку вследствие необходимости подгрузить требуемую страницу в память из swap-раздела; • хотя ядро является выгружаемым (preemptable) - т.е. оно может быть смещено из процессора при запуске другого процесса, - в
некоторых ситуациях все же не допускается выгрузка ядра из процессора, например, при обработке прерывания; элементы кода, которые не могут быть выгружены из процессора во время выполнения, называются ''точками невыгружаемости" (nonpreemption points). Решение первой из этих проблем в Solaris состоит в том, что все страницы процесса реального времени в памяти блокируются и их выгрузка на диск запрещается. Вторая проблема решается за счет того, что ядро Solaris - многопотоковое, обработчики прерываний реализованы как отдельные потоки, что делает возможным установить для них отдельный приоритет ; более того, в Solaris есть возможность priority lending - "одалживание приоритета ". Это означает, что когда более приоритетный процесс нуждается в результатах работы менее приоритетного процесса, он может "одолжить" последнему на время свой высокий приоритет для выполнения требуемой задачи. Диспетчер Когда поток готов к выполнению, он помещается в очередь отправки на выполнение. Каждый процессор (в многопроцессорной системе) имеет отдельный набор очередей отправки. Состояние ожидания в очереди отправки называется состоянием выполнения (RUN). Когда процессор освобождается, диспетчер берет поток с наивысшим приоритетом из очереди отправки этого процессора и помещает его в процессор. Теперь поток в состоянии "внутри процессора" (ONPROC) и может выполнять вычисления. Поток может лишиться процессорного времени и покинуть процессор по нескольким причинам: • поток занимает процессор, пока не закончится отведенный ему период времени (определяемый приоритетом потока). Такой период называется квантом. Поскольку процессы с большим приоритетом выбираются чаще, то квант обычно обратно пропорционален приоритету ( процессы с более высоким приоритетом имеют меньшие кванты). Когда квант исчерпан, потоку присваивается приоритет нового уровня (значение tqexp
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 ). Такой уровень почти всегда ниже приоритета потока при старте. Это сделано для обеспечения справедливости при планировании; • поток ждет завершения ввода-вывода или разблокировки нужного ему ресурса, тогда он переходит в состояние "сна" (SLEEP). Проснувшимся потокам назначается более высокий приоритет, чем у них был до сна, чтобы они могли "наверстать упущенное"; • ядро прервало поток; если прерванный поток долго ожидает внимания процессора, то его приоритет повышается до значения Iwait. Так потоки компенсируют ожидание в очереди после прерывания. Проверка приоритета процесса Выяснить, с каким легковесным процессом ассоциирован конкретный процесс и какой класс планирования ему назначен, можно с помощью команды р s и ключей - L и - с: /usr/bin/ps -efcL UID PID PPID LWP NLWP CLS PRI STIME TTYLTIME C root 0 0 1 1 SYS 96 00:23:03 ? 0:03 sched root 1 0 1 1 TS 59 00:23:03 ? 0:00 /etc/init - root 2 0 1 1 SYS 98 00:23:03 ? 0:00 pageout root 3 0 1 1 SYS 60 00:23:03 ? 0:00 fcflush root 314 1 1 1 TS 59 00:23:35 ? 0:00 /usr/lib/safcsac -t 300 root 289 1 1 1 TS 59 00:23:32 ? 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf root 182 1 1 3 TS 59 00:23:22 ? 0:00 /usr/lib/autofc /automountd root 182 1 2 3 TS 59 00:23:23 ? 0:00 /usr/lib/autofc /automountd root 182 1 3 3 TS 59 00:25:23 ? 0:00 /usr/lib/autofc /automountd root 207 1 3 18 TS 59 00:23:25 ? 0:00 /usr/sbin/nscd root 207 1 4 18 TS 59 00:23:25 ? 0:00 /usr/sbin/nscd root 207 1 5 18 TS 59 00:23:25 ? 0:00 /usr/sbin/nscd root 207 1 6 18 TS 59 00:23:25 ? 0:00 /usr/sbin/nscd
Торчинский Ф.И. ., Ильин E.C. Организация UNIX-систем и ОС Solaris 9 root 207 1 7 18 TS 59 00:23:25 ? 0:00 Zusr/sbin/nscd root 207 1 8 18 TS 59 00:23:25 ? 0:00 Zusr/sbin/nscd root 207 1 9 18 TS 59 00:23:25 ? 0:00 /usr/sbin/nscd root 193 1 11 13 TS 59 00:23:24 ? 0:00/usr/sbin/syslogd root 193 1 12 13 TS 59 00:23:24 ? 0:00 /usr/sbin/syslogd root 193 1 13 13 TS 59 00:23:26 ? 0:00 /usr/sbin/syslogd root 439 419 1 1 IA 39 00:24:42 pts/4 0:00 bash Пример 7.1. Результат работы команды ps с ключами -L и -с Вывод этой команды здесь сильно сокращен: процессов в системе на самом деле всегда значительно больше. Сейчас нам интересны прежде всего колонки LWP, CLS и PRI, в которых показаны номер легковесного процесса, класс планирования и глобальный приоритет соответственно. Чем больше числовое значение глобального приоритета (значение PRI), тем выше глобальный приоритет процесса. Мы видим, что многопоточные процессы (например, демон автомонтирования /usr/lib/autof s/automountd и демон протоколирования /usr/sbin/syslogd ) могут одновременно иметь несколько LWP (в колонке NLWP указано количество LWP, с которыми ассоциирован процесс). Настройка таблиц диспетчера Таблицы диспетчера можно настроить с помощью команды dispadmin. Настройка выполняется следующим образом: вначале таблица диспетчера конкретного класса выводится в файл, затем файл редактируется в текстовом редакторе и загружается обратно в таблицу диспетчера. Вывод и загрузка таблицы осуществляется с помощью программы dispadmin. Чтобы узнать, какие классы доступны для редактирования, следует запустить dispadmin с ключом -1 и определить активные классы планирования:
Торчинский Ф.И., Ильин Е.С. dispadmiii -1 CONFIGURED CLASSES == SYS (System Class) TS (Time Sharing) FX (Fixed Priority) IA (Interactive) RT (Real Time) Далее выводим таблицу диспетчера для выбранного класса (попробуем это на классе планирования с разделением времени - TS ): dispadmiii -с TS -g # Типе Sharing Dispatcher Configuration RES=1000 ts_quantum ts_tqexp ts_slpret ts_maxwait ts_lwait PRIORITY 200 0 50 0 50 # 0 200 0 50 0 50 # 1 200 0 50 0 50 # 2 200 0 50 0 50 # 3 200 0 50 0 50 # 4 200 0 50 0 50 # 5 200 0 50 0 50 # 6 200 0 50 0 50 # 7 200 0 50 0 50 # 8 200 0 50 0 50 # 9 160 0 51 0 51 # 10 160 1 51 0 51 # 11 160 2 51 0 51 # 12 160 3 51 0 51 # 13 160 4 51 0 51 # 14 160 5 51 0 51 # 15 160 6 51 0 51 # 16 160 7 51 0 51 # 17 160 8 51 0 51 # 18 160 9 51 0 51 # 19 120 10 52 0 52 # 20 120 11 52 0 52 # 21 120 12 52 0 52 # 22
Торчинский Ф.И Ильин Е.С. 120 13 52 0 52 # 23 120 14 52 0 52 # 24 120 15 52 0 52 # 25 120 16 52 0 52 # 26 120 17 52 0 52 # 27 120 18 52 0 52 # 28 120 19 52 0 52 # 29 80 20 53 0 53 # 30 80 21 53 0 53 # 31 80 22 53 0 53 # 32 80 23 53 0 53 # 33 80 24 53 0 53 # 34 80 25 54 0 54 # 35 80 26 54 0 54 # 36 80 27 54 0 54 # 37 80 28 54 0 54 # 38 80 29 54 0 54 # 39 40 30 55 0 55 # 40 40 31 55 0 55 # 41 40 32 55 0 55 # 42 40 33 55 0 55 # 43 40 34 55 0 55 # 44 40 35 56 0 56 # 45 40 36 57 0 57 # 46 40 37 58 0 58 # 47 40 38 58 0 58 # 48 40 39 58 0 59 # 49 40 40 58 0 59 # 50 40 41 58 0 59 # 51 40 42 58 0 59 # 52 40 43 58 0 59 # 53 40 44 58 0 59 # 54 40 45 58 0 59 # 55 40 46 58 0 59 # 56 40 47 58 0 59 # 57 40 48 58 0 59 # 58 20 49 59 32000 59 # 59 Пример 7.2. Результат работы команды dispadmin -с TS -д
Первая строка, в которой указано значение RES, определяет, в чем измеряется время во всей таблице приоритетов данного класса. Величина RES фактически задает дискретность измерения времени для столбца ts_quantum таблицы диспетчера. Ее значение по умолчанию - 1000. Изменять дискретность не рекомендуется. Обратная к RES величина равна 0,001, и это интерпретируется как одна тысячная секунды, т.е. одна миллисекунда. Стало быть, по умолчанию время в столбце ts_quantum измеряется в миллисекундах. Как было показано в разделе "Диспетчер" выше, смысл значений, приведенных в столбцах таблицы диспетчера, следующий: • ts_quantum представляет собой максимальный период времени (квант), в течение которого поток может оставаться в процессоре до того, как диспетчер изменит его приоритет ; • ts_tqexp задает приоритет, который буцет назначен потоку после того, как истечет его квант времени и он буцет удален из процессора; • ts_slpret указывает приоритет, который буцет иметь процесс, когда он буцет обрабатываться после "сна", т.е. после ожидания завершения ввода-вывода или когда он дождется снятия блокировки с требуемого ему ресурса; • ts_maxwait указывает время в секундах, которое процесс буцет оставаться в очереди, в случае, если его квант времени еще не истек; если он не использует свой квант времени в течение этого числа секунд, ему буцет присвоен новый приоритет ts_lswait. Если ts_maxwait равно нулю, то принимается значение по умолчанию (одна секунда); • ts_lswait обозначает присваиваемый процессу приоритет, когда процесс на долгое время был вытеснен из процессора. В таблицах диспетчера указываются относительные приоритеты (которые имеют силу внутри класса планирования ). Глобальный (иначе говоря - абсолютный) приоритет вычисляется из относительного в соответствии с табл. 7.1. Обратите внимание на то, что более высокоприоритетные процессы имеют меньшие кванты времени. Значение maxwait для самого
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 высокого приоритета, 59, настолько высоко, что ему придется ждать более других, если он лишится процессорного времени в пользу ядра (ядро имеет более высокий приоритет, чем любой процесс разделения времени). Посмотрим, как работает эта схема динамического назначения приоритетов. Предположим, процесс начал выполняться с приоритетом 0. Подождав, пока ему дадут управление в течение одной секунды ( ts_maxwait ), процесс получил новый приоритет 50 (ts_lwait). Вместе с новым приоритетом процесс обрел новое значение кванта (меньшее, так как чем выше приоритет, тем меньше квант, чтобы высокоприоритетные задачи не забивали процессор). Вместо прежних 200 миллисекунд процесс получил квант в 40 миллисекунд. Зато с этим приоритетом процесс получил возможность вытеснять из процессора менее приоритетные процессы. Если процесс продолжает постоянно использовать процессорное время, не отвлекаясь на ввод-вывод (например, это вычислительный процесс программы моделирования полета ракеты), то по истечении кванта времени он получит новый приоритет 40 (ts_tqexp ). Дальнейшие назначения приоритетов показаны ниже: приоритет квант 40 40 30 80 20 120 10 160 0 200 50 40 40 40 30 80 и т.д. и т.д. Такая схема динамического назначения приоритетов позволяет быстро выполниться коротким высокоприоритетным процессам и дает
возможность работать низкоприоритетным процессам. В то же время, процессы, постоянно потребляющие процессорное время, перемещаются к более низким приоритетам, получают большие кванты времени и будут больше времени проводить с низким приоритетом. Если же низкоприоритетный поток будет постоянно прерываться более высокоприоритетными, то его приоритет будет быстро повышен, как только пойдет ts_maxwait секунд. Фактически, это означает, что в сильно загруженной высокоприоритетными потоками системе низкоприоритетный поток через секунду буцет становиться высокоприоритетным. Класс реального времени ( RT ) описывается более простой таблицей диспетчера: # Real Time Dispatcher Configuration RES=1000 TIME QUANTUM(rt_quantum) PRIO RITY LEVEL 1000 # 0 1000 # 1 1000 # 2 1000 # 3 1000 # 4 1000 # 5 1000 # 6 1000 # 7 1000 # 8 1000 # 9 800 # 10 800 # 11 800 # 12 800 # 13 800 # 14 800 # 15 800 # 16 800 # 17 800 # 18 800 # 19 600 # 20 600 # 21 600 # 22
Торчинский Ф.И., , Ильин Е.С. 600 # 23 600 # 24 600 # 25 600 # 26 600 # 27 600 # 28 600 # 29 400 # 30 400 # 31 400 # 32 400 # 33 400 # 34 400 # 35 400 # 36 400 # 37 400 # 38 400 # 39 200 # 40 200 # 41 200 # 42 200 # 43 200 # 44 200 # 45 200 # 46 200 # 47 200 # 48 200 # 49 100 # 50 100 # 51 100 # 52 100 # 53 100 # 54 100 # 55 100 # 56 100 # 57 100 # 58 100 # 59 Пример 7.3. Таблица диспетчера
Потоки реального времени выполняются до завершения или до истечения их кванта (если в очереди стоят несколько потоков реального времени). Потокам реального времени присваивается самый высокий абсолютный приоритет, даже более высокий, чем потокам ядра, потому что относительные приоритеты отображаются в абсолютные, как показано в табл. 7.1. Планирование на основе справедливого раздела В Solaris стандартный планировщик задач (диспетчер) старается предоставить процессам, которые по умолчанию запускаются с классом планирования timesharing (в режиме с разделением времени), примерно одинаковый доступ к процессору. Однако, если на самом деле некоторые процессы в системе более важны, чем другие (сервер баз данных, web-сервер крупного портала и т.п.), можно использовать иной метод планирования - планирование на основе справедливого раздела (fair share scheduler - FSS). В этом случае можно назначить группам процессов разные "порции" процессорного времени, которые те буцут получать в единицу времени. Грубо говоря, можно потребовать от планировщика отдать 70% времени web-серверу а 30% - всем остальным процессам. Если этого не сделать, время будет делиться поровну Кроме соответствующего алгоритма, в Solaris 9 появился новый класс планирования, который тоже называется планированием на основе справедливого раздела. В более ранних версиях Solaris этот алгоритм планирования (и соответствующий ему класс) отсутствовал, хотя в других системах аналогичный алгоритм был реализован в середине 1990-х годов, например, в IRIX 6.2. Более детальное описание этой возможности дано по адресу ссылка: httpy/docs.sun.com/db/doc/816-4882/6mb2ipq5n?q=scheduling+class&a=view Распределение памяти. Swaping В любой многопроцессной системе запущенные процессы и процессы, которые ждут возможности продолжить свое выполнение, могут в сумме занимать больший объем, чем объем установленной оперативной
памяти, и поэтому в таких системах используют виртуальную память. Виртуальная память складывается из оперативной памяти и swap-разделов, размещенных на жестких дисках компьютера. В UNIX вся память разделена на страницы определенного одинакового размера. Каждый процесс получает от системы запрошенное количество памяти, выделение памяти в UNIX осуществляется постранично. Процессы реального времени и часть кода ядра (например, та, что отвечает за обмен страницами между оперативной памятью и диском) всегда находятся в памяти, страницы остальных процессов могут быть выгружены на диск. В большинстве систем UNIX размер страницы составляет 4 Кбайт. В Solaris для х86 он ровно такой же, но на платформе SPARC может быть другой размер страницы, т.к. это свойство системы зависит от платформы. Узнать размер страницы памяти в Solaris можно по команде pagesize. Традиционно в литературе по системам UNIX для описания процесса обмена страницами между памятью и диском используют термин "свопинг" (swaping). Этот термин в действительности означает полную выгрузку страниц процесса на диск. На самом деле менеджер виртуальной памяти в UNIX обычно выполняет "пейджинг" (paging), что означает постраничную (частичную) выгрузку процесса на диск. Свопинг выполняется в том случае, если памяти критически не хватает, чего при нормальной работе системы не наблюдается. Алгоритм, который используется для выгрузки страниц в UNIX, называется "алгоритмом часов". Предполагается, что сканер страниц памяти время от времени указывает "стрелкой" этих "часов" на случайно выбранную страницу памяти. Как только это произошло, страница становится кандидатом на выгрузку. Если в течение определенного промежутка времени к ней не произошло обращения, ее и в самом деле выгружают на диск. Более подробно алгоритм работы менеджера виртуальной памяти рассмотрен в лекции 7 курса "Администрирование ОС Solaris". Для функционирования системы обязательно требуется, чтобы существовал по крайней мере один swap-раздел. При его создании рекомендуют отвести такому разделу не менее удвоенного объема оперативной памяти. Даже если вы являетесь сторонником выполнения
этой рекомендации, постарайтесь подойти к ней критически: создание огромного swap-раздела, который никогда не буцет использован даже наполовину столь же нерационально, как и создание слишком маленького swap-раздела, который доведет систему до критической нехватки виртуальной памяти, что чревато неожиданным и принудительным завершением нужных процессов в системе. При планировании дисковой подсистемы (в частности, размера swap-разделов) важно хорошо представлять, сколько памяти может потребоваться тем программам, которые будут одновременно работать в системе. В самом деле, если в системе планируется одновременно запускать сервер баз данных, web-сервер и несколько почтовых служб, можно предположить, что памяти понадобится много. Вполне реально оценить потребности в ней эмпирически - запустите по одной копии каждого демона, умножьте объем памяти, занятой каждым из них, на число предполагаемых демонов такого типа в рабочей системе и умножьте сумму получившихся чисел еще на два - для получения разумного запаса. Если такое количество оперативной памяти физически возможно установить в компьютер, вам светит счастливая звезда! Если нет, надо прикинуть, какой объем памяти критически важен (программы должны работать одновременно, а не лежать в swap-разделе поочереди или, не дай Бог, все вместе!), и решить, сколько при этом останется программ, которым все-таки придется "отдохнуть" на диске. При нехватке памяти ядро UNIX просто уничтожает процессы, которые имеют более низкий приоритет, чтобы освободить место для других, более важных для системы процессов. Иногда ядро 'убивает" процессы молча, даже не сообщая об этом на консоль, поэтому в условиях нехватки памяти мы можем неожиданно получить работающий, но не отвечающий ни на какие наши действия компьютер. Это лечится только аппаратным перезапуском. Доступ процессов к файлам В ходе работы процессы обращаются к внешним устройствам, файлам и каталогам. При обращении к внешнему устройству права доступа к нему определяются правами доступа к соответствующему файлу устройства. Права доступа к файлу и каталогу определяются одинаково, исходя из
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 фактических прав доступа, определенных в файловой системе, включая расширенные права доступа (ACL). То, какие права доступа к файлу получит процесс, зависит от эффективных идентификатора владельца (eUID ) и группы (eGID) этого процесса. При обращении процесса к файлу ядро проверяет, кем по отношению к этому файлу является владелец процесса. Если эффективный идентификатор владельца процесса совпадает с идентификатором владельца файла, то процесс получает права доступа к файлу определенные для владельца файла. Если владелец процесса входит в группу файла, но не является владельцем файла, он получает права, определенные для группы файла. Если не имеет место ни то, ни другое, то процесс получает права доступа к файлу определенные для "всех остальных". Новый файл по умолчанию получает идентификаторы владельца и группы по наследству от процесса, который его создал, а права доступа к нему - по умолчанию - исходя из маски прав доступа umask. Эффективный идентификатор группы процесса не играет роли в вычислении фактических прав доступа к файлу. Он используется исключительно для того, чтобы назначить его (по наследству) новому файлу который буцет создан процессом. Запуск приложения от имени владельца файла приложения Обычно эффективные идентификаторы владельца и группы процесса достаются процессу по наследству от процесса-родителя. Но в некоторых ситуациях необходимо запустить программу с правами, большими, нежели права запускающего ее пользователя. Например, вам надо изменить свой пароль. Для этого требуется осуществить запись в файл /etc/shadow. С другой стороны, нельзя давать каждому пользователю такое право: вдруг он поменяет не только свой пароль? Кто откажется сделать милый сюрприз коллеге? Как быть? Если вы подумали, что выход в том, чтобы все пароли менял только администратор, вы далеки от истины.
Идея в том, чтобы право записи в /etc/shadow дать не конкретному пользователю, а программе passwd (как нам известно, пароль меняет именно эта программа). К сожалению, в UNIX нет механизма, который позволяет давать какие-либо права отдельному процессу или приложению. Поэтому право записи в /etc/shadow дали пользователю root (назначив его владельцем этого файла и разрешив запись в файл владельцу - вы помните, как это сделать с помощью chmod?), а программу passwd разрешили всем запускать от имени ее владельца - root. Это право (запускать программу от имени владельца) является специальным правом доступа к файлу оно называется SUID (set User ID). Фактически, файл с установленным битом SUID, отвечающим за это право доступа, всегда запускается на выполнение с эффективным идентификатором владельца процесса, равным идентификатору владельца файла. Как мы помним, полный вид слова прав доступа таков: susgt rwxr wxr w х Старшие три бита - SUID ( su ), SGID ( sg ) и sticky bit ( t ). Suid и Sgid Установить бит suid или sgid можно, указав chmod права доступа в числовом виде: chmod 4755 файл или в мнемоническом виде: chmod u+s файл В некоторых системах UNIX доступна только одна из этих двух форм. Бит установки эффективного группового идентификатора (SGID) при запуске файла на выполнение действует сходным с SUID образом: как и в случае бита SUID, установленный SGID вызывает присвоение
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 процессу, исполняемый код которого содержится в запущенном файле, эффективного идентификатора группы, равного идентификатору группы этого файла. В выводе команды 1s файлы с установленными битами SUID и SGID отличаются от прочих тем, что в поле, где обычно стоит "х" (бит выполняемое™), оказывается символ "s": -r-xr-sr-x 1 roottty 10040 Nov 4 2002 /usr/sbin/wall -r-sr-sr-x 1 rootsys 22168 Nov 4 2002 /usr/bin/passwd Это означает, что присутствуют оба бита: и бит запускаемости, и бит SUID (или SGID, соответственно). Если попытаться установить бит SUID или SGID на файл, для которого в соответствующем праве доступа (владельца или группы) не будет бита запускаемости, то система не даст это сделать. Поскольку для каталога биты SUID и SGID имеют другое значение, то биты SUID/SGID и биты права поиска в каталоге могут быть установлены по отдельности. В выводе 1s в правах доступа к каталогу при отсутствии права поиска и наличии битов SUID/SGID буква S в выводе прав доступа будет заглавной: dr-Sr-xr-x 2 root other 512 May 10 01:48 enum -rw-r— r— 1 root other 0 May 10 01:47 q Обратите внимание на права доступа к каталогу enum. Объяснение смысла SUID/SGID для каталога дано в лекции 6. Найти все файлы, у которых установлен бит SUID, можно с помощью команды find / -perm -u+s а файлы с установленным битом SGID - по команде find / -perm-g+s Чтобы не допустить взлома системы, относитесь внимательно к файлам, права доступа к которым разрешают запускать их от чужого имени. Появление таких файлов в системе может облегчить жизнь взломщику. Программа passwd, например, написана таким образом,
что запускающий ее пользователь не сможет с ее помощью сделать ничего, кроме изменения собственного пароля. Поэтому ей можно доверить запускаться с правами пользователя root. Но где гарантия, что все остальные программы с установленным SUID такие же? Устанавливайте бит SUID только тем программам, которым доверяете на все сто! Появление новых файлов с <подозрительными> правами доступа может говорить о попытке взлома системы, поэтому при инсталляции некоторых ОС автоматически устанавливается простой сценарий, использующий вышеописанную команду поиска таких файлов для отслеживания добавленных за последние сутки файлов с установленным битом SUID. Например, во FreeBSD это делается в сценарии /etc/daily, ежедневно проверяющем состояние системы. Имеет смысл удостовериться в том, что все эти новые файлы появились по известной вам причине. Интерактивные и фоновые процессы Процесс в UNIX может быть интерактивным и фоновым. Процесс, который имеет доступ к вводу с терминала и к выводу на него, называется интерактивным (foreground). Таким процессом является почтовая программа mail, редактор текста vi и другие программы. Фоновый процесс не имеет доступа к вводу с терминала, и имеет условный доступ к выводу на терминал. Условие состоит в том, что вывод на терминал разрешен фоновому процессу, если терминал настроен для работы в режиме to stop . Эту настройку можно выполнить командой stty -tostop Обратная настройка выполняется командой stty tostop Если фоновый процесс пытается выводить что-либо на терминал, настроенный для работы в режиме tostop, то процессу посылается сигнал SIGS ТОР. Процесс, получивший такой сигнал, останавливается
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 (переводится в состояние STOPPED ). Если фоновый процесс начинает выполнять вывод на терминал в то время, когда вы работаете в текстовом редакторе или подобной программе, текст на экране может перемешаться. Это не беда: на фактическое содержание редактируемого файла это никакого влияния не оказывает. В большинстве полноэкранных программ под UNIX достаточно нажать Ctrl-L, чтобы обновить экран, и назойливые сообщения исчезнут. Для запуска фонового процесса из командного интерпретатора следует дать команду, завершив ее знаком "&" (амперсэнд): команда & Можно запустить сборку пакета программ в фоновом режиме, и пока он собирается, выполнять другую работу: make all & Взаимодействие процессов Процессы взаимодействуют друг с другом, используя при этом разные механизмы. Процессы могут асинхронно или синхронно передавать друг другу данные и управление доступом к ресурсам системы. С каждым процессом связаны три независимых потока данных: стандартный ввод (stdin), стандартный вывод (stdout) и стандартный поток сообщений об ошибках (stderr). По умолчанию все три потока связаны с тем терминалом, с которого запущен процесс (стандартный ввод - с клавиатуры, вывод данных и ошибок - на экран). Стандартный ввод также называют входным потоком, а стандартный вывод -выходным. Каждому из этих потоков сопоставлены внутренние дескрипторы файлов: входному потоку - 0, выходному потоку - 1, потоку сообщений об ошибках - 2. Внутренний дескриптор файла существует только в пределах того процесса, с которым он связан. Внутренние дескрипторы в разных процессах имеют одинаковые номера, но это физически
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 разные внутренние дескрипторы - каждый процесс имеет свои собственные внутренние дескрипторы. Перенаправление потоков Поток данных, связанный с процессом, может быть перенаправлен в файл или другой поток данных. Например, если требуется, чтобы программа find выдала список имен файлов в файл names, а не на терминал, следует выполнить команду find / -name "some_name" > names Символ правой угловой скобки > означает перенаправление выходного потока запущенной программы в файл. При использовании этой конструкции буцет создан файл names ; если файл с таким именем уже существует, то он буцет уничтожен и затем буцет создан новый файл с этим именем и новым содержимым. Для добавления вывода программы в конец файла следует использовать конструкцию "две правые угловые скобки" >> find / -name "some_name" » names В этом случае файл names буцет создан, если он не существует, а если существует, выходной поток программы find добавится в конец файла. Можно перенаправить текст из файла во входной поток. Если время от времени вы отправляете письма по стандартной форме, например, уведомления пользователям о том, что их домашние каталоги превышают допустимый размер, можно подготовить такое письмо в текстовом редакторе и автоматически отправлять его из скрипта, проверяющего размер каталогов, с помощью команды mail пользователь@ компьютер < файл_с_письмом Бывает необходимо отправить пользователям не совершенно одинаковые сообщения, а письма, в которых стандартный текст перемешан с личными обращениями и конкретными подробностями.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Тогда на помощь приходит перенаправление потока посредством конструкции "документ здесь". Это дает возможность перенаправить ввод в процесс не из файла, а прямо из командной строки (или тела скрипта): mail пользователь!® компьютер «FINAL Дорогой(ая) $TARGETUSER, Вы превысили допустимый размер домашнего каталога на $OVERSIZE килобайт. Удалите ненужные Вам файлы, иначе это сделает робот! Системный администратор FINAL Такой скрипт отправит по указанному адресу письмо, в котором вместо $TARGETUSER и $OVERSIZE будут подставлены имя и превышение лимита того пользователя, которому предназначается письмо. Естественно, этим переменным следует присвоить какое-то значение перед выполнением команды, но тот фрагмент скрипта, в котором это делается, вы с легкостью додумаете самостоятельно. Указание в тексте значков << показывает, что все, что следует непосредственно за ними до ближайшего символа-разделителя, является ограничителем текста. Символ-разделитель - это любой пустой символ: пробел, табуляция или конец строки. Все, что идет за ограничителем текста, передается во входной поток запущенного командой процесса вплоть до момента, когда в начале новой строки не встретится такой же ограничитель текста. Ограничитель может представлять собой любой набор непустых символов - неважно, просто ли это символ ''точка", слово FINAL или что-то еще. Кроме того, что потоки могут быть перенаправлены в файл или из файла, существует возможность перенаправить выходной поток одного процесса во входной поток другого. Например, направить выходной поток программы 1s во входной поток программы more, чтобы длинный список файлов вывести поэкранно, можно так: Is -11 more Символ вертикальной черты "|" означает перенаправление выходного
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 потока программы, команда вызова которой находится слева от этого символа, во входной поток программы, вызываемой справа. При обработке текста часто используется конструкция, называемая конвейером, когда одновременно запускается несколько программ, которые передают данные друг другу: выходной поток первой перенаправляется во входной поток второй, выходной поток второй - во входной поток третьей и т.д. Например, для подсчета запущенных демонов httpd можно использовать такую конструкцию: ps -auxw | grep httpd | wc -1 Программа ps выводит список всех процессов, запущенных в системе, grep выбирает из этого списка строки, в которых есть подстрока httpd, a wc с ключом 1 подсчитывает, сколько строк оказалось в ее входном потоке. Программы, запущенные в конвейере, начинают работать одновременно, поэтому данные на входе второй программы оказываются так скоро, как скоро их сможет сгенерировать первая. Сигналы Процессы могут взаимодействовать, посылая друг другу сигналы. Список сигналов в Solaris ограничен сорока двумя сигналами, из которых наиболее употребительны сигналы TERM, KILL и HUP. В разных вариантах UNIX может быть разное количество сигналов, стандарт POSIX 1.1 определяет тридцать один сигнал. Каждый сигнал имеет свое мнемоническое обозначение и номер. В разных системах мнемонические обозначения остаются одинаковыми, а номер может быть разным. Обычный процесс может послать сигнал только тому процессу, который имеет такой же эффективный идентификатор владельца, т.е. запущен тем же пользователем. Процесс, работающий от имени root, может послать любой сигнал любому процессу в системе.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 С помощью команды kill можно послать сигнал с номером номер_сигнала процессу с идентификатором PID: kill -номер_сигнала PID В некоторых системах UNIX есть возможность послать сигнал процессу с определенным именем посредством программы kill all: killall -номер_сигнала имя_процесса В Solaris эта программа имеет другое значение, а именно выполняет отправку сигнала завершения всем активным процессам: killall А отправить сигнал процессам с определенным именем в Solaris следует командой р ki 11: pkill sendmail С помощью pkill можно отправлять сигнал завершения TERM процессу с тем или иным признаком, так что отправка сигнала процессу с определенным именем - не единственное умение pkill. Например, pkill -HUP -G other,daemon отправит сигнал HUP (SIGHUP) всем процессам, чья фактическая группа - other или daemon. В табл. 7,2 приведен список сигналов, определенный стандартом POSIX 1.1, а в табл. 7,3 - список сигналов, определенных в Solaris 9. Кроме команды pkill системный администратор может найти удобной команду pg г ер, которая заменяет конструкцию ps -ef | grep команда
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 В Solaris для получения того же результата можно ввести более короткую команду pgrep команда Таблица 7.2. Сигналы POSIX 1.1 Сигнал Номер Значение SIGHUP 1 Разрыв связи с управляющим терминалом или управляющим процессом SIGINT 2 Прерывание с клавиатуры SIGQUIT 3 Сигнал выхода дан с клавиатуры SIGILL 4 Недопустимая инструкция SIGABRT С Сигнал abort получен от вызванной кем-то о функции abort SIGFPE 8 exception: ошибка вычислений с плавающей запятой SIGKILL 9 Безусловное завершение процесса SIGSEGV 11 Неверный адрес памяти SIGPIPE 13 Запись в несуществующий канал SIGALRM 14 Сигнал timer от функции alarm SIGTERM 15 Завершение SIGUSR1 30,10,16^ Определяется пользователем SIGUSR2 31,12,17 Определяется пользователем SIGCHLD2 20,17,18 Дочерний процесс остановлен или принудительно завершен SIGCONT1 19,18,25 Продолжить выполнение, если оно было остановлено SIGSTOP 17,19,23 Остановить процесс SIGTSTP 18,20,24 Останов введен с терминала SIGTTIN 21,21,26 Ввод с терминала для фонового процесса SIGTTOU 22,22,27 Вывод на терминала для фонового процесса Таблица 7.3. Сигналы Solaris 9 Название Знач. Действие по Событие
Торчинский Ф.И., Ильин E.C. Организация UNIX-систем и ОС Solaris 9 SIGHUP 1 завершение разрыв связи с терминалом SIGINT 2 завершение прерывание аварийное SIGQUIT 3 завершение (core) Quit (требование завершения) SIGILL 4 аварийное завершение (core) недопустимая команда процессора SIGTRAP 5 аварийное завершение (core) прерывание при трассировке или точка останова SIGABRT 6 аварийное завершение (core) аварийное аварийное принудительное завершение SIGEMT 7 завершение прерывание эмуляции (core) аварийное arithmetic exception: ошибка SIGFPE 8 завершение вычислений с плавающей (core) запятой SIGKILL 9 безусловное требование безусловного завершение завершения аварийное SIGBUS 10 завершение (core) ошибка шины SIGSEGV 11 аварийное завершение (core) аварийное ошибка сегментации (выход за пределы выделенной памяти) SIGSYS 12 завершение (core) неверный системный вызов SIGPIPE 13 завершение запись в несуществующий канал SIGALRM 14 завершение Сигнал timer от функции alarm
SIGTERM 15 завершение завершение SIGUSR1 16 завершение программируемый сигнал 1 SIGUSR2 17 завершение программируемый сигнал 2 SIGCHLD 18 действия не изменение статуса дочернего выполняются процесса SIGPWR 19 действия не выполняются сбой питания или перезагрузка SIGWINCH 20 действия не выполняются изменение размера окна SIGURG 21 действия не выполняются состояние сокета (Urgent Socket Condition) SIGPOLL 22 завершение Pollable Event (см. streamio (71) ) SIGSTOP 23 остановка требование остановки SIGTSTP 24 остановка остановка ввода с терминала SIGCONT 25 действия не выполняются требование продолжения SIGTTIN 26 ввода ввод с терминала для фонового процесса SIGTTOU 27 остановка вывода вывод на терминал для фонового процесса SIGVTALRM 28 завершение Virtual Timer Expired SIGPROF 29 завершение Profiling Timer Expired аварийное достижение лимита времени SIGXCPU 30 завершение использования процессора (CPU (core) time limit exceeded) аварийное превышение допустимого SIGXFSZ 31 завершение размера файла - getrlimit (core) (см. getrlimit (2) ) SIGWAITING 32 действия не зарезервировано библиотекой выполняются потоков SIGLWP 33 действия не выполняются межпроцессный (LWP) сигнал -зарезервировано библиотекой
ВЫПОЛНЯЮТСЯ потоков SIGFREEZE 34 действия не выполняются Check point Freeze SIGTHAW 35 действия не выполняются Check point Thaw SIGCANCEL 36 действия не выполняются сигнал отмены, зарезервировано библиотекой потоков SIGXRES 37 действия не выход за границу блока выполняются управления ресурсом SIGRTMIN * завершение первый сигнал реального времени (SIGRTMIN+1) * завершение второй сигнал реального времени (SIGRTMAX-1) * завершение предпоследний сигнал реального времени SIGRTMAX * завершение последний сигнал реального времени Каналы и сокеты Процессы могут обмениваться данными друг с другом, и в UNIX предусмотрены механизмы такого обмена. Прежде всего, это каналы (pipes) и сокеты (sockets), которые служат для межпроцессной коммуникации, т.е. для передачи данных между одновременно запущенными процессами. Канал - это последовательность байт, используемая как однонаправленный поток ввода/вывода. С точки зрения программиста, бывают именованные и неименованные каналы, и способы обращения к ним несколько отличаются. При использовании канала один процесс открывает канал для чтения, другой - для записи.
коммуникаций; он существует, пока какой-либо процесс хранит дескриптор, ссылающийся на него. Сокет создается системным вызовом socket, который возвращает его дескриптор. Имеется несколько типов сокетов, которые поддерживают различные возможности передачи данных. Для каждого процесса ядро хранит таблицу внутренних дескрипторов. По-английски эта таблица называется "descriptor table", и чтобы не путать ее с таблицей дескрипторов в файловой системе, мы называем внутреннюю таблицу дескрипторов, относящуюся к конкретному процессу, ''таблицей внутренних дескрипторов". Слово "внутренних" подчеркивает то, что эти дескрипторы существуют только в пределах процесса, который пользуется ими для обращения к файлам. Эта таблица наследуется от родительского процесса, поэтому вместе с ней наследуется и доступ к объектам, на которые ссылаются дескрипторы (файлам, каналам, сокетам). Основными способами, при помощи которых процесс может получить дескриптор, является открытие или создание объекта, а также наследование от родительского процесса. Когда процесс завершается, ядро освобождает все дескрипторы, которые использовались этим процессом. Если процесс хранил последнюю ссылку на объект - файл или канал (т.е. в файловой системе больше не содержится записей об этом объекте), то система выполняет окончательное удаление файла (канала) или уничтожение сокета. Подробнее о сокетах можно прочесть в socket (3 ) 2). Семафоры Семафоры - это механизм, который принято использовать для контроля доступа нескольких процессов к одному ресурсу Есть несколько реализаций программного интерфейса (API), связанного с семафорами: • вариант System V IPC (inter-process communication); • BSD; • POSIX 1003.1b.
Семафор по сути - это переменная, в зависимости от значения которой доступ к тому или иному ресурсу разрешается или блокируется до его освобождения. Семафоры широко используются в Oracle. Чтобы настроить подсистему семафоров в Solaris (обеспечить достаточное количество семафоров в ядре), может потребоваться внести изменения в файл конфигурации ядра /etc/system. Для уточнения того, какие настройки требуются именно вашему программному обеспечению под Solaris, обратитесь к руководству по этому ПО. Для Oracle8i в Oracle8i Installation Guide Release 3 рекомендуются следующие начальные значения параметров: • set semsys:seminfo_semmni = lО О • set semsys: seminfo_semmsl=<10 + самое большое значение PROCESSES среди вашихБД> • set semsys:seminfо_зеттпз=<столько, сколько объяснено ниже> • set semsys:seminfo_semopm=lО О • set semsys:seminfo_semvmx=32767 Значение seminf o_semmns рекомендуется установить равным сумме параметров PROCESSES всех баз данных сервера, причем самый большой из них должен быть просуммирован с коэффициентом 2, плюс еще 10 на каждую базу данных. Узнать текущие значения параметров семафоров (Solaris) можно с помощью команды: sysdef | tail - 25 Текущие наборы семафоров в системе (Solaris) покажет команда: ipcs -sb Иногда случается, что при неверном завершении процесса семафоры остаются блокированными. Или бывает, что повторный запуск интенсивно использующего семафоры процесса сорвется из-за нехватки семафоров. В этом случае необходимо удалить соответствующие наборы семафоров командой
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 ipcrm -s semsetID semsetID здесь означает идентификатор набора семафоров. Управление процессами Команды наблюдения за процессами Для просмотра текущего списка и состояния процессов следует использовать программу ps. Она выдает "мгновенный снимок" таблицы процессов, которые запущены в системе. Программа ps без аргументов сообщает список процессов, запущенных пользователем в текущей сессии. Обычно системного администратора интересуют все запущенные в системе процессы, список которых можно узнать по команде ps -ef В системах BSD и System V программа ps имеет разные ключи, поэтому если вы переходите от одной системы к другой, надо помнить об этих различиях или обращаться к man р s. Разберем подробнее, какую информацию выдает программа ps: ps -ef | more UID PID PPID C STIME TTY TIME CMD root 0 0 0 17:43:30 ? 0:03 sched root 1 0 0 17:43:30 ? 0:00 /etc/init -s root 2 0 0 17:43:30 ? 0:00 pageout root 3 0 0 17:43:30 ? 0:00 fsflush root 349 1 0 17:43:53 ? 0:00 /usr/lib/saPsac -t 300 root 277 276 0 17:43:49 ? 0:00 htt_server -port 9010 -syslog -messa£ root 180 1 0 17:43:45 ? 0:00 /usr/lib/autofs/automountd root 59 1 0 17:43:39 ? 0:00 /usr/lib/sysevent/syseventd root 73 1 0 17:43:40 ? 0:00 /usr/lib/picl/picld root 133 1 0 17:43:43 ? 0:00 /usr/sbin/rpcbiiid root 229 1 0 17:43:48 ? 0:00 /usr/lib/power/powerd
Торчинский Ф.И Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 root 172 1 0 17:43:44 ? 0:00 /usr/lib/nfs/lockd root 156 1 0 17:43:44 ? 0:00 /usr/sbin/inetd -s root 217 1 0 17:43:47 ? 0:00 /usr/lib/]psched daemon 168 1 0 17:43:44 ? 0:00 /usr/lib/nfs/statd root 189 1 0 17:43:45 ? 0:00 /usr/sbin/syslogd root 203 1 0 17:43:46 ? 0:00 /usr/sbin/cron root 205 1 0 17:43:46 ? 0:00 /usr/sbin/nscd root 343 1 0 17:43:53 ? 0:00 /usr/sbin/vold root 240 1 0 17:43:48 ? 0:00 /usr/lib/utmpd root 324 1 0 17:43:51 ? 0:00/usr/lib/snmp/snmpdx-y-c/etc/smnp/( root 261 1 0 17:43:49 ? 0:00 /usr/sadm/]ib/smc/bin/smcboot root 355 329 0 17:43:56 ? 0:00 /usr/dt/bin/dtlogin -daemon root 329 1 0 17:43:52 ? 0:00/usr/dt/bin/dtlogin-daemon root 262 261 0 17:43:49 ? 0:00 /usr/sadm/]ib/smc/bin/smcboot root 263 261 0 17:43:49 ? 0:00 /usr/sadm/]ib/smc/bin/smcboot root 354 1 0 17:43:55 ? 0:00 /usr/lib/ssh/sshd root 338 1 0 17:43:52 ? 0:00 /usr/lib/dmi/snmpXdmid -s sunny root 352 349 0 17:43:53 ? 0:00 /usr/lib/saf/ttymon root 353 329 2 17:43:54 ? 1:41/usr/openwin/bin/Xsun :0-nobanner-г root 356 329 0 17:43:56 ? 0:00/usr/openwin/bin/fbconsole-d :0 root 358 324 0 17:43:57 ? 0:00 mibiisa -r -p 5248 root 337 1 0 17:43:52 ? 0:00 /usr/lib/dmi/dmispd Пример 7.4. Результат работы программы ps Ниже мы описываем смысл колонок этого вывода. Некоторые колонки появятся только при использовании специфических ключей, отличных от ключей ef. Для получения еще более детальной информации следует обратиться к man р s. UID - эффективный идентификатор владельца процесса (реальный выводится при использовании ключа - f ). В колонке F - flags (флаги) - выводятся флаги процесса, это устаревшее поле, сохраненное для совместимости. В колонке S - state (состояние) - указывается состояние процесса. Состояния бывают следующие:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 • О (ON PROC) - процесс находится в процессоре и выполняется; • S (Sleeping) - процесс ждет завершения события (например, ввода-вывода); • R (Runnable) - процесс готов к выполнению и ждет своего кванта в очереди к процессору; • Z (Zombie) - процесс стал <зомби>, так как завершился, а родительский процесс не подождал его завершения; • Т (sTopped) - процесс остановлен по сигналу остановки или в процессе трассировки. Идентификатор РID - уникальный идентификатор процесса, используется при передаче ему сигналов. PPID - идентификатор родительского процесса. С - загрузка процессора на планирование задачи (устарело, выводится для совместимости). CLS - класс планирования. PRI - приоритет процесса ; когда указан ключ -с, бо'льшие значения означают больший приоритет, без ключа -с бо'льшие значения означают меньший приоритет. NI - значение NICE (показателя уступчивости), используется при вычислении глобального приоритета процессов в классе разделения времени. ADDR - адрес в памяти. S Z - размер процесса в виртуальной памяти, включая все отображенные файлы и устройства, измеряется в страницах памяти, для получения размера в килобайтах в большинстве случаев это значение надо умножить на 4, точнее - см. команду pagesize. WCHAN - адрес события, ради которого процесс перешел в состояние сна; если поле пусто, процесс запущен. STIME - время запуска процесса, в часах, минутах и секундах, для
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 запущенных более суток назад процессов указываются месяцы и дни. TTY - управляющий терминал (то же, что и терминальная группа), символ вопросительного знака "?" печатается для процесса без управляющего терминала. TIME - число минут и секунд, указывающее, сколько времени процесс отнял у процессора. CMD - команда, которой был запущен процесс. При указании ключа j выводятся дополнительные сведения: PGID - идентификатор лидера группы процессов. SID - идентификатор процесса - лидера сессии. При указании ключа L выводятся дополнительные сведения, причем информация выдается по одной строке на каждый легковесный процесс, обычные однопоточные процессы соотносятся только с одним легковесным процессом: LWP - идентификатор легковесного процесса. NLWP - число легковесных процессов для процесса. Завершившиеся процессы, код завершения которых не был востребован родительским процессом, помечаются как "defunct". Кроме программы ps в UNIX для получения информации о запущенных в данный момент процессах широко используется команда top: top last pid: 923; load averages: 4.56, 1.18, 0.50 17:54:22 64 processes: 63 sleeping, 1 on cpu CPU states: 0.0% idle, 0.5% user, 99.5% kernel, 0.0% iowait, 0.0% swap Memory: 128M real, 18M free, 10 IM swap in use, 499M swap free PID USERNAME LWP PRI NICE SIZE RES STATE TIME
Торчинский Ф.И., , Ильин E.C. Организация UNIX-систем и ОС Solaris 9 909 root 1 60 0 17M 3340K sleep 0:00 0.92% F 353 root 1 58 0 32M 16Msleep0:05 0.37% Xsun 893 root 1 49 0 2228K 1172K cpu 0:00 0.15% top 753 root 1 49 0 15M 8112K sleep 0:00 0.13% d 911 root 1 59 0 3352K 752K sleep 0:00 0.03% s 912 root 1 49 0 3360K 600K sleep 0:00 0.03% s 894 root 1 59 0 3064K 1816K sleep 0:00 0.03% d 656 root 5 59 0 22M 10M sleep 0:01 0.02% d 648 root 1 59 0 6644K 2280K sleep 0:00 0.02% ti 667 root 1 59 0 1844K 512K sleep 0:00 0.02% r 277 root 29 59 0 5612K 1724K sleep 0:00 0.01% 11 895 root 1 59 0 3360K 756K sleep 0:00 0.01% s 720 root 4 49 0 42M 26M sleep 0:03 0.00% г 649 root 1 49 0 18M 6288K sleep 0:00 0.00% d 760 root 1 49 0 4752K 1656K sleep 0:00 0.00% t Пример 7.5. Результат работы команды top В Solaris для удобства получения информации о процессах с определенными именами есть команда pgrep имя Она является эквивалентом команды ps -ef | grep имя С помощью pargs можно посмотреть, какие аргументы переданы конкретному процессу и какая у него среда окружения: pargs 2793 2793: dtterm -name Run -xrm *menuBar: False -iconic -map -e /usr/dt/bin/dtexec -open argv[0]: dttenn argv[l]: -e argv[2]: /usr/dt/bin/dtexec argv[3]: -open argv[4]: -1 argv[5]: -ttprocid argv[6]:2.10fX-r01 648 1289637086 1 1 0 192.168.5.33 5
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 sunny_105_l argv[7]: /export/home/mozillabin/sfw/bin/mozilla argv[8]: <NULL> argv[9]: -open argv[10]: -1 argv[ll]: -ttprocid argv[12]: 2.10fX-r 01 648 1289637086 1 10 192.168.5.33 5 sunny_105_l argv[ 13]: /export71iome/mozi]h_bin/sfw/bm/mozilla pargs -e 2793 2793: dtterm -name Run -xrm *menuBar: False -iconic -map -e /usr/dt/bin/dtext envp[0]: AB_CARDCAEALOG=/usr/dt/share/answerbooks/ru_RU.UTF-8/ab_( envp[l]: DISPLAY=:0.0 envp [2]: DTAPP S EARC HPATH=//. dt/appmanager i/etc/dt/appconfig/appmanage envp [3]: DTD AIAB AS ES EARC HPATH=//. dt/types,/etc/dt/appconfig/typ es/%L. Пример 7.6. Результат работы программы pargs Вывод команды pargs значительно сокращен, ключ -е требует вывести все содержимое среды окружения, а для графических программ типа dtterm, как в нашем примере, среда окружения весьма велика. Команда prstat позволяет в динамике, подобно команде top, отслеживать состояние процессов: prstat PID USERNAME SIZE RSS STATE PRI NICE TIME CPUP 3576 root 3412K 868K run 13 0 0:00:02 6,3% find/1 353 root 45M19M sleep59 0 0:02:30 0,2% Xsun/1 753 root 15M3620K run 49 0 0:00:02 0,1% dttenn/1 3577 root 6640K 4108K cpu049 0 0:00:00 0,1% prstat/ 205 root 2872K 624K sleep 59 0 0:00:00 0,0% nscd/18 895 root 123M 21Msleep49 0 0:00:49 0,0% soffice.bin/4 667 root 1844K 488K sleep 59 0 0:00:00 0,0% rpc.rstatd/1 217 root 5364K 536K sleep 59 0 0:00:00 0,0% ]psched/l 324 root 4360K 196K sleep 59 0 0:00:00 0,0% snmpdx/1 240 root 1100K 288K sleep 59 0 0:00:00 0,0% utmpd/1 343 root 4892K OK sleep59 0 0:00:00 0,0% vold/3
276 root 3240К OK sleep 59 0 0:00:00 0,0% htt/1 633 root 3784К OK sleep 59 0 0:00:00 0,0% sdt_shell/l 657 root 16М2496К sleep49 0 0:00:00 0,0% dtfile/1 203 root 4484K 568K sleep 59 0 0:00:00 0,0% cron/1 189 root 5636K 1092K sleep 59 0 0:00:00 0,0% syslogd/13 168 daemon 2444K 820K sleep59 0 0:00:00 0,0% statd/1 156 root 2412K 688K sleep 59 0 0:00:00 0,0% inetd/1 172 root 2160K 748K sleep 59 0 0:00:00 0,0% lockd/2 229 root 1348K OK sleep 59 0 0:00:00 0,0% powerd/2 133 root 2212K 604K sleep 59 0 0:00:00 0,0% rpcbind/1 Total: 61 processes, 161 Iwps, load averages: 0,25, 0,17, 0,27 Пример 7.7. Результат работы программы prstat Вы можете получить информацию только о тех процессах, которые запущены вами. Пользователю root доступна информация о любых процессах. Процессы-зомби В Solaris 9 появилась новая программа рreap, которая позволяет убрать из системы "мнимые" (defunct), не до конца завершившиеся процессы, которые также носят название "зомби" (zombie). Эти процессы совершенно безобидны, так как это - самые обыкновенные процессы, код завершения которых не был принят родительскими процессами (например, в результате преждевременного завершения родительского процесса или иного сбоя). Несмотря на безобидность, они могут попусту занимать ресурсы системы, если таких процессов будет много. Обычно процессы-зомби автоматически уничтожаются процессом init, но если этого почему-либо не произошло, можно воспользоваться программой ргеар, которая примет код завершения процесса-зомби и даст ему упокоиться с миром. Команды управления процессами Основным средством управления процессами является команда kill, передающая процессу сигналы. Также можно использовать
вышеописанные программы изменения приоритета процесса, прежде всего, команду nice, для управления приоритетом. Не следует путать команду kill с сигналом KILL - они просто тезки; с помощью одноименной команды можно передать процессу как сигнал KILL, таки любые другие сигналы. Будучи запущенной без ключей, она передает процессу сигнал TERM, требующий завершения процесса: kill [-ключи] номер_процесса Например, для завершения процесса sendmail можно выполнить следующие действия: ps auxw | grep sendmail root 2057 0.0 0.2 2664 444 ? S Jul08 3:24 sendmail: accepting connections Как видно, sendmail имеет PID 2057. Посылаем сигнал, требующий завершения процесса: kill 2057 И повторяем последнее действие для проверки (контрольный выстрел): kill 2057 kill: (2057) - No such pid Сообщение No such pid говорит о том, что процесс уже завершился. Программу kill можно использовать для передачи любых сигналов. Чтобы передать некий сигнал, надо указать в качестве ключа числовое или мнемоническое обозначение этого сигнала. Например, после изменений, внесенных в файл конфигурации /etc/inetd. conf, следует потребовать от демона inetd перечитать этот файл конфигурации.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Это можно сделать, послав демону сигнал HUP (номер один), так как известно, что этот демон перечитывает файлы конфигурации, если получает сигнал с номером 1. Вначале надо узнать идентификатор процесса, которому будем посылать сигнал: ps -ef | grep inetd root 156 1 0 17:43:44 ? 0:00 /usr/sbin/inetd -s root 4555 760 0 19:15:16 pts/5 0:00 grep inetd Мы видим два процесса, в строках информации о которых есть слово inetd. Первая строка, grep inetd - это тот самый процесс grep, который мы только что сами запустили. Программы ps и grep запустились одновременно, и ps показал "мгновенный снимок" таблицы процессов. Строка grep inetd в таком случае должна была бы показываться всегда, но на практике иногда мы не видим ее при запуске такой команды. Проведите эксперимент: возможно, что в вашей системе (это зависит от ее скорости и текущей загрузки) вы никогда не увидите строку grep или наоборот, будете ее видеть всегда. Это связано с тем, что физически запуск grep происходит чуть-чуть позже, чем ps, последняя может успеть завершиться раньше, чем grep начнется (ведь таблица процессов может оказаться маленькой и работы у ps будет мало). Тогда строки про grep в списке найденных процессов не будет. Теперь пошлем сигнал процессу inetd: kill-1 156 Помните, не все демоны и не во всех системах по сигналу HUP перечитывают свой файл конфигурации. Прежде чем посылать демону сигналы, выясните, как он на них собирается реагировать: почитайте в man о его повадках. Владелец процесса может посылать сигналы своему процессу, но привилегированный пользователь ( root ) может отправить любой сигнал любому процессу.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Посылка сигнала KILL (номер 9) вызывает безусловное немедленное завершение процесса: kill-9 PID или kill-KILL PID При выполнении команды kill лучше указывать мнемонические обозначения сигналов, а не числовые: в разных системах UNIX сигналы с одним и тем же числовым номером могут иметь разный смысл. Впрочем, можно смело руководствоваться вышеприведенными таблицами в разделе "сигналы" в отношении сигналов в Solaris. Для посылки сигнала нескольким процессам одновременно следует использовать программы pkill или killall (их подробное описание приведено в разделе "Сигналы" выше в этой лекции). При запуске процесса можно менять его базовый приоритет внутри класса планирования. Это возможно только для класса планирования разделения времени. Обычный пользователь может только понижать приоритет процесса, а привилегированный пользователь может менять NICE в обе стороны. Для этого используется команда nice, которая в разных системах имеет разные ключи и немного разный синтаксис. В Solaris она выглядит так: nice -п приращение команда например nice -п 5 Is Это "5" воспринимается как увеличение значения NICE на 5, т.е. снижение приоритета на 5 единиц. Пользователь root может дать команду вида nice -п -4 1s. Это буцет воспринято как увеличение базового приоритета, т.е. уменьшение значения NICE на 4. Базовый приоритет уже запущенного процесса можно менять командой
Торчинский Ф.И., Ильин Е.С. renice: renice -п приращение PID Команда renice может быть использована также для изменения приоритета группы процессов по разным признакам, для уточнения обратитесь к man renice. Работа с заданиями Заданием называют запущенные одной командой несколько программ (в частном случае это может быть и одна программа). Для управления заданиями можно использовать встроенные команды командных интерпретаторов. Так, в большинстве из них есть команды jobs, bg и fg - для получения информации о заданиях, переключении задания в фоновый или интерактивный режим соответственно. Более подробно о работе с заданиями говорится в лекции 9. Планирование запуска процессов Вынесете ли вы сегодня мусор или пойдете в магазин, поедете на заправку кормить своего железного коня бензином или просто ляжете спать пораньше - так или иначе, какое-нибуць дело вы сегодня сделаете. Дела, которые вы делаете, могут быть однократными (купить щенка) или регулярными (погулять с собакой). Может быть, "однократные" - не совсем точное прилагательное, потому что щенка вы можете купить и раз, и два, и еще много раз в жизни. Но вряд ли это дело можно назвать регулярным - не станете же вы раз в год ровно в полночь 13 марта покупать щенка. Все-таки станете? Вы не сатанист, часом? Еще приятнее запланировать выполнение нерегулярного или регулярного дела так, чтобы его делал кто-то другой. Например, сообщите сыну, что вы просите его завтра в полдень отправиться в клуб собаководов и купить там щеночка. Однократно. А потом (когда купит) скажите, что вы запланировали его (сына) прогулки с ним (щеночком)
ежедневно - на годы вперед. Системный администратор, даже если у него нет сына и щеночка, тоже не лишен радостей планирования. Так, для планирования однократных действий в любом UNIX используется программа at, а для регулярных - crontab. at Для планирования однократного запуска задач в строго определенное время (точность - одна минута) используется программа at. Она создает и изменяет список задач для выполнения, размещая его в каталоге /var/spool/cron/at j obs/. В Solaris это именно такой каталог, в других системах местоположение очереди задач может быть иным. Список задач ежеминутно инспектируется демоном cron, который отвечает за своевременный запуск задач. Во многих других системах UNIX демон cron не отвечает за задания, запланированные с помощью at, а для последних имеется специальный демон-запускатель - atd. Чтобы at могла верно запланировать задачи, следует указать ей время и дату запуска задачи: at time date Параметр time может быть задан в форме НН:ММ (часы:минуты), или словом midnight, noon, now, или временем с суффиксом AM или РМ в североамериканском формате. Дата должна быть либо в формате название_месяца день [год], либо MMDDYY, либо MM/DD/YY, либо DD.MM.YY. Также можно указать время в виде now+ п единицы, где единицы - это minutes, hours, days, weeks. Можно указать для времени суффикс today или tomorrow. Указание time без date означает выполнение задачи в текущие сутки, а если time сегодня уже прошло, - назавтра в указанное время. Программа at принимает список задач для выполнения во входной поток.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 at -1 (или atq ) распечатывает список поставленных в очередь задач. at -г позволяет удалить задачу по идентификатору который показывает at -1. В некоторых системах at -г называется at rm. В Solaris приемлемы оба варианта. Суперпользователь всегда может воспользоваться at. Обычному пользователю разрешается использовать at в случае, если его имя указано в файле /usr/lib/cron/at. allow. Если этого файла нет, то проверяется, нет ли имени пользователя в /usr/lib/cron/at. deny (если есть, ему запрещается использование at ). Если ни одного из этих двух файлов нет, пользоваться at разрешается только пользователям, которым назначена роль Solaris . j obs . user (по умолчанию - root ). Если есть только файл /usr/lib/cron/at. deny и он пуст, то по умолчанию всем разрешено пользоваться at. В файлах at. deny и at. allow имена пользователей пишутся по одному в строке. Задания at и crontab заблокированного пользователя не запускаются - демон cron запустит задания только того пользователя, который имеет легальный доступ в систему в настоящее время, как отражено в файле /etc/shadow. Задание, запущенное на выполнение демоном cron, выполняется от имени пользователя, который поставил задание в очередь. Стандартный вывод и стандартный поток ошибок задания cron высылает почтой этому пользователю. Можно указать иное место для вывода информации с помощью ключа m команды at или с помощью параметра в файле с г on tab (см. ниже). Запланированные задачи выполняются в среде командного процессора /bin/sh без назначения управляющего терминала (т.е. вне терминальной группы, связанной с конкретным терминалом). Проведем небольшой эксперимент. Вначале убедимся, что каталог, где сохраняются задания at, пуст:
#ls /var/spool/cron/atjobs/ # Проверим время и дату: date Сбт 15 Май 2004 19:10:29 Запланируем создание файла в корневом каталоге через две минуты: at 1912 at> touch /tuition at> <Ctrl-D> commands will be executed using Zsbin/sh job 1084633920.a at Сбт Май 15 19:12:00 2004 В каталоге, где собираются задания в очереди на выполнение, появился новый файл: Is /var/spool/cron/atjobs/ 1О8463392О.а И по команде at -1 мы получаем информацию о поставленном в очередь задании (указывается имя пользователя, инициировавшего задание, идентификатор задания, по которому его можно удалить, и время планируемого запуска): at -1 user = root 1084633920.а Сбт Май 15 19:12:00 2004 Пока в корневом каталоге файла tuition нет: 1s / bin devices lib opt tmp xfn boot etc lost+found platform TT_DB cdrom export mnt proc usr core home net sbin var dev kernel nsmail test vol Почему? Да время еще не наступило:
date Сбт 15 Май 2004 19:11:42 Дожидаемся заданного времени и (о чудо!) файл /tuition появился! Смотрите: date Сбт 15 Май 2004 19:12:12 к / bin devices lib opt tmp vol boot etc lost+found platform TT_DB xfii cdrom export mnt proc tuition core home net sbin usr dev kernel nsmail test var cron Демон cron ежеминутно инспектирует таблицу запланированных задач и выполняет те задачи, время которых наступило (в Solaris - не более 100 задач в минуту). Программа at нужна, как видно из раздела "at" выше, для планирования однократных задач, а программа с г on tab служит для планирования периодически запускаемых процессов. Они подготавливают таблицу заданий для cron. У каждого пользователя есть своя таблица с г on tab. Ее можно отредактировать командой crontab -е. По этой команде вызывается текстовый редактор (обычно - vi ), а в качестве файла для редактирования окажется таблица с г on tab. Если вы раньше не задавали никаких периодических задач, файл будет пустым. Формат таблицы с г on tab: каждая строка описывает одну задачу в строке содержится шесть полей: mm hh dd mo dw command mm - минуты от 0 до 59;
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 hh - часы от 0 до 23; dd - числа от 1 до 31; то - месяцы от 1 до 12; dw - дни недели от 0 до 7, 0 и 7 - это воскресенье; command - команда командному процессору которую надо запустить (возможно, с аргументами). Каждое числовое поле в таблице может содержать число, несколько чисел через запятую, диапазон (начало и конец диапазона через дефис) или звездочку. Звездочка в соответствующем поле означает "каждую единицу времени", например в поле часов она означает "каждый час". Если в строке указаны определенное число месяца и определенный день недели, то для выполнения команды достаточно, чтобы наступило либо это число, либо этот день недели. Так, строка 12 10 * * 0 rm-rf /var/log/*.[0-9] означает, что в 10:12 каждое воскресенье нужно удалять файлы * . [ 0-9] из /var/log. Однако, если было бы написано 12 10 10 * 0 rm-rf/var/log/*.[0-9] то требовалось бы выполнять такое удаление "в 10:12 по воскресеньям и десятым числам", а не "в 10:12 десятого числа, если оно приходится на воскресенье". Как и в случае cat, команда запускается от имени владельца таблицы, в качестве командного процессора используется /bin/sh. В первых строках таблицы могут быть установлены переменные среды окружения. Наиболее полезной может оказаться переменная среды
Торчинский Ф.И., Ильин Е.С. окружения PATH: PATH=/usr/binAisr/sbin/usr/local/bin В ней можно задать каталоги, которые по умолчанию не входят в PATH. Кроме PATH можно установить переменные SHELL и НОМЕ, а также MAILTO. По умолчанию НОМЕ (домашний каталог) берется из /etc/passwd. Переменная LOGNAME устанавливается автоматически при запуске команды. Ей присваивается имя пользователя, от имени которого запускается команда. В BSD-системах она может называться USER, в Solaris есть обе переменные. LOGNAME и USER нельзя переопределить, НОМЕ и SHELL - можно. Программа cron отправит сообщение владельцу таблицы crontab, если найдет повод это сделать (например, произошла ошибка выполнения команды). Если переменная MAILTO существует и ее значение отлично от пустой строки, то cron расценит это значение как имя адресата, которому надо послать письмо вместо пользователя, запланировавшего задачу Если значение переменной MAILTO - пустая строка, то почта послана не будет. Установка любой переменной среды окружения в таблице с г о n t ab осуществляется так: имя_переменной = значение пробелы вокруг знака равенства необязательны, а пробелы после значения буцут трактоваться как часть значения. Поэтому значение лучше заключать в апострофы или кавычки для явного указания пробелов в начале и конце значения. Для просмотра таблицы с г on tab используйте команду crontab -1, для удаления таблицы - crontab -г. Можно создать файл с таблицей с г on tab заранее и установить ее в систему командой crontab имя_файла_таблицы. Такая команда потенциально опасна: если раньше существовали какие-либо команды в таблице с г on tab, то они потеряются навсегда. Регулярно выполняемые системные скрипты
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 В Solaris нет стандартно принятых по умолчанию регулярно выполняемых скриптов. Однако рекомендуется их создать и расположить в каталоге /var /admin / cron / или /etc/periodic/. crontab -e 22 * * * * /var/admin/cron/liourly 22 22 * * * /var/admin/cron/daily 2 22 * * 0 /var/admin/cron/weekly 2 2 1 * * /var/admin/cron/montlify В скрипт hourly рекомендуется включать проверку состояния сетевого подсоединения ( ping ), проверку и при необходимости установку прав доступа к почтовым ящикам пользователей, проверку состояния основных демонов ( syslog, sendmail, named, sshd ) с помощью ps, архивацию и обновление файлов протоколов ( log rotation ), которые достаточно выросли за час (рекомендуемый размер файла протокола для архивации - 1-2 мегабайта, но вы можете выбрать иное, исходя из удобства последующего анализа этого файла). В скрипт daily включают проверку очереди сообщений (не слишком ли велика - запустите mailq ), синхронизацию системного времени ( ntpdate, rdate ). В скрипт weekly включают проверку свободного места на диске (если у вас это приходится делать чаще, чем раз в неделю, имеет смысл подумать о покупке нового диска, а может быть, и двух сразу), проверку файлов passwd, shadow, hosts, allow и hosts, deny, файлов конфигурации ftpd, sendmail, протоколов utmp и wtmp на предмет прав доступа и размера. Ежемесячный скрипт monthly обычно содержит архивацию и обновление тех файлов протоколов, которые растут медленно. Вы можете включить в эти скрипты свои задачи, которые являются специфическими для конкретной системы - проверку конфигурации smbd для файлового сервера samba, проверку дисковых квот пользователей, контроль появления свежих файлов с установленным битом SUID и так далее.
первое значение для архитектур alpha и spare, второе — для 1386, третье — для mips. 2) Как вы помните, такая запись означает, что следует обратиться к странице руководства в третьем разделе, т.е. дать команду man 3 socket .
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Получение дополнительной информации Лекция рассказывает о путях получения дополнительной информации о системе; эта лекция особенно полезна тем, кто готов самостоятельно решать возникающие проблемы, потому что дает представление о методе поиска информации о системе и решения проблем. Приводятся примеры поиска информации. Администраторы ищут дополнительную информацию о Solaris, если не знают, как что-то сделать, либо если не знают, почему происходит так, а не иначе. Таким образом, большинство вопросов сводятся к двум: • как сделать, чтобы оно работало нужным образом? • почему оно работает таким образом? Вопрос "почему оно не работает нужным образом?" является частным случаем первого вопроса, а "странно, почему оно вообще работает?" -второго. Есть несколько способов получить необходимые сведения. Во-первых, всегда читайте man . В английском рассказе Пола Гэллико "Дженни"-^ опытная кошка учила маленького котенка: "когда тебе трудно - мойся!" Поэтому поплескав воды в утомленные ночным бдением глаза, прочтите man . Как вы уже знаете из лекции 1, man - это такая программа в UNIX, которая показывает страницы системного руководства. Нет более тупого героя анекдотов, чем системный администратор. Хуже, наверное, только пользователь. В каждом руководстве написано, что перед тем, как запускать программу следует прочесть man по ней. И все же половина администраторов игнорируют это правило. Везде сказано, что выбирать простые пароли типа 1234 нельзя, а пароль IVAN1 выбирают 95% пользователей ivan. Число пользователей растет, и тем не менее пароли типа IVAN1 упорно выбирает тот же процент пользователей ivan. Упрямая вещь, эта статистика тупости! Еще раз: для получения информации о том, как работает программа, следует читать man по ней. Внимательно прочтите всю страницу
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 руководства, особенно раздел See Also. Там часто есть ссылки на другие страницы руководства, которые стоит прочесть. Во-вторых, имеет смысл предпринять поиск по web-сайтам. Прежде всего, надо изучить материалы на www.sun.com. Компания Sun Microsystems создала очень приличную поисковую машину и ответы на запросы в строке поиска часто оказываются именно тем, что нужно. Иногда на требуемую документацию или заметку в форуме разработчиков указывает уже первая ссылка со страницы результатов поиска. Поистине гениальная система! В-третьих, если проблема состоит в появлении какой-то непонятной ошибки, можно просто набрать сообщение об ошибке в строке поисковой системы (подходит ссылка: http://www.google.com, но иногда лучше обратиться к ссылка: http://www.metacrawler.com). Идеально, если сообщение об ошибке можно просто перенести в окно браузера - тогда вероятность опечатки при наборе снижается многократно. Подобные ошибки, возможно, бывали и у других администраторов, и их обсуждение в Сети наконец-то добралось до решения. Следуйте по ссылкам - не исключено, что решение уже найдено! Наконец, если в одиночку читать документацию невмоготу а сведущего гуру под рукой нет, можно обратиться за советом в список рассылки по Solaris. Вот несколько полезных адресов, с которых можно начать (там можно подписаться на списки рассылки по Solaris, взглянуть в архив): • ссылка: http://groups.yahoo.com/group/solarisx86/ - список рассылки сообщества администраторов Solaris (на английском языке); • ссылка: http://www.sun.com/bigadmin/discussions/ - страница ссылок на дискуссии ( форумы ), связанные с Solaris; • ссылка: http У/developers.sun.com/fonims - форум разработчиков Solaris. Список рассылки представляет собой общий адрес, то есть письмо, отправленное по этому адресу придет всем подписчикам списка рассылки. Все ответы на это письмо также буцут разосланы всем. Помните: ответы в списках рассылки пишут такие же занятые люди, как и вы. Это опытные системные администраторы, которые посвящают
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 свое свободное время ответам на вопросы новичков из желания помочь ближнему или следуя внутреннему убеждению, что это им поможет совершенствовать свои профессиональные навыки. Ниже в нескольких абзацах я повторю то, что без устали повторяют всем авторам просьб о помощи. В конце главы описан случай поиска решения проблемы в Solaris, самый интересный в моей практике за последние месяцы. Во-первых, следует задавать умные вопросы. Странно спрашивать у гуру как изменить адрес паше-сервера в настройках рабочей станции -на этот вопрос отвечает множество умных книг и (внимание!) man named, а также man resolv.conf. Следует приучить себя искать ответы самостоятельно, прежде чем кричать на всю Сеть: "как изменить этот чертов адрес?" Во-вторых, лучше задать вопрос "где я могу найти информацию о том, как изменить адрес паше- сервера?", а не вопрос "как изменить адрес?" Профессионалы легче признают своим и, следовательно, заслуживающим помощи и совета того, кто явно демонстрирует желание самостоятельно разобраться в проблеме. Никто не хочет выполнять вашу работу за вас - ведь деньги за нее получаете вы, правда? Если здесь вы вздохнули и сказали себе "разве ж это деньги?" -подумайте о том, что после прочтения этой книги стоит купить еще одну: "Как мне найти хорошую работу?" В-третьих, обращайтесь по адресу. В форуме разработчиков FreeBSD вам могут случайно помочь с проблемой по Solaris, но только совершенно случайно. Например, мои знакомые - превосходные специалисты по FreeBSD и Linux, которые съели собаку на дюжинах серверов разного масштаба и возраста, оказались бессильны в решении небольшой (казалось бы!) задачки при русификации Solaris 9. Перед написанием письма в форум или список рассылки убедитесь, что он создан для решения именно таких проблем, которые подобны вашей, а не для обсуждения влияния структур хранилищ данных на кролиководство в Австралии. Страницы руководства
Главная и основная документация любой системы UNIX - это страницы руководства. Руководство по Solaris хранится в подкаталогах каталога /usr/share/man/ и выдается постранично по команде man Любители читать руководство в отдельном окне могут использовать xman для доступа к руководству. Это руководство писали одновременно с написанием самой системы и системных программ, поэтому стиль изложения руководства вышел очень программистским. Если вы мыслите как программист, то читать это руководство буцет очень легко. Поскольку с выходом новых версий Solaris руководство обновляется, стиль современного варианта уже достаточно адаптирован к нынешним задачам системного администрирования. Если вы мыслите как системный администратор, то страницы, объясняющие, как настроить программу или как ее запускать, вы найдете столь же полезными и понятными, сколь понятными покажутся описания системных функций программисту В Solaris, как и в любом другом UNIX, руководство освещает все мелочи, касающиеся системы. Единственное, на что руководство не дает ответа - это на вопрос "Как мне быть?" Если вы попали в затруднительную ситуацию и не понимаете, где искать информацию в руководстве, поможет следующее: • поискать нужные страницы руководства с помощью apropos термин или man -к термин; • попробовать изучить man по смежной тематике и выудить что-нибуць, относящееся к теме, из раздела SEE ALSO в конце страницы руководства. Руководство по Solaris Руководство по Solaris разделено на несколько разделов. Номер раздела может быть цифрой, за которой, возможно, следует одна или несколько букв, в зависимости от названия раздела. Кроме того, раздел может называться одним словом, например, local, new или public. Каждая страница руководства представлена только в одном разделе. Однако в разных разделах могут быть таблицы с одним заголовком,
например, passwd (1) и passwd (4), рассказывающие о связанных понятиях, файлах и программах. Так, страница passwd в разделе 1 рассказывает о программе passwd, а страница passwd в разделе 4 рассказывает о формате и назначении файла /etc/passwd. Разделы man делятся на подразделы, например, в разделе 1 есть подразделы lm, lb, 1с, If, Is. Объяснение того, какие страницы содержатся в каждом из подразделов, дано в man intro. Страница intro есть в каждом разделе, от intro (1) до intro (9 ) . Это -введение в справочный раздел. Если потребуется более подробное описание того, что содержится в нем, можно вызвать man -s N intro Поставьте вместо N номер того раздела, который вас заинтересовал (от 1 до 9). В таблице 8,1 перечислены основные разделы справочного руководства по Solaris. Многие системы UNIX содержат раздел 8, в котором находятся описания программ обслуживания системы, в Solaris все страницы, описывающие программы, собраны в разделе 1. Поэтому раздела 8 в руководстве по Solaris нет. Таблица 8.1. Основные разделы справочного руководства по Solaris 1 Основные команды 2 Системные вызовы и коды ошибок 3 Библиотеки С 4 Устройства и драйверы устройств 5 Форматы файлов 6 Инструкции к играм и демо-версиям программ Специальные файлы, описания протоколов, драйверы и интерфейсы к ним 9 Интерфейсы системных функций ядра В страницах руководства номер раздела указывается в круглых скобках после команды, например halt (1М) . Такая запись представляет как имя команды ( halt ), так и страницу руководства ( 1М ). При поиске подробной информации о чем-либо нужно обратиться к соответствующей странице документации. (Просмотреть страницу
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 документации можно с помощью команды man (1) ). Страница документации есть почти по каждой теме. Например, для просмотра страницы руководства по программе поиска подстрок grep нужно ввести следующую команду: man grep В ответ система выдаст следующую информацию: Name grep - search a file for a pattern Synopsis /usr/bin/grep [-bchilnsvw] limited-regular-expression [filename...] /usr/xpg4/bin/grep [-E | -F] [-c | -1| -q] [-bhinsvwx] -e pattern_list... [-f pattem_file]... [file...] /usr/xpg4/bin/grep [-E | -F] [-c | -1| -q] [-bhinsvwx] [-e pattem_list...] -f pattem_file... [file...] /usr/xpg4/bin/grep [-E | -F] [-c | -1| -q] [-bhinsvwx] pattern [file...] Description The grep utility searches text files for a pattern and prints all lines drat contain drat pattern. It uses a compact non-deterministic algorithm. Be careful using the characters $, *, [, Л, |, (,), and \ in tire pattem_list because tiiey are also meaningful to tire shell It is safest to enclose tire entire pattem_list in single quotes '... '. If no files are specified, grep assumes standard input. Normally, each line found is copied to standard output. The file name is printed before each line found if tirere is more tiran one input file. /usr/bin/grep
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 The /usr/bin/grep utility uses limited regular expressions like those described on die regexp(5) manual page to match die patterns. /usr/хр g4/bin/grep The options -E and -F affect die way /usr/xpg4/bin/grep interprets pattem_list. If -E is specified, /usr/xpg4/bin/grep interprets pattem_list as a full regular expression (see -E for description). If -F is specified, grep interprets pattem_list as a fixed string. If neither are specified, grep interprets pattem_list as a basic regular expression as described onregex(5) manual page. Options The following options are supported for botii /usr/bin/grep and /usr/хр g4/bin/grep: -b Precede each line by the block number on which it was found. This can be useful in locating block numbers by context (first block is 0). -c Print only a count of die lines tiiat contain tire pattern. -h Prevents the name of tire file containing tire matching line from being appended to tiiat line. Used when searching multiple files. -i Large File Behavior See largefile(5) for tire description of die behavior of grep when
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 encountering files greater than or equal to 2 Gbyte ( 2 **31 bytes). Examples Example 1: Finding all uses of a word To find all uses of die word "Posix" (in any case) in die file texLmm, and write with line numbers: example% /usr/bin/grep -i -n posix texLmm Example 2: Finding all empty lines To find all empty lines in die standard input: example% /usr/bin/grep Л$ or example% /usr/bin/grep -v. Example 3: Finding lines containing strings Bodi of die following commands print all lines containing strings abc or def or bof example% /usr/xpg4/bin/grep -E 'abc def example% /usr/xpg4/bin/grep -F 'abc def Example 4: Finding lines with matching strings Bodi of die following commands print all lines matching exacdy abc or def: example% /usr/xpg4/bin/grep -E 'Aabc$ Adef$' example% /usr/xpg4/bin/grep -F -x 'abc def Environment Variables See environ(5) for descriptions of die following environment variables diat affect die execution of grep: LC_COLLATE, LC_CTYPE, LC_MESSAGES, and NLSPATH. Exit Status The following exit values are returned: 0 One or more matches were found. 1 No matches were found. 2 Syntax errors or inaccessible files (even if matches were found).
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 See Also egrep(l), fgrep(l), sed(l), sh(l), attributes(5), environ(5), largefile(5), regex(5), regexp(5), XPG4(5) Notes /usr/bin/grep Lines are limited only by the size of die available virtual memory. If diere is a line widi embedded nulls, grep will only match up to die first null; if it matches, it will print die entire line. /usr/хр g4/bin/grep The results are unspecified if input files contain lines longer than LINE_MAX bytes or contain binary data. LINE_MAX is defined in /usr/include/limits.h Пример 8.1. Результат работы команды man grep Вывод man grep сильно сокращен, так как здесь нам требуется не детальный обзор grep, а общий вид какой-нибудь страницы руководства. Первый блок информации, представленный в верхней строке, сообщает заголовок страницы руководства и номер раздела. Обратите внимание на то, что в Solaris 9 поддерживается две версии grep - классическая ( /usr/bin/grep ) и расширенная ( /usr/хрд4/bin/дгер ). Ниже рассмотрены элементы страницы руководства, которые могут помочь вам не только разобраться в предмете, но и получить направление для нового поиска. Части страницы руководства В страницах руководства всегда есть несколько частей. Обычно присутствуют все стандартные части, перечисленные ниже, и в
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 некоторых случаях - дополнительные, специфичные для данного описания. NAME сообщает имя описываемой команды. В разделе NAME представлено еще и краткое описание программы. SYNOPSIS описывает перечень доступных ключей командной строки при вызове команды и список возможных аргументов. Этого раздела может быть достаточно для того, чтобы освежить свою память и вспомнить ключ, который раньше помогал вам получить требуемый результат. DESCRIPTION кратко описывает программу Содержимое этого раздела зависит от темы, которая представлена на рассматриваемой странице руководства - к страницам о программах, файлах и базовых интерфейсах предъявляются совершенно разные требования. OPTIONS (ключи) описывает ключи программы, их воздействие и, в зависимости от ключа, дополнительные аргументы, которые необходимо указать при использовании ключа. SEE ALSO ("см. также") традиционно является последним разделом страницы, но зачастую - самым интересным. Нелишне еще раз вспомнить, что для просмотра заголовков всех страниц, относящихся к определенной теме, нужно набрать man -к тема. В этом случае будет выполнен поиск по ключевому слову во всех заголовках страниц руководства. Для этой же цели можно воспользоваться командой apropos (1) - это легче запомнить, если не забыли, что означает "apropos"^. Для поиска какого-нибудь слова в странице руководства (когда вы ее уже смотрите с помощью man ) следует набрать "/" и затем само слово. После этого на экране можно будет увидеть первое употребление этого слова на странице. Последовательно вводя одиночный слэш ( / ), можно буцет переходить к следующему вхождению этого слова. Поиск в Интернете
Интернет велик, информации в нем много, и для понимания Solaris мы можем воспользоваться в Сети : списками часто задаваемых вопросов, документацией на сайте Sun Microsystems, архивами форумов (более или менее специализированных, официальных и неофициальных), почтовыми рассылками, телеконференциями сети Fidonet, поисковыми системами и знаниями гуру FAQ В Сети есть разнообразные сборники часто задаваемых вопросов и ответов, связанных с администрированием Solaris. Надо начать поиск в них с ссылка: http://sun.com (ссылка: http://bigadmin.sun.com, ссылка: http://docs.sun.com и т.п.). Довольно часто в FAQ собраны простые вопросы - много проще, чем тот, который вы хотите задать. Следует понимать, что в FAQ вряд ли есть ответы на вопросы о самой последней версии системы: списки вопросов и ответов составляются по материалам обсуждений в сети и проблем, обнаруженных компанией-производителем системы по прошествии некоторого времени после выпуска очередной версии ОС. Форумы и документация на Sun.com Компания Sun Microsystems предоставляет обширную базу данных для поиска требуемой информации на своем сайте. Вполне реально найти как оригинальную документацию на систему и руководства администратора, так и живое обсуждение проблем на форуме ссылка: http У/bigadmin. sun. com. Форум Opennet Русскоязычный сайт для администраторов Solaris расположен по адресу ссылка: http://solaris.opennet.ni. Кроме статей, посвященных различным аспектам администрирования системы, здесь имеется форум, в котором можно встретить письма как новичков, так и опытных системных администраторов. Поиск по форуму выдает массу результатов; к
сожалению, на момент написания книги автор не нашел, как разделить эти результаты на относящиеся исключительно к Solaris и касающиеся других систем UNIX: подобной функциональностью форум еще не снабдили. Вот что рассказывает Максим Чирков, глава проекта Opennet, об истории ссылка: http://solaris.opennet.rLi: "Примерно в 1998 году Евгений Бобин создал сайт ссылка: http://gene.chat.ni (сайт сохранился до сих пор), и я предложил ему предоставить поддомен ссылка: http://solaris.opennet.ru и качественный хостинг. На ссылка: http://solaris.opennet.ni планировалось создать переработанный вариант ссылка: http://gene.chat.ru, вначале работа пошла активно, но потом развитие прекратилось, Евгению перестало хватать времени для поддержки сайта и в конце концов информация там устарела, половина ссылок и страниц не работали. В 2001 году на сервере сгорел жесткий диск и сайты пришлось переносить на другой сервер. Было решено не воссоздавать мертвый проект, и я просто создал страницу на которой обобщил в одном месте ссылки на уже существующие разделы ссылка: http://opennet.ni, посвященные Solaris, вынес отдельно блок новостей и статей. Вариант Евгения Бобина можно посмотреть в архиве: ссылка: http y/web.archive.org/web/19990901211748/http://so]aris. opennet.ru/ В 2004 году появился еще один, автоматически компонуемый, вариант этой страницы - ссылка: http://solaris.opennet.ru/mp/solaris/". Конференции Fido Конференции Fido доступны по протоколу nntp в формате сети Usenet, подробности можно выяснить по адресу ссылка: http://www.fido7.ru, а специфическая телеконференция по Solaris доступна по адресу ссылка: http://groups.google.com'groups?group=fido7.ru.unix.solaris. Конференции сети Fidonet (сокращенно - Fido) возникли задолго до форумов в Интернете, и многие давно работающие с компьютерными системами специалисты предпочитают именно их для общения. Несмотря на то, что популярность Fido в России несравнима с популярностью сети Интернет, пренебрегать этим источником обмена опытом было бы неразумно.
Возможно, для участия в конференциях, для получения права писать письма в конференцию, вам придется зарегистрироваться и (или) установить новое программное обеспечение для чтения телеконференций в формате Usenet. Не волнуйтесь: затраты времени окупятся сторицей. Поисковые машины Для поиска информации в Сети есть прекрасные поисковые машины, такие как ссылка: http У/go ogle, сот, ссылка: httpy/metacrawler.com, ссылка: http У/yahoo.сот и многие другие. Как заставить эти творения ума человеческого искать нужные вам страницы? Прежде всего, надо четко представить себе, какого рода информацию вы хотите найти. Предположим, вы ищете смысл сообщения об ошибке, которое вы получили от системы. Тогда следует рассчитывать только на форумы. Довольно редко на сайтах можно встретить документацию по конкретным ошибкам, зато на форумах информации о том, что делать, если возникла ошибка, предостаточно. Можно искать письма коллег с таким же, как у вас, сообщением об ошибке на специализированных форумах (о них рассказано ниже), а можно в поисковой машине. Для этого в строке поиска следует привести сообщение об ошибке и запустить поиск. Сообщение об ошибке следует очистить от всяких особенностей, специфических для вашей системы: от имени системы, возможно, от имени интерфейса, с которым связана ошибка. Например, сообщение Zdev/rdsk/c0d0t3sl: can't check file system содержит указание на конкретный диск (c0d0t3sl); очевидно, что сообщение может встречаться в Сети в письмах о помощи на форумах, но имя диска у других страдальцев может оказаться иным. Поэтому, удалив имя диска, можно быстрее добраться до ссылки на форум с обсуждением произошедшей ошибки. Кстати, перечень сообщений об ошибках в Solaris (с объяснением их
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 возможных причин) можно найти в Сети, например, по адресам ссылка: http://www.antioffljiie.com/solerrors.htiTil и ссылка: httpy/docs.srui.corn/db/doc/802-2022. Помните, что достоверность ссылок проверена автором на момент написания книги; возможно, вы найдете эти списки в других местах. Если ваша цель - отыскать документацию для выполнения конкретной задачи или получения информации о программе, следует как можно лучше представить себе, какими словами эта проблема описывается. Обычно в Сети нет толковых документов, которые найдутся по ключевой фразе "как прибиндить nameserver к интерфейсу". Например, для поиска информации о том, как переключать язык ввода текста с клавиатуры в Solaris, следует догадаться, что ключевыми словами должны быть "keyboard layout" или "language layout", а не "keyboard switcher". Для администрирования Solaris и любого другого варианта UNIX не обязательно знать язык С или C++ в совершенстве, можно не знать perl и язык командного процессора, но понимать английский текст надо обязательно. Если вы егце не знаете английского языка, выучите его. Иногда можно найти в Сети обсуждение нужной вам темы по-русски или переведенную на русский язык документацию. В последнем случае качество переводов часто бывает настолько плохим, что перевод только запутывает и без того сложную проблему. Вероятность найти толковое, свежее, актуальное и русскоязычное решение проблемы с Solaris в Сети намного ниже, чем найти то же самое по-английски, хотя бы потому что основная масса администраторов Solaris во всем мире говорит по-английски, а не по-русски. Если не удается найти информацию на привычных вам поисковых серверах, попробуйте ссылка: http://metacrawler.com - иногда мне удавалось с его помощью выудить жемчужину из навозной кучи. Крик о помощи - письмо в форум или список рассылки Если вы отчаялись найти решение самостоятельно, читая архивы
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 форумов в Сети и документацию на всевозможных сайтах, и решили обратиться в форум или список рассылки за помощью, стоит помнить о некоторых правилах. В письме о помощи следует привести всю информацию, которая имеется в вашем распоряжении. Если в письме не будет чего-то важного для решения проблемы, то либо ваш вопрос проигнорируют, либо вместо ответа вы получите массу сообщений, в которых вас попросят уточнить детали. Поэтому в письмо о помощи надо включить, как минимум, следующее: • Завершенное описание проблемы. Вопрос "Как увидеть сеть?" вызовет встречные вопросы. Что значит "увидеть"? О какой системе идет речь? О какой сети? Какие настройки сделаны? • Вывод команды uname -а. Так можно узнать версию вашей операционной системы и аппаратную платформу • Все сообщения об ошибках, которые вы наблюдали в связи с проблемой. Не забудьте о сообщениях из файла протокола /var/log/messages и других файлов протоколов, если они связаны с проблемой. Постарайтесь также, чтобы ваше письмо было удобно читать: не пишите длинных вступлений и заключений общего характера ("Я работаю системным администратором в компании Газпром"), отправляйте письмо в формате plain text (ваши корреспонденты вряд ли любят читать письма в формате HTML, попробуйте сами с помощью программы mail, например), отправляйте письмо по тому адресу с которого вправе ожидать помощь, и помните - письмо, возможно, придется писать по-англииски-'. Практический поиск информации: реальный случай Теперь возьмем относительно простую (казалось бы!) задачу и воспользуемся описанной методикой для ее решения. Часть этой книги набрана в пакете Open Office под Solaris 9. Для создания иллюстраций было необходимо делать "снимки" экрана, чтобы показать, как выглядят графические элементы CDE. Как сделать такие "снимки1?
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Во-первых, я попробовал найти это в man . Попытки получить что-нибуць про print screen или screenshot с помощью man - к не удались. Во-вторых, я попробовал найти эту информацию в Сети. Поскольку делать "снимки" графических окон - не самая частая необходимость администратора, поиск такой информации в FAQ и на форумах казался бесполезным. Для поиска в google требовалось придумать, как назвать эту функцию. Попробуем давно знакомый термин screenshot. Итак, ищем Solaris 9 screenshot Находятся ссылки на уже готовые "снимки"... смотрим дальше... вот! "to easily and quickly capture a screenshot" значится в описании страницы с ссылка: http://docs.sun.com. Смотрим... "SDThnage Enhancements: Hie SDTImage screen snapshot feature now enables users to easily and quickly capture a screenshot image from die command line." Похоже, это именно то, что мы ищем! Интересно, что найденный документ описывает расширения среды CDE, появившиеся в Solaris 8. А что такое SDTImage? Попробуем man -k sdtimage: bash-2.05# man -к sdtimage sdtimage sdtimage (1) - Image viewer for CDE bash-2.05# О, да это средство для просмотра картинок... Запускаем sdtimage& и оказывается, что в меню File имеется функция Snapshot... Задача решена! Удалось даже обойтись без помощи гуру.. В Paul Gallico. Jenny. UK First Edition:1950. 21 Apropos (фр.) -относительно, по поводу; что касается. 31 В этой книге я много раз повторяю, что системное администрирование Solaris предполагает владение английским языком. В книге "UNIX. Практическое пособие администратора" я не делал этого достаточно часто и обнаружил, что многие читатели и слушатели
курсов по UNIX ожидают, что я смогу им помочь работать с Solaris без знания языка. К сожалению, это не так, поэтому сейчас я честно пытаюсь показать, что английский будет серьезно необходим, даже если вы администрируете сеть в Хабаровске или Горно-Алтайске, вдали от англоязычных стран.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Запуск и останов системы Лекция посвящена загрузке и останову системы, в ней рассказывается об общих для систем UNIX семейства System V режимах работы системы - однопользовательском и многопользовательских, о том, как указать системе процессы, которые следует запускать при загрузке системы и как выполнять перезагрузку Solaris с целью модификации ядра при добавлении нового оборудования. Запуск и останов: различия между Solaris и другими UNIX Прежде всего напомним, что Solaris относится к ветви System V, и поэтому процедуры его запуска и останова, а также файлы конфигурации и системные скрипты, используемые для этих процедур, в корне отличаются от таковых в системах BSD. Здесь не рассматриваются системы BSD, для изучения отличия между System V и BSD-системами имеет смысл обратиться к книге [1] или другой литературе, в том числе к источникам в Интернете. Solaris отличается также от собратьев по ветви System V наличием специального режима работы системы, который называется s или S. Ниже этот режим описан подробнее. В большинстве систем System V остальные семь режимов работы (0-6) имеют такое же назначение, как и в Solaris. Некоторые системы, например, многие из систем Linux, имеют несколько иную структуру каталогов стартовых системных скриптов. Так, в Solaris скрипты находятся в /etc/rcO . d, /etc/rcl. d и т.д., а в Linux - в /etc/rc.d/rcO/, /etc/rc.d/rcl/ и т.д. Однако для того, чтобы уточнить местоположение этих скриптов в любой из систем System V, достаточно изучить man init . Кроме того, Solaris обладает самой большой коллекцией программ для изменения режима работы системы: shutdown, reboot, halt, poweroff, init . В других системах не всегда есть полный набор этих программ, однако в системах System V обязательно присутствуют программы init и shutdown. Они всегда имеют одинаковое назначение, независимо от названия и поставщика ОС, хотя их ключи могут несколько отличаться друг от друга.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Повторим еще раз: общие принципы загрузки и останова системы очень схожи для всех систем UNIX ветви System V, об особенностях вашей системы всегда можно узнать из man init и man shutdown. Режимы работы системы В одной и той же компьютерной системе может понадобиться выполнять совершенно разные типы задач. Например, на большом складе компании-поставщика бытовой техники центральный сервер управляет базой данных клиентов и их заказов. Эта работа ведется круглосуточно, за исключением короткой передышки в пятницу поздно вечером. В рабочее время на сервере запущены приложения, которые необходимы для обслуживания запросов: сервер базы данных, web-сервер, модули ядра, отвечающие за работу с сетью, и тому подобное. Во время короткой передышки в пятницу на сервере выполняется совершенно другая работа: полное резервное копирование базы данных и, если надо, установка нового ПО. Для этой работы важно, чтобы никто не обращался к серверу с запросами во время резервного копирования и модификации ПО, и такие приложения, как сервер базы данных, web-сервер, модули ядра, отвечающие за работу с сетью, следует выключить на время проведения еженедельного техобслуживания системы. Для того чтобы системе было легче переключаться между разными наборами программ, которые используются для разных типов задач, была придумана концепция режимов работы системы. Любой UNIX ветви System V, в том числе и Solaris, может работать в одном из семи режимов (они нумеруются от 0 до 6). Каждый режим характеризуется своим назначением, которое определяет набор программ, выполняющихся в этом режиме. В Solaris, наряду с упомянутыми семью, используется и восьмой режим - s или S (режимы s и S - это одно и то же). Режим работы системы ( runlevel ) иногда также называют состоянием (state) или уровнем выполнения. Набор программ, запускаемых в том или ином режиме, определяется содержимым файла /etc/inittab. В этом файле указываются стартовые скрипты, которые буцут автоматически запускаться при переходе к каждому из уровней
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 выполнения. Эти скрипты расположены в каталоге /etc, и из них вызываются другие скрипты, которые лежат в каталогах / etc/rcN . d. ( N - число от 0 до 6 или символ S ). При переходе к режиму 0 выполняется /etc/rcO, к режиму 1 -/etc/rcl и так далее. Ниже даны описания всех возможных режимов работы Solaris. Режим 0. Система останавливается, управление переходит к программе из ПЗУ (firmware) для компьютеров архитектуры SPARC, для компьютеров х86 -система останавливается и может быть перезагружена нажатием любой клавиши. В режиме 0 компьютер можно выключить без опасений за сохранность данных. Режим 1. Административный режим. Файловые системы, необходимые для многопользовательской работы, смонтированы, и можно использовать регистрационные имена, требующие доступа к многопользовательским файловым системам. Запущены некоторые демоны, однако пользователям не разрешено входить в систему Режим 1 применяется для установки пакетов ПО. Режим s, S. Режим s (или S ) называется однопользовательским. При переходе в это состояние все пользовательские процессы останавливаются, а файловые системы, необходимые для многопользовательской работы, демонтируются. После этого доступ к системе возможен только с консоли; регистрационные имена, требующие доступа к пользовательским файловым системам, употреблять нельзя. Этот режим применяется для установки или удаления программного обеспечения, резервного копирования, восстановления или проверки файловых систем. Система переходит в состояние s автоматически, когда файловая система /usг повреждена и не может быть восстановлена без вмешательства администратора. Набор файловых систем, смонтированных при работе системы в состоянии s, не всегда один и
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 тот же; то, какие файловые системы смонтированы, зависит от метода перевода системы в состояние s и настроек системы. Переход в режим s возможен даже при поврежденном или отсутствующем файле /etc/inittab, что невозможно для любого другого режима работы. При переходе в режим S из других режимов работы, файловые системы, уже смонтированные к этому моменту остаются смонтированными, даже если предоставляются другими серверами в сети. Все процессы, запущенные ранее в многопользовательских режимах, завершаются. Завершаются также все процессы, имеющие записи в utmpx (т.е. запущенные от имени пользователей). Последнее означает, что процессы типа ttymon и других мониторов портов, запущенные системой SAC, тоже завершаются при переходе в режим S. Режим 2. Многопользовательский режим. Все процессы и демоны, необходимые для многопользовательской работы, запущены. Режим 3. Многопользовательский режим ; кроме того, что разрешено в режиме 2, добавлен доступ к локальным ресурсам через сеть (поддерживается разделение каталогов с помощью NFS). Режим 4. Альтернативный многопользовательский режим. Предполагает иную, нежели в режимах 2 и 3, конфигурацию демонов и других программ для работы в многопользовательском режиме. Обычно не используется. Режим 5. Режим останова ; операционная система останавливается, и, если это возможно, обеспечивается автоматическое выключение питания. Для автоматического выключения питания необходима аппаратная поддержка выполнения этой функции. Режим 6.
Останавливает и перезагружает операционную систему в состояние, определяемое записью initdefault в файле /etc/inittab. При необходимости конфигурирует перед перезагрузкой новый загружаемый образ ядра операционной системы. Для пересборки ядра после модификации параметров ядра или добавления новых устройств следует выполнить команду touch /reconfigure перед перезагрузкой. Начальная загрузка системы Загрузка Solaris 9 на компьютерах SPARC После включения компьютера записанное в ПЗУ программное обеспечение (firmware) запускает процедуру самотестирования компьютера (power-on self-test - POST). То, как проходит эта процедура, зависит от конфигурации и модели компьютера. Если тест прошел нормально, то программа автозагрузки пытается загрузить систему используя имя устройства и имя файла ядра, записанные в ПЗУ Эти параметры могут быть изменены программой eeprom при интерактивной работе с Solaris из командной строки или после остановки системы - из командной строки ок, которую выдаст firmware по завершении останова системы. Программа, которая запускается после начального загрузчика, называется u f shoot, если загрузка происходит с диска, или inetboot, если выполняется загрузка по сети. Загрузка по сети Загрузка по сети может идти с использованием DHCP или RARP/bootparams, в зависимости от настроек, записанных в ПЗУ и
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 реальной конфигурации сети (для настройки по DHCP в сети должен быть доступен DHCP-сервер). Команду boot среды OpenBoot (иначе говоря, командной строки firmware) можно использовать для задания протокола загрузки явным образом: boot netiarp boot netrdhcp или полагаясь на выбор сценария по умолчанию (тогда сценарий не указывается): boot net При этом загрузка осуществляется через тот интерфейс, для которого определен псевдоним net. Загрузка через сеть с использованием RARP/bootparams Начальный загрузчик из ПЗУ выполняет ARP-запрос (подробнее об ARP-запросах см. лекции 2 курса "Администрирование ОС Solaris") и, после получения ответа, посылает широковещательный запрос в локальную сеть по протоколу TFTP для загрузки программы inetboot из сети. Загрузив с ответившего TFTP-сервера программу inetboot, загрузчик передает ей управление, а она отправляет еще один ARP-запрос, после чего находит файловую систему в сети, с которой следует произвести загрузку ядра. Для этого inetboot использует протокол bootparams (см. man bootparams для получения детальной информации о протоколе). После того как файловая система найдена, с нее по протоколу NFS загружается ядро и ему передается управление. Загрузка через сеть с использованием DHCP При загрузке по сети с использованием DHCP начальный загрузчик из ПЗУ посылает широковещательный запрос, в котором сообщает МАС-адрес своего компьютера и его архитектуру запрашивая в ответ IP-
адрес, параметры загрузки и настройки сети. После получения ответа (детали протокола DHCP см. в лекции 2 курса "Администрирование ОС Solaris") начальный загрузчик загружает inetboot через сеть, inetboot загружает ядро, которое, в свою очередь, загружает необходимые ему файлы через сеть, после чего выгружает inetboot. Стартовые скрипты запускают dhcpagent, который выполняет оставшуюся часть настроек по DHCP. Загрузка с диска При загрузке с диска разделяют два этапа: начальную загрузку и вторичную. Начальная загрузка заключается в том, что программа загрузки из ПЗУ считывает вторичный загрузчик с загрузочного раздела диска, из блоков с первого по пятнадцатый. Если имя файла ядра указано не как полное имя файла (начинающееся с символа / ), то такое имя расценивается как относительное и вторичный загрузчик ищет ядро в каталоге, соответствующем аппаратной платформе компьютера. Тогда путь к ядру точно буцет лежать через каталог /platform/platform-name. Для многих компьютеров SPARC после этого выполняется поиск в каталоге /platform/hardware-class-name. Если указано полное имя файла, загрузчик буцет пытаться загрузить в точности тот файл, что указан. После загрузки файла ядра в память загрузчик передает ему управление. Если имя файла ядра не указано, и из других настороек непонятно, какое ядро следует загружать, загрузчик сам решает, какое ядро требуется, основываясь на том, какое ПО установлено в системе, на известных свойствах аппаратуры и firmware и на записях в файле политики загрузки boot.conf. О местоположении и содержимом этого файла буцет сказано ниже, в разделе "Файлы и каталоги, используемые при загрузке". Среда OpenBoot. Команда boot
В системах с архитектурой SPARC после процедуры самотестирования компьютера (POST), которую выполняет firmware, запускается загрузчик, предоставляющий интерфейс среды OpenBoot. В этой среде можно вводить команды в командной строке в ответ на приглашение среды. Приглашение среды представляет собой слово ок Здесь мы рассмотрим команду boot среды OpenBoot. Синтаксис команды boot предполагает возможность указания загрузочного устройства и дополнительных аргументов: boot [device] [arguments] Если дать команду boot без параметров, то буцет выполнена загрузка с устройства по умолчанию. По умолчанию загрузка производится с того устройства, которое указано в переменной boot-device или diag-device в ПЗУ (NVRAM variable). Если система запускается в режиме диагностики, вместо переменных boot-device и boot-file используются diag-device и diag-f ile. Аргументы команды boot могут быть многострочными, они не анализируются загрузчиком OpenBoot, а передаются вторичному загрузчику как есть. Если команде boot переданы какие-нибуць аргументы, содержимое переменных boot-file и diag-file игнорируется. Например, если дана команда boot -s то подстрока -s расценивается как аргумент, а переменные bootfile и diag-file не принимаются во внимание. Если команды boot net и boot cdrom
если они даны без аргументов, то они будут использовать содержимое переменных boot-file и diag-file как путь к файлу ядра. Стало быть, если boot-file содержит имя 64-разрядного ядра, а вы пытаетесь загрузиться с CD-ROM командой boot cdrom, то загрузка не состоится, если на CD-диске имеется только 32-разрядное ядро. Для загрузки в специфическом режиме следует указывать команде boot соответствующие аргументы, в ответ на приглашение ок вводится команда: • boot -as - загрузка ядра, используемого по умолчанию, в однопользовательском режиме ; • boot kernel/unix -as - принудительная загрузка 32-разрядного ядра в однопользовательском режиме (для принудительной загрузки указывается имя файла явным образом); • boot kernel/sparcv9/unix -as - принудительная загрузка 64-разрядного ядра в однопользовательском режиме (для принудительной загрузки указывается имя файла явным образом). Для более детального изучения команды boot в вашей системе следует использовать man boot ; помните, что на некоторых платформах, в зависимости от firmware, могут наблюдаться отклонения от схемы, описанной здесь и в документации. Загрузка Solaris 9 на компьютерах х86 На компьютерах х86 загрузка состоит из двух разных этапов: начальной загрузки и вторичной загрузки. Начальная загрузка выполняется BIOS системной платы и BIOS контроллеров. После процедуры POST начальный загрузчик пытается прочесть первый сектор с дискеты, компакт-диска или жесткого диска, или, если эта функция поддерживается, загрузить вторичный загрузчик через сеть. После того как вторичный загрузчик записан в оперативную память, ему передается управление. Начальный загрузчик работает в режиме real mode процессора, а вторичный - в защищенном режиме (32-bit protected mode).
Вторичный загрузчик называется boot.binn способен считать ядро с диска из файловой системы UFS, компакт-диска или через сеть с использованием NFS. Вторичный загрузчик запускает программу DC А (device configuration assistant), которая определяет физические устройства компьютера. При этом системный администратор может вмешаться в процесс определения устройств, если DCA их не может верно определить автоматически. После возвращения управления от DC А вторичный загрузчик выполняет скрипт /etc/bootrc, который управляет дальнейшим процессом загрузки. Обычный /etc/bootrc предлагает администратору ввести символ b для загрузки с определенными ключами и аргументами, символ 1 для запуска интерактивного командного интерпретатора, и любой другой символ - для загрузки ядра с установками по умолчанию. Файлы и каталоги, используемые при загрузке Для загрузки в специфическом режиме следует указывать команде boot соответствующие аргументы: • для х86 платформ в ответ на приглашение > вводится команда b kernel/unix -as - загрузка ядра, используемого по умолчанию, в однопользовательском режиме. Замечание о загрузке систем UltraSPARC Некоторые старые компьютеры SPARC технически способны работать с 64-битной версией Solaris, но им может требоваться обновление firmware для того, чтобы эта работа стала в действительности возможной. Если вы обладаете как раз такой системой и установили 64-битный Solaris, то при загрузке этот факт буцет обнаружен и вы получите сообщение о том, что firmware следует обновить, вслед за этим загрузчик выберет 32-разрядное ядро, и загрузка продолжится. Процессоры UltraSPARC-1 с частотой 200 МГц и меньше имеют ошибку
в микрокоде, из-за которой при запуске на компьютерах с такими процессорами 64-битной программы может произойти останов процессора из-за выполнения определеной комбинации команд. Чтобы избежать этой неприятности, при работе на таких компьютерах Solaris при загрузке выбирает 32-битное ядро, так как 64-битное приложение не сможет запуститься при работе с 32-разрядным ядром. Компания Sun утверждает, что комбинация команд, вызывающая нештатную остановку процессора, не может быть сгенерирована компилятором языка высокого уровня, и более того, даже практически не может встретиться в написанных на ассемблере программах, если только эта программа не написана специально для того, чтобы вызвать эту ошибку. В тех системах, где вероятность запуска такой "зловредной" программы мала, а пользователи работают только с обычными приложениями, полученными из надежных источников или собранных из исходных текстов языка высокого уровня типа С, администратор может явным образом потребовать у загрузчика выполнять загрузку 64-разрядного ядра при старте системы. Для этого надо изменить файл политики загрузки /plat f orm/plat form-name /boot, conf: ALLOW_64BIT_KERNEL_ON_UltraSPARC_l_CPU=true Инициализация ядра После того как ядро загружено в память и ему передано управление, оно начинает загрузку модулей. В этот момент ядро еще не умеет читать файлы из файловой системы UFS, так как драйвер файловой системы еще не загружен. Поэтому для чтения модулей ядро использует uf shoot. После того как загружено достаточно модулей для монтирования корневой файловой системы и самостоятельного продолжения загрузки, ядро выгружает uf shoot и продолжает загрузку самостоятельно. Ядро монтирует указанные в /etc/vfstab файловые системы и запускает процесс /sbin/init для перехода к режиму работы системы, который в /etc/inittab обозначен как initdefault. Процесс /sbin/init, в свою очередь, запускает те программы и скрипты, которые перечислены в /etc/inittab.
В Solaris 9 ядро настраивается динамически, т.е. изменить параметры ядра можно как при перезагрузке системы (изменив заранее файл конфигурации /etc/system ), так и во время работы, на лету Поэтому ядро называется динамическим. Оно состоит из небольшой статической части и множества модулей, которые загружаются динамически, по мере необходимости. Многие модули загружаются автоматически при старте системы, в то время как другие, например драйверы устройств, загружаются тогда, когда они понадобятся ядру т.е. в момент первого обращения к ним. Когда модуль уже не нужен, он может быть выгружен из памяти. Фактически, ядро выгружает модуль тогда, когда он не нужен, а память, которую он занимает, наоборот, нужна. Чтобы узнать, какие модули загружены в настоящий момент, следует выполнить команду modinfo Модули ядра хранятся в каталогах /kernel и /usr/kernel, специфичные для аппаратной платформы модули лежат в каталогах /platform/'uname -m'/kernel и /platform/' uname -i ' / kernel (если такие есть). Специфические указания того, какие модули загружать при старте системы, следует разместить в файле /etc/system , который считывается ядром при загрузке. В этом файле можно также указать дополнительные параметры, которые надо передать модулям при загрузке. В частности, /etc/systет используют, чтобы указать: • путь к каталогу где следует искать модули, загружаемые при старте системы; • модули, которые надо загрузить сразу а не ждать, пока они потребуются; • тип и имя устройства, с которого производится загрузка (корневое устройство); • параметры ядра, которые следует установить в значения, отличные от принятых по умолчанию.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Стандартный файл /е t с/sys t ет выглядит примерно так: *Set die search pafli for modules. This has a format *similar to die csh padi variable. If die module isn't *found in die first directory it tries the second and *so on. The default is /kernel /usr/kemel * * Example: *moddir: /kernel /usr/kemel /odier/modules * root device and root filesystem configuration: * *The following may be used to override die defaults *provided by die boot program: * *rootfc: Set die filesystem type of die root. * *rootdev: Set die root device. This should be a fully * expanded physical patiiname. Hie default is the * physical patiiname of die device where die boot * program resides. The physical patiiname is * highly platform and configuration dependent. * * Example: * rootfciifs * rootdev:/sbus@ l,f8000000/esp@0,800000/sd@3,0:a * *(Swap device configuration should be specified in */etc/vfctab.) * exclude: * *Modules appearing in die moddir patii which are NOT to be * loaded, even if referenced. Note tiiat ?exclude' accepts *eidier a module name, or a filename which includes die * directory. * * Examples: * exclude: win * exclude: sys/shmsys * forceload:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 * *Cause these modules to be loaded at boot time, (just *before mounting die root filesystem) rather than at *first reference. Note that forceload expects a filename *which includes die directory. Also note diat loading a *module does not necessarily imply diat it will be * installed. * * Example: * forceload: drv/foo * set: * * Set an integer variable in die kernel or a module to * a new value. * This facility should be used widi caution. * See system(4). * * Examples: * *To set variables in 'unix': * * set nautopush=32 * set maxusers=40 * *To set a variable named 'debug' in die module named *'test_module' * * set test_module:debug = 0x13 Листинг 9.1. Стандартный файл /etc/system 1. Всегда делайте резервную копию любого файла конфигурации перед внесением изменений! Дать команду ср /etc/system /etc/system, bak - дело двух секунд, зато это действие сохранит вам нервы и время - проверено поколениями сисадминов! 2. Никогда не вносите в файлы конфигурации изменений, если не уверены, что это надо делать, или сомневаетесь в том, что должно получиться в результате.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Если правилом (2) вы пренебрегли вопреки голосу разума, то неверный файл /е t с/system может вызвать ошибку при загрузке и система не загрузится. Если это случилось, то: • используйте команду загрузчика boot -а для интерактивной загрузки; • когда загрузчик спросит имя файла system , укажите имя резервной копии (например, /etc/system.bak); • если правило (1) вы тоже проигнорировали (похоже, в этом случае сегодня не ваш день!) и никакой резервной копии не имеете, то в качестве имени файла system указывайте /dev/null - тогда все значения будут приняты по умолчанию. Как видно из приведенного примера, большинство строк в /etc/system выглядят так: set параметр=значение Например, параметр ядра MAXUSERS устанавливается в значение 50 следующей командой: set maxusers = 50 Обратите внимание на то, что параметры статической части ядра (фактически, файла unix) устанавливаются без ссылки на модуль, а параметры, применимые к модулям, - с указанием имени модуля: set модуль:параметр=значение Длина команды в файле /etc/system не должна превышать 80 символов, строки, начинающиеся со знака звездочки или решетки "#" интерпретируются как комментарии. Чтобы проверить, какие значения имеют настраиваемые параметры ядра, следует использовать команду sysdef, которая показывает список обнаруженных устройств, системных устройств, загруженных модулей и значения настраиваемых параметров ядра: *
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 * Hostid * 0284521а * * i86pc Configuration * * * Devices * * +boot (driver not attached) memory (driver not attached) aliases (driver not attached) chosen (driver not attached) i86pc-memory (driver not attached) i86pc-mmu (dr (driver not attached) options, instance #0 packages (driver not attached) delayed-writes (driver not attached) itu-props (dr isa, instance #0 moflrerboard (driver not attached) PNP0501 (driver not attached) ]p (driver not attached) fdc, instance #0 fd, instance #0 fd, instance #1 (driver not attached) i8042, instance #0 keyboard, instance #0 mouse, instance #0 bios (driver not attached) bios (driver not attached) pci, instance #0 pci8086,7190 (driver not attached) pci8086,7191, instance #0 display, instance #0 pci20c,d041 (driver not attached) pci8086,7110 (driver not attached) pci-ide, instance #0 ide, instance #0 cmdk, instance #0 ide, instance #1 sd, instance #0 pci8086,7112, instance #0 pci8086,7113 (driver not attached) pcil014,138, instance #0 pcil014,138, instance #1 pcil436,440 (driver not attached) pcil014,136 (driver not attached) pcil0c,d041 (driver not attached)
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 used-resources (driver not attached) objmgr, instance #0 cpus (driver not attached) cpu, instance #0 (driver not attached) pseudo, instance #0 clone, instance #0 ip, instance #0 ip6, instance #0 tcp, instance #0 tcp6, instance #0 udp, instance #0 udp6, instance #0 icmp, instance #0 icmp6, instance #0 sad, instance #0 conskbd, instance #0 wc, instance #0 iwscn, instance #0 rts, instance #0 tl, instance #0 keysock, instance #0 spdsock, instance #0 sysmsg, instance #0 cn, instance #0 mm, instance #0 kstat, instance #0 log, instance #0 sy, instance #0 vol, instance #0 random, instance #0 ptm, instance #0 pts, instance #0 ksyms, instance #0 devinfo, instance #0 * * Loadable Objects * * Loadable Object Path = /platform/i86pc/kemel * drv/cpc hard link: sys/cpc strmod/vuid2ps2 strmod/vuid3ps2 strmod/vuidm3p strmod/vuidm4p strmod/vuidmSp drv/cadpl60 drv/smartii drv/elx drv/fd drv/fdc drv/logi drv/lp drv/msm drv/ata drv/dpt
drv/niscsi drv/pci-ide drv/sbpro drv/mlx drv/eisa drv/isa drv/kb8042 drv/pci drv/rootnex mach/uppc misc/bootdev misc/emul_80387 niisc/pci_autoconfig mmu/mmu32 mmu/mmu36 unix * * Loadable Object Padr = /kernel * drv/arp hard link: strmod/arp mach/pcplusmp mach/corollary mach/compaq drv/bofi drv/nca drv/clone drv/cn drv/conskbd drv/consins drv/devinfo drv/i2o_bs drv/i2o_scsi drv/icmp hard link: strmod/icmp drv/icmp6 hard link: strmod/icmp6 drv/ip hard link: strmod/ip drv/ip6 hard link: strmod/ip6 drv/ippctl
drv/ipsecah hard link: strmod/ipsecah drv/ipsecesp hard link: strmod/ipsecesp drv/iwscn drv/keysock hard link: strmod/keysock drv/Ucl drv/lofi drv/log drv/mm drv/openeepr drv/options drv/pci_to_i2o drv/poll drv/pseudo drv/ptc drv/ptsl drv/random drv/rts hard link: strmod/rts drv/sad hard link: strmod/sad drv/sgen drv/spdsock drv/st drv/sy drv/sysmsg drv/tcp hard link: strmod/tcp drv/tcp6 hard link: strmod/tcp6 drv/tl drv/udp hard link: strmod/udp drv/udp6 hard link: strmod/udp6 drv/wc genunix misc/busra misc/consconfig misc/des misc/fcsnap_if misc/gld misc/hpcsvc niisc/i2o_msg misc/ipc misc/kbtrans
Торчинский Ф.И., Ильин Е.С. misc/krtld misc/md5 misc/pcicfg misc/pcilip misc/rpcsec misc/scsi misc/seg_drv misc/seg_mapdev misc/shal misc/strplumb misc/swapgeneric misc/terminal-emulator misc/tUmod misc/ufs_log drv/clis drv/dnet drv/elxl drv/ieef drv/iprb drv/ncrs drv/pcn drv/pcscsi drv/sd drv/spwr drv/pcmem drv/mega drv/pcic drv/pcs drv/pem drv/pcelx drv/xsvc drv/cpqncr drv/pcram drv/md misc/md_hotspares misc/md_mirror misc/md_notify misc/md_raid misc/md_sp misc/md_stripe misc/md_trans misc/kgss/gl_kmech_krb5 drv/pcser drv/hpfc drv/pe drv/asy drv/cmdk drv/objmgr misc/dadk misc/gda misc/snlb misc/strategy misc/sysinit drv/sk98sol drv/pcata
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 drv/skfp niisc/klmmod niisc/klmops misc/nfs dlboot misc/kgssapi misc/rpcsec_gss drv/adp drv/audioens misc/amsrcl misc/audiosup misc/diaudio niisc/mixer drv/cadp drv/cpqhpc drv/hid drv/hubd drv/scsa2usb drv/uhci drv/usb_ac drv/usb_as drv/usb_mid drv/usbpm misc/hidparser misc/usba exec/elfexec exec/intpexec fc/cachefs fc/fifofc fc/hsfs fc/lofc fs/mntfs fc/procfs fc/sockfc fc/specfc fc/tmpfs fc/ufs ipp/ipgpc sched/TS sched/TS_DPTBL strmod/atun strmod/audimd5h strniod/airthshal strmod/bufmod strmod/connld strmod/deduinp strmod/encr3des
strmod/encrdes strmod/ldterm strmod/pckt strmod/pfmod strmod/pipemod strmod/ptem strmod/redirmod strmod/rpcmod hard link: sys/rpcmod strmod/timod strmod/tirdwr strmod/ttcompat strmod/tun sys/c2audit sys/doorfs sys/inst_sync sys/kaio sys/msgsys sys/pipe sys/pset sys/seinsys sys/slunsys fc/nfs hard link: sys/nfs fs/autofs fc/udfs strmod/usb_ah strmod/usbkbm strmod/usbnis strmod/hwc dacf^consconfig_dacf drv/i8042 drv/mouse8042 drv/symhisl drv/pci_pci drv/vgatext niisc/nfesrv misc/acpi_intp misc/pcmcia ipp/dlcosmk ipp/dscpmk ipp/flowacct
Торчинский Ф.И., Ильин Е.С. ipp/tokenmt ipp/tswtclmt misc/rsmops exec/coffexec * * Loadable Object Path = /usr/kemel * drv/rsm sched/FSS drv/winlock drv/pm drv/tnf strmod/u8koi8 strmod/u81atl strmod/u81at2 drv/vol drv/dump drv/fcsnap drv/kstat drv/ksyms drv/lockstat drv/logindmux drv/ptm drv/pts exec/javaexec fs/fdfe fc/namefs fc/pcfs fc/xmemfs sched/FX sched/FX_DPTBL scheddA sched/RT sched/RT_DPTBL strmod/rlmod strmod/telmod sys/acctctl sys/exacctsys sys/sysacct
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 drv/]lc2 drv/sppp drv/sppptun hard link: strmod/sppptun strmod/spppasyn strmod/spppcomp * * System Configuration * swap files swapfile dev swaplo blocks free /dev/dsk/cOdOsl 102,1 8 1048936 10-: * * Timable Parameters st- 3866624 maximum memory allowed in buffer cache (bufhwm) 2954 maximur 99 maximum global priority in sys class (MAXCLSYSPR1) 2949 maximum processes per user id (v.v_maxup) 30 auto update time limit in seconds (NAUTOUP) 25 page stealing low water mark (GPGSLO) 5 fcflush run rate (FSFLUSHR) 25 minimum resident memory for avoiding deadlock (MINARMEM) 25 minimum swapable memory for avoiding deadlock (MINASMEM) * * Utsname Tunables * 5.9 release (REL) sola node name (NODE) SunOS system name (SYS) Generic_112234-03 version (VER) * * Process Resource Limit Tunables (Current:Maximum) * 0x0000000000000100:0x0000000000010000 file descriptors * * Streams Tunables * 9 maximum number of pushes allowed (NSTRPUSH) 65536 maximum stream message size (STRMSGSZ) 1024 max size of ctl part of message (STRCTLSZ) * * IPG Messages module is not loaded * *
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 * IPC Semaphores module is not loaded * * * IPC Shared Memory module is not loaded * * * Time Sharing Scheduler Tunables * 60 maximum time sharing user priority (TSMAXUPRI) SYS system class name (SYS_NAME) Листинг 9.2. Файл sysdef Запуск процесса init Процесс init запускается ядром сразу после монтирования файловых систем из /etc/vfstab. После этого init осуществляет переход в тот режим выполнения, который ему указан как init de fault в файле /etc/inittab. Переход к этому режиму выполнения фактически означает запуск всех программ, которые перечислены в этом файле для указанного режима выполнения. Вот обычный файл /etc/inittab: >/dev/msglog 2<>/dev/msglog </dev/console >/dev/msglog 2<>/dev/msglog </dev/console >/dev/msglog 2<>/dev/msglog </dev/console >/dev/msglog 2<>/dev/msglog </dev/console >/dev/msglog 2<>/dev/msglog </dev/console ap::sysinit/sbin/autopush -f/etc/iu.ap ap::sysinit/sbin/soconfig -f /etc/sock2path fs::sysinit/sbin/rcS sysinit >/dev/insglog 2<>/dev/msglog </dev/console is:3:initdefault: p3:sl234:powerfoiiyusr/sbin/slmtdown-y-i5 -gO >/dev/msglog 2<>/dev/insglog sO :0 rwait:/sbin/rcO >/dev/msglog 2 o/dev/msglog </dev/console si :1 zrespawir/sbin/rcl s2:23wait/sbin/rc2 s3:3 rwait:/sbin/rc3 s5:5 rwait:/sbin/rc5 s6:6 rwait:/sbin/rc6 fw:Owait/sbin/uadmin 2 0 >/dev/msglog 2<>/dev/msglog </dev/console of:5waitysbin/uadmin 2 6 >/dev/msglog 2<>/dev/msglog </dev/console rb:6wait/sbin/uadmin 2 1 >/dev/msglog2<>/dev/nisglog</dev/console sc:234:respawn:/usr/lib/saf7sac -t 300 Листинг 9.3. Файл /etc/inittab
Торчинский Ф.И., Ильин Е.С. Сценарии запуска системы В каталогах /etc/rcN.d лежат скрипты запуска системы, то есть те скрипты, которые запускают и останавливают отдельные приложения. Имена файлов в каталогах имеют вид KnnNAME или SnnNAME, где пп -это целое положительное число, a NAME - имя приложения (обычно -демона). Файлы, начинающиеся с буквы S (start), - это скрипты для запуска приложения, файлы, начинающиеся с К (kill) - для завершения работы приложения. Номер пп определяет порядок запуска скриптов - вначале запускаются те, что имеют меньший порядковый номер. При переходе в тот или иной режим работы системы сначала выполняются скрипты останова приложений, а затем - скрипты запуска приложений того режима, в который происходит переход. При старте системы, естественно, выполняются скрипты запуска приложений режима initdefault. То, какие именно скрипты запускать, описано в файле /etc/rcN ( N может принимать значения от 0 до 6 и s), который, собственно, и вызывается процессом init . Файлы /etc/rcN являются символическими ссылками на файлы /sbin/rcN (см. файл /etc/inittab выше). Так, если initdefault =3, а каталог /etc/rc3.d содержит нижеуказанные скрипты, то первым выполнится S13kdc .master, затем S14 kdc, и так все по порядку (последним будет S 90 samba ): README S 13kdc.master S14kdc S15nfs.server S16boot.server S34dhcp S50apache S76snmpdx S77dmi S80mipagent
Торчинский Ф.И., Ильин Е.С. S81volmgt S89sshd S90samba Программы shutdown, init, poweroff, halt, reboot Для перевода системы из одного режима в другой, в том числе и для ее остановки, следует использовать специально предназначенные для этого программы. В Solaris есть несколько таких программ: /usr/sbin/shutdown /sbin/init /usr/sbin/halt /usr/sbin/reboot /usr/sbin/poweroff Stop+Аили Ll+A Программы /usr/sbin/shutdown, /sbin/init, /usr/sbin/halt выполняют завершение всех процессов в системе, записывают несохраненные данные на диск, и переводят систему в новый режим работы (в том числе и в состояние остановки). Программа /usr/sbin/reboot выполняет все вышеперечисленное и затем переводит систему в режим, определенный как in it de fault в/etc/inittab. Команда /usr/sbin/poweroff обеспечивает переход в режим номер 5, т.е. она эквивалентна команде init 5. Последняя команда (комбинация клавиш) доступна только в SPARC-системах, где соответствующие клавиши есть на клавиатуре, и посылаемый ими код отрабатывается как аварийный останов. Аварийный останов следует выполнять только в крайнем случае, так как при таком завершении работы системы все процессы прерываются немедленно, без всякой записи данных на диск, и последствия могут быть незавидными для тех, чьи данные не были сохранены.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Программа shutdown Самый общий способ остановки системы - программа shutdown, она есть в любом варианте UNIX. В Solaris эта программа имеет следующий синтаксис вызова: shutdown [-у] [щпериод ожидания] [-1режим] например shutdown -у -gO Эта команда выполняется только привилегированным пользователем для изменения режима работы системы. Обычно она применяется для перехода из многопользовательского режима (3) в другой режим. По умолчанию, команда переводит систему в режим 0, то есть состояние, в котором безопасно отключать питание. Это состояние называется состоянием останова (shutdown state). Команда посылает всем интерактивно работающим с системой пользователям предупреждающее сообщение о том, что система готовится к переходу в другой режим работы, и еще одно, окончательное сообщение, перед началом реальных действий по останову. Пользователи обязаны быстро завершить свои задачи после получения предупреждающего сообщения - на это у них по умолчанию есть одна минута. Если они проигнорируют предупреждение, их процессы будут принудительно завершены, а несохраненные данные потеряются. Программа shutdown берет стандартное значение периода ожидания после каждого из этих сообщений из файла /etc/def ault/shutdown, если он существует. Если shutdown не может найти файл или не может прочитать значение, она выдает предупреждение и устанавливает период ожидания в 60 секунд. По умолчанию, программа запрашивает подтверждение у запустившего ее администратора, прежде чем начинать остановку демонов и прекращение процессов. Ключи команды используются следующим образом: • -у - автоматически отвечает утвердительно на все запросы о
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 желании перезагрузить систему чтобы программа shutdown могла работать без вмешательства администратора; • -дпериод_ожидания - позволяет администратору явно указать период_ожидания (в секундах); • -±режим - задает режим, в который будет переведена система после предупреждений, если они выдаются. Файл /etc/default/shutdown используется для задания значений, специфичных для вашей системы. Программа shutdown ведет себя по-разному в зависимости от количества интерактивно работающих пользователей. Если в системе работает несколько пользователей, выдаются предупреждающее и окончательное сообщение, а также запрос на подтверждение остановки системы тому кто запустил программу shutdown. Если зарегистрирован только пользователь, запустивший команду shutdown, или если период ожидания задан равным нулю, предупреждающее сообщение не выдается. Если указать ключ -у, то запрос на подтверждение не выводится, так как предполагается положительный ответ на него. Помните, что систему всегда следует останавливать перед выключением компьютера, а пользователи должны завершить свои сеансы работы с файлами. В противном случае неизбежны потери данных. При запуске Solaris автоматически начинают работать различные системные службы (демоны), и перед завершением работы системы они должны корректно закончить свою деятельность. Команда shutdown требует от демонов завершения, а также инициирует запись на диск всех данных из файлового кэша и демонтирование всех файловых систем. Стоит отметить, что кроме неукоснительно корректного завершения работы системы с помощью shutdown или аналогичной по смыслу команды, есть еще один момент, о котором системный администратор должен помнить: стабильное электропитание. Если пьяный сантехник, ретивая уборщица или безмозглый помощник научены никогда не
выдирать провода из розеток и всегда выполнять shutdown, это значит, что осталось установить надежную систему бесперебойного питания. При подключении UPS к компьютеру убедитесь, что он настроен так, чтобы выдавать сигнал бедствия компьютеру при отключении электропитания; получив такой сигнал, система немедленно запустит shutdown и ее работа завершится безболезненно. Конечно, для систем круглосуточной работы надо иметь UPS с запасом энергии батарей, достаточным для работы в течение всего времени восстановления питания. Программа init С помощью программы init систему можно перевести в любой режим работы, часто эта программа используется для перехода в однопользовательский режим или перехода из него в многопользовательский. Для этого дается команда init режим_работы Кроме описанных выше режимов работы, можно указать режимы а, Ь, с и q. Режимы а, Ь, с - это псевдорежимы, они существуют только для того, чтобы можно было с помощью init запустить отдельные программы, которые отмечены в / etc/inittab как соответствующие данным режимам. Команда init q вызывает перечитывание процессом init файла /etc/inittab. Следовательно, если вы изменили этот файл и хотите, чтобы изменения оказали немедленное влияние на систему, следует дать команду init q. Программа telinit является символической ссылкой на ini t , и ее используют для передачи команд запущенной в данный момент программе ini t . В ответ на команду init 1 вы увидите нечто вроде:
Торчинский Ф.И., Ильин Е.С. INIT: New run level: 1 Changing to state 1. Unmounting remote filesystems: /vol nfs done. System services are now being stopped. May 14 13:13:22 unknown/usr/sbin/vold[475]: problem unmounting /vol; Interrupted system call <тут что-то еще....> Killing user processes: done. Change to state 1 has been completed. Type control-d to proceed with normal startup, (or give root password for system maintenance): Вывод, сопровождающий выполнение команды, приведен не полностью. Обратите внимание на последние две строки; здесь требуется либо указать пароль привилегированного пользователя root, либо нажать Ctrl-D, в последнем случае произойдет обычная загрузка в состояние initdef ault. Команда halt Для немедленной остановки системы (подобно shutdown -у -дО ) можно использовать командуй halt. От shutdown она отличается тем, что не предупреждает интерактивно работающих пользователей о скорой остановке системы. Эту команду можно смело давать в однопользовательском режиме или для остановки сервера, на котором никто, кроме администратора, не работает интерактивно. Команда halt перед остановкой выполняет запись кэшируемых данных на диск. Команда reboot Команда reboot обычно используется для завершения работы в однопользовательском режиме и перехода к многопользовательскому. Эта команда выполняется быстрее, чем shutdown, потому что она не
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 выполняет скрипты останова ( /etc/rcN. d/K* ) и не посылает никаких сообщений пользователям. Команда reboot выполняет запись кэшируемых данных на диск, так же, как и halt. С помощью reboot можно передать ключи загрузчику среды OpenBoot, например, для изменения конфигурации таблицы устройств следует дать команду reboot —rs Как видно из примера, чтобы отделить ключи самой reboot от тех, что буцут переданы загрузчику перед ключами последнего ставятся два дефиса подряд. Команда poweroff Команда poweroff переводит систему в режим выполнения 5 и эквивалентна init 5. Пользователи не оповещаются об изменении режима работы, скрипты завершения К* не выполняются, и в случае, если аппаратура компьютера поддерживает программное выключение питания, питание компьютера выключается. Последняя функция на компьютерах х86 доступна не всегда (или недоступна вовсе), по крайней мере, ноутбук IBM ThinkPad 390Х, который я использовал для эксперимента, без проблем выключался, работая под Windows ХР и, даже не пытаясь выключаться под Solaris 9, выдавал такие же надписи об останове, что и по команде halt: ... syncing file systems... done Type any key to continue Аварийная остановка системы В некоторых случаях операционная система перестает отвечать на запросы и не откликается даже на команду reboot. В таком случае говорят, что система "зависла". Это явление, надо признать, более знакомо пользователям Windows 98, нежели администраторам Solaris, но
тем не менее и с последним такое случается. Рекомендуют такую "зависшую" систему перезапустить, нажав Stop+A или Ll+А (для платформы SPARC). Это должно вызвать передачу управления к firmware. На физических терминалах, подключенных к последовательным портам, для этой цели возможно использовать клавишу Break. Некоторые версии OpenBoot поддерживают ряд клавиатурных команд (они вводятся нажатием комбинаций клавиш), которые изменяют поведение OpenBoot при загрузке. Эти клавиши надо нажимать сразу после включения системного блока и держать их несколько секунд до того, как мигнет светодиод на клавиатуре. К этим клавиатурным командам (keyboard chords) относятся: • Stop - пропустить исполнение процедуры начальной инициализации компьютера POST (Power-on self test); некоторые системы SPARC по умолчанию и так пропускают исполнение POST, тогда для того, чтобы выполнить POST, следует нажать Stop+D; • Stop+A - прерывание всех запущенных в настоящее время процессов и предоставление командной строки в среде OpenBoot; • Stop + D - включение режима диагностики (эквивалентно установке переменной diag-switch среды OpenBoot в значение true ); • Stop + F - включение интерпретатора Forth на первом последовательном порту; для продолжения инициализации системы дайте команду exit ; используется при нарушениях работы оборудования; • Stop+N - переустановка всех переменных NVRAM в значения по умолчанию. Для изменения комбинаций клавиш, назначенных клавиатурным командам, надо отредактировать файл /etc/default/kbd. В нем также можно разрешить или запретить клавиатурные команды. После модификации файла следует дать команду kbd -i для замены стандартных назначений на новые.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Следует отметить, что в зависимости от установок безопасности компьютера, изменение клавиатурных команд и доступ к командной строке OpenBoot могут быть запрещены, либо доступ к командной строке может предоставляться по паролю. Ручная работа по включению и выключению системы Как перезапустить зависшую систему Если система безнадежно зависла, следует: • нажать Stop+A или Ll+А (или другую комбинацию клавиш, если вы переопределили стандартные установки в /etc/def ault/kbd ); • дождавшись приглашения ok, дать команду sync для синхронизации файловых систем (записи кэшированных данных на диски); • дождавшись сообщения syncing file systems... done, нажать Stop+A или Ll+A еще раз; • дать команду reset в ответ на приглашение ок ; • после перезагрузки нелишне проверить, в какой режим работы загрузилась система: # who -г run-level 3 May 9 05:29 3 0 S Если ответ вас удовлетворил, можно начинать работу. Включение и выключение оборудования Помните, что выключать компьютер можно только после синхронизации файловых систем, иначе могут возникнуть потери данных и ошибки в файловой системе. При включении компьютера следует соблюдать такой порядок действий:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 • вначале включить периферийные устройства (принтеры, внешние диски и т.п.); • включить монитор; • включить системный блок (бывает, что он включается одной кнопкой с монитором, это допустимо). Ц В тексте мы употребляем слова "команда" и "программа", причем часто - как синонимы. Это не является ошибкой - большинство команд UNIX выполняются одноименными программами.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Командные процессоры Лекция рассказывает о командных процессорах. Рассматриваются использующиеся в разных системах командные интерпретаторы, в том числе и самый удобный из них - bash, присутствующий в Solaris 9 в стандартной поставке системы. Семейство командных процессоров При интерактивной работе с системой пользователь постоянно сталкивается с необходимостью отдавать ей команды. В CDE это можно делать, выбирая мышью требуемые пункты меню. В текстовом окне или текстовом режиме команды набираются вручную в командной строке. После нажатия Enter производится интерпретация и синтаксический анализ команды (то есть определяется, где - имя программы, где -ключи, где - аргументы, где - спецсимволы ). Затем буцут запущены один или несколько процессов. В UNIX эту работу выполняет программа, которая называется командным процессором ( shell ). Иногда командный процессор называют шеллом или интерпретатором команд (последнее неточно, потому что круг задач командного процессора шире, чем интерпретация команд). Существует несколько широко распространенных командных процессоров и еще несколько малораспространенных, специфичных для конкретных вариантов UNIX. В Solaris принято использовать ksh, csh или bash. Первый в мире UNIX командный интерпретатор в 1976 году написал Стив Баурн (Steve Bourne), когда он работал в Bell Laboratories в AT&T. По другим данным, Стив написал его в 1974 году. Через некоторое время в University of California Berkeley был написан C-shell (csh, произносится "си шелл"), а потом число разных командных процессоров стало быстро расти. Самые популярные из них сейчас - это Bourne again shell (bash), разработанный в рамках проекта GNU, и Korn shell (ksh) Дэвида Корна (David Кот). C-shell был разработан студентом Университета в Беркли (University of
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 California Berkeley) Биллом Джоем (BUI Joy), который по окончании Berkeley основал компанию Sun Microsystems. Еще Билл Джой написал самый известный в UNIX редактор vi и был одним из авторов первой версии BSD UNIX. Таблица 10.1. Популярные командные процессоры в UNIX Название Имя в системе Плюсы Минусы мало средств редактирования Bourne sh обладает легким и удобным языком введенных ранее команд, Shell скриптов, прост и понятен нет возможности управления заданиями сложный язык С Shell csh есть управление заданиями и приемлемое редактирование введенных ранее команд скриптов, некоторые версии содержат много ошибок редактировать Korn Shell ksh совместим с sh по командам и содержит ряд возможностей csh, имеет средства редактирования команд, введенных ранее (history) команды неудобно, язык скриптов так развит, что все трудно запомнить похож на ksh по возможностям, имеет легкий удобный интерфейс, простое интуитивно ясное Bourne Again Shell bash редактирование введенных ранее команд, стандарт де-факто в Linux, в Solaris 9 устанавливается по умолчанию, но не является пока не обнаружено
командным процессором по умолчанию В конце 1970-х годов был написан tcsh - расширение csh, совместимое с ним по командам, макроопределениям и синтаксису языка скриптов. Кен Грир (Ken Greer) начал работу над tcsh в Университете Карнеги-Мелон (Carnegie-Mellon University), а продолжил ее Пол Плэйсвэй (Paul Placeway) в восьмидесятые годы в Университете Огайо (Ohio State). Основные отличия tcsh от csh сводятся к усовершенствованию редактирования командной строки и ряду дополнений в помощь создателям скриптов (например, переменные среды окружения, доступные только для чтения). В последних версиях UNIX csh обычно является символической ссылкой на tcsh, а оригинальный csh в поставку не включается, чтобы не шокировать пользователей пещерным уровнем редактирования командной строки. В Solaris по умолчанию устанавливаются несколько командных процессоров, в том числе sh, csh, tcsh, bash и другие; командным процессором по умолчанию является sh. Командный процессор призван выполнять в системе нижеперечисленные задачи: • интерпретация команд пользователя, в том числе разбор командной строки ; • запуск программ; • организация перенаправлений потоков между процессами; • интерпретация языка скриптов и их выполнение; • управление заданиями ; • интерпретация шаблонов имен файлов; • подстановка имен файлов в командную строку. Некоторые командные процессоры поддерживают не все эти функции (см. табл. 10.2). Таблица 10.2. Основные задачи shell'oB Функция History sh csh tcshksh bash Нет Да Да Да Да
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Псевдонимы Нет Да Да Да Да Скрипты Да Да Да Да Да Подстановка и завершение имен файлов Нет Да* Да Да* Да Редактирование командной строки Нет Да Да Да* Да Управление заданиями Нет Да Да Да Да * - по умолчанию выключено Запуск командного процессора Командный процессор запускается либо при входе пользователя в систему и в дальнейшем пользователь отдает команды в его командной строке, либо из какой-нибудь программы (по команде пользователя). Частным случаем является запуск командного процессора из другого командного процессора. Например, вы работаете в sh и хотите получить более удобные средства редактирования командной строки ; для этого вызывается bash. Тогда вы просто набираете команду bash и оказываетесь в среде командного процессора bash, запущенного по этой команде. При этом обычно меняется вид приглашения командной строки. Каждый командный процессор при запуске пытается выполнить свои стартовые файлы, вначале системные (общие для всех пользователей), а затем пользовательские. Общие файлы лежат в /etc, индивидуальные - в домашнем каталоге пользователя. Если командный процессор запускается при входе пользователя в систему (в таком случе он называется login shell - командный процессор, запущенный при входе в систему), то после стартовых файлов он выполняет еще и login-файлы в том же порядке: сначала общий login-файл из /etc, затем -индивидуальный, из домашнего каталога. Login-файлы - это тоже стартовые файлы командного процессора, все стартовые файлы фактически представляют собой скрипты на языке командного процессора и служат для инициализации среды окружения командного процессора для конкретного пользователя. Настройка командного
процессора для пользователя позволяет, например, задать короткие псевдонимы для длинных часто используемых команд и т.п. Некоторые командные процессоры при входе в систему выполняют сначала login-файлы, а затем - стартовые файлы, это зависит от того, как они были скомпилированы. Таблица 10.3. Стартовые файлы командных процессоров shell стартовые файлы sh , /etc/csh.cshrc, csh . ~. cshrc ksh login-файлы /etc/profile, -“/.profile /etc/csh. login, -“/.login /etc/profile, -“/.profile bash-/.bashrc /etc/profile, ~/ .bash_profile, -“/.profile Другие командные процессоры принимаются за выполнение каких-либо стартовых файлов только при входе пользователя в систему. У командного процессора обычно есть ключ, который можно дать, чтобы сымитировать вход в систему и заставить его выполнить login-файлы. Командный процессор bash, в отличие от других, использует более сложный алгоритм выполнения стартовых и login-файлов. Если он запущен как login shell, то он выполняет /etc/profile, если такой файл есть. Затем делается попытка выполнить ~. bash_prof ile. Если такого файла нет, bash пытается выполнить файл ~/.bash_login, а если нет и такого файла, то выполняется -/.profile. Если bash запущен не как login shell, то при старте он выполняет только файл ~/ .bashrc. Если же bash был запущен как sh (т.е. sh является символьной ссылкой на bash ), то при старте он ведет себя так же, как и s h. История команд Все командные процессоры запоминают введенные пользователем команды (их список называется историей команд). Во время сеанса работы командный процессор хранит историю команд в памяти, а по
окончании работы записывает их в файл на диск. Файл истории команд хранится в домашнем каталоге пользователя. В sh, csh, tcsh он называется -“/.history, в bash - ~/.bash_history, в ksh -~/.shhistory, ав бесплатной версии Коги Shell (public domain Korn shell - pdksh) его по умолчанию нет вообще. Многие командные процессоры позволяют повторить вызов ранее введенной команды по ее номеру или начальным буквам. О том, как это делать, подробнее сказано ниже в разделе "Повторение и модификация ранее введенных команд". Имейте в виду, что по умолчанию файл истории команд может быть доступен для чтения не только тому, кто вводил команды, но и другим пользователям. Чтобы не сделать систему уязвимой, следует избегать ввода каких бы то ни было паролей в командной строке. Например, возможно вызвать браузер lynx или программу доступа к серверу баз данных my sql, указывая пароль в командной строке: lynx ftp//user:password@URL mysql -u root -p password Так как эти команды сохранятся в файле истории вместе с другими, кто-то потом сможет прочесть их и узнать какие-то из ваших паролей. Файл истории команд ограничен по размеру. По умолчанию, bash хранит 500 команд, tcsh - 1000, csh - 100, sh - в зависимости от версии. Часто sh не создает файл .history вовсе, и дает доступ только к командам, которые были введены в течение текущего сеанса работы с ним. Можно изменить число хранимых команд, указав иное значение переменной, в которой оно хранится. Таблица 10.4. shell переменная значение по уполчанию sh HISTSIZE не определено csh history 100 ksh HISTSIZE 128 bash HISTFILESIZE 500
Торчинский Ф.И., Ильин Е.С. Псевдонимы команд Псевдонимы - это сокращения для часто используемых длинных команд или их последовательностей. Если вы часто делаете однотипные опечатки при вводе команд, можно создать такие псевдонимы, чтобы команда с опечаткой была псевдонимом правильной команды, например: alias telent telnet Создать псевдоним очень просто: alias псевдоним команда Команда может быть последовательностью команд с ключами и аргументами, тогда ее следует заключить в апострофы: alias 11 'Is -Г Такая команда приведет к тому что каждый раз при вводе 11 командный процессор буцет фактически выполнять команду 1s-1 Синтаксис определения псевдонимов в разных командных процессорах разный. Псевдонимы обычно определяются в стартовых файлах. Синтаксис команд alias: командный процессор команда alias ключ для экспорта sh alias U='ls -1' csh alias 11 'Is -Г ksh alias ll=’ls -1' -X bash alias ll='ls -Г Так же, как и переменные среды окружения, псевдонимы могут экспортироваться, т.е. передаваться "по наследству" запускаемым из данного сеанса работы другим командным процессорам. Для этого используются ключи команды alias. Команда alias является встроенной командой командного процессора.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Отмена назначенного псевдонима выполняется командой unalias псевдоним Переменные среды окружения Как отмечалось в лекции 7, каждый процесс имеет свою среду окружения - специальную область, в которой хранятся имена переменных и их значения. Если нужно использовать значение переменной в командной строке, применяется конструкция $имя_переменной Например, echo $TERM выведет на экран значение переменной TERM. Пользователь может определить свои собственные переменные. Новая переменная появляется, как только вы даете команду присвоить значение несуществующей переменной. Переменная не имеет типа, так как считается, что все переменные имеют тип "строка". При этом если попытаться выполнить арифметическую операцию с переменными, имеющими значение неких чисел, то такая строка буцет преобразована в число, число использовано в операции и результат преобразован обратно в строку. Попробуйте: i=2 j=3 ехрг $i \* $j Присвоение переменной значения во всех командных процессорах, кроме csh, выполняется командой VAR=value В csh команда иная: set VAR=value или
Торчинский Ф.И., Ильин Е.С. setenv VAR value Переменные со специальными названиями типа DISPLAY, TERMINFO и т.п. используют программы, которые проверяют свою среду окружения на наличие таких переменных и их значений. Поведение таких программ может изменяться в зависимости от значения переменных. Переменные могут экспортироваться, т.е. передаваться от процессов-родителей процессам-потомкам. Для экспорта переменной надо дать команду export имя_переменной Если надо удалить переменную среды окружения, можно присвоить ей пустое значение (это неравнозначно удалению, но иногда этого достаточно), а можно удалить ее вовсе командой unset. В tcsh есть возможность создавать переменные только для чтения, без права изменения значений, для этого служит команда set -г имя=значение Кроме того, в tcsh можно присвоить переменной значение в виде списка слов, к которым потом можно обращаться по номеру слова, начиная с 1: set var=(hello world) echo {$var[l]} hello echo {$var[2]} world Для вывода на экран списка всех переменных с их значениями надо дать команду set без параметров. Предопределенные переменные Предопределенные переменные содержатся в среде окружения
командного процессора независимо от установок, которые может сделать пользователь в стартовых скриптах. Имена предопределенных переменных среды окружения во всех командных процессорах, кроме csh (и, в некоторых случаях, tcsh ), пишутся символами верхнего регистра: PATH, USER, TERM, PSI, PS2. В именах переменных среды окружения используются буквы латинского алфавита, пользовательские, добавленные по ходу работы переменные в скриптах принято называть именами из символов нижнего регистра для того, чтобы отличать переменные, введенные разработчиком системы, от тех, что вводит пользователь или требует прикладная программа. В любых командных процессорах обязательно заранее определены переменные, указанные в таблице 10.5. Таблица 10.5. Предопределенные переменные Переменная Смысл НОМЕ домашний каталог пользователя SHELL текущий shell PS1 вид приглашения shell'a PS2 вид приглашения "продолжение команды" TERM тип терминала пользователя USER или LOGNAME имя пользователя PATH список каталогов, в которых надо искать исполняемый файл, когда пользователь запускает программу, указывая только ее имя, но не путь. Каталоги разделяются двоеточиями С другой стороны, многие другие переменные определяются не во всех командных процессорах. Посмотреть список всех переменных среды окружения обычно можно по команде set Любой скрипт может быть вызван с аргументами, которые в скрипте называются позиционными параметрами. К аргументам с первого по
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 девятый следует обращаться как к $1. .$9. Значение $0 - это имя самого скрипта, по которому его вызвали. Один и тот же скрипт может быть вызван с разными именами, например, если с ним установлены символические связи (symbolic links). Команда shift n(n - положительное или отрицательное смещение) позволяет двигать "окошко" $ 1 . . $ 9 по всему массиву аргументов скрипта вперед и назад, если аргуменов больше девяти. Shift без параметров эквивалентен shift 1. В csh shift умеет сдвигать "окно" только на одну позицию вперед. Кроме вышеописанных переменных обычно определены следующие: Переменная Смысл $ номер процесса текущего shell'a * все позиционные параметры _ последняя вызванная команда 1,2,..9 один позиционный параметр ? число позиционных параметров Подстановка имен файлов. Шаблоны При запуске программ из командной строки часто требуется передать им в качестве аргументов одно или несколько имен файлов. Эти имена уцобно задать шаблоном - например, /var/log/messages . ?, что означает все файлы из каталога /var/log, имена которых начинаются на messages., а завершаются любым символом. Любой командный процессор умеет подставлять в командную строку имена файлов, соответствующие шаблону: Is -l/var/log/messages.? Символ "?" трактуется командным процессором как шаблон, которому соответствует один любой символ. Обратите внимание на то, что командный процессор не понимает регулярных выражений. Его шаблоны похожи на регулярные
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 выражения, но это - две совершенно разные вещи. Для обработки регулярных выражений в любом приложении используется стандартная функция regex, а шаблоны имен файлов командный процессор обрабатывает по-своему Командный процессор распознает и интерпретирует следующие символы в шаблонах (такие символы называются метасимволами, metasymbols или wildcards): * любая подстрока, в том числе пустая. ? один любой символ. [-] один любой символ из списка (например, [avgf] ) или диапазона (например, [ а - z ] ). Порядок подстановки имен файлов по шаблону таков: вначале командный процессор находит все файлы, имена которых соответствуют шаблону а затем подставляет имена всех этих файлов через пробел в строку в то место, где был написан шаблон. Таким образом, если в текущем каталоге есть файлы money, с, money. bak, money. ob j и wallet. x, то команда Is -1 mon* будет раскрыта в Is -1 money.c moneybak money.obj Подстановка результата выполнения Иногда возникает необходимость отыскать в системе файлы по некоему признаку и со всеми этими файлами выполнить одинаковое действие. Например, во всех файлах * . html заменить подстроку Siemens на Nixdorf. Если это требуется сделать только для файлов, лежащих в одном каталоге, то задача решается достаточно просто. Здесь мы приведем пример скрипта для Bourne Shell, но аналогичный скрипт легко написать и для других командных процессоров:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 for i in *.html do sed 's/Siemens/Nixdorfi'g' <$i>tmp mv tmp $i done Переменная i последовательно принимает значения из списка, т.е. на каждой итерации цикла она имеет разное значение, список будет содержать имена всех файлов текущего каталога, соответствующих шаблону * . html. Команда sed обеспечивает замену всех вхождений Siemens на Nixdorfj причем во входной поток sed перенаправляется содержимое очередного файла, в зависимости от значения переменной i. Результат направляется в файл tmp, а команда mv обеспечивает переименование файла tmp в нужное имя, для замены старого файла из списка * . html новым. Что делать, если такую процедуру надо проделать со всеми файлами * . html всего дерева каталогов, начиная с текущего каталога? В UNIX есть уникальная возможность, которая реализована в любом командном процессоре: можно "вложить" одну команду в другую так, чтобы вначале выполнилась одна, а затем результат ее выполнения был подставлен в командную строку для вызова второй команды. Итак, мы хотим найти все файлы *. html в поддереве файловой системы, начиная с текущего каталога. Используем find для поиска: find. -name Теперь воспользуемся конструкцией "подстановка результата выполнения" и перепишем наш скрипт для замены подстрок: for i in' find . -name "*.html" ' do sed ’s/Siemens/Nixdorfig' <$i >tmp mv tmp $i
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 done Команда, заключенная в ' " (обратные апострофы), выполняется первой, а результат ее выполнения подставляется в командную строку. Затем командная строка запускается на выполнение. Завершение имен файлов Функция "подсказки" (можно сказать также - "завершения") имен файлов (file name completion) позволяет набрать только часть имени существующего файла и затем нажать клавишу 'Tab". В ответ на это командный процессор "закончит" набор имени файла. Например, если надо обратиться к файлу /usr/sadm/admin/bin/printmgr, то достаточно набрать /usr/sa<Tab>dm/a<Tab>dmin/b<Tab>in/pr<Tab>intmgr Все, что в этом примере выделено жирным шрифтом, набираете вы, а все, что не выделено - подставляет командный процессор. Завершение имен файлов реализовано только вЬазЬи tcsh. Тем, в чьей системе есть файлы с длинными уникальными именами, подсказка имен файлов отлично экономит время. При двойном нажатии 'Tab" выводятся все возможные варианты завершения имени файла. Например, если в каталоге есть два файла, имена которых начинаются с букв msg: msgO 1 . txt и msg02 . txt и надо просмотреть один из них, можно набрать more msg<Tab><Tab> Командный процессор bash (или tcsh ) подскажет: msg01.txt msg02.txt Теперь достаточно набрать цифру 1 или 2, чтобы указать, какой именно файл требуется, и еще раз нажать 'Tab" для окончательного завершения имени. Если после двойного нажатия 'Tab" bash видит слишком много
возможных вариантов имен, он спросит There аге 1102 possibilities. Do you really wish to see them all? (y or n) Стоит ответить n: так много имен не уместится на экран. Средства редактирования командной строки Редактировать командную строку приходится для того, чтобы исправить что-то в только что набранной строке. В sh нельзя передвинуть курсор в любую позицию в строке, в остальных командных процессорах -можно. Удобнее всего редактировать командную строку в bash. В каждом командном процессоре реализована возможность стирания последнего символа клавишей 'backspace" и стирания строки целиком комбинацией клавиш "Ctrl-U". В самых первых реализациях командных процессоров средства редактирования были еще более примитивными (например, удаление всей строки целиком выполнялось вводом @ и последующим вводом строки заново, при этом все набранные символы все равно оставались на экране). Сейчас такие архаические приемы редактирования не применяются ни в одном командном процессоре. Bbashntcsh можно перемещаться вперед и назад по уже введенным символам в строке с помощью "стрелок", переместить курсор в середину и в начало строки. Командный процессор bash после нажатия Enter принимает всю строку целиком, независимо от того, в какой позиции строки находился курсор при нажатии Enter. Например, можно вернуть курсор к середине строки, если ввод оказался неверным, исправить ошибку и тут же нажать Enter, чтобы запустить команду на выполнение. В некоторых старых версиях командных процессоров в этом случае следует исправить строку перейти к ее концу для ввода команды и только после этого нажать Enter. В ksh редактирование по умолчанию выключено, его надо включить нажанием клавиши Esc. После этого командная строка буцет редактироваться средствами того редактора, имя которого задано в
переменной среды окружения VISUAL или EDITOR. По умолчанию этс редактор vi. Трудно найти такого системного администратора, которому такой громоздкий и неудобный способ исправления команд покажется удачным: ведь ко всему прочему ему придется помнить о переключении режимов редактирования строки ввода! В csh и tcsh редактирование командной строки выполняется так же, каки в bash. Повторение и модификация ранее введенных команд Иногда бывает удобно повторить команду которую вы недавно уже вводили; особенно это помогает при вводе длинных команд с одинаковыми аргументами. В тех случаях, когда повторяемая команда должна немного отличаться от оригинала, следует модифицировать запись о ранее введенной команде и запустить на выполнение свежий вариант. Например, введя lyxn -р proxy.spb.edu:3128 www.macropulos.cam.ac.uk вы получите в ответ "command not found", потому что, собираясь запустить lynx, вы допустили опечатку в имени программы. Не повторять же теперь ввод всей длинной строки! Если бы опечатка была в конце строки, можно было бы вызвать строку с предыдущей командой клавишей "стрелка вверх", но здесь опечатка в начале строки, и после вызова выполненной строчки придется еще двигать курсор в ее начало. Есть более короткий вариант, доступный в csh, tcsh и bash: ЛхпЛпх Эта конструкция требует у командного процессора повторить предыдущую команду заменив первой вхождение подстроки хп на пх. И это все! В csh, tcsh, bash есть и другие средства модификации командной строки. Они перечислены ниже:
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 • ! п ( п - число) повтор п-ной команды из истории команд^ ; • ! ! повтор последней команды; • ! str выполнение последней команды, начинающейся на str. Командные процессоры csh и tcsh по-разному интерпретируют конструкцию Instr, например, ' ! 67 г ’. Для csh это - команда номер 67, в конец которой добавляется г перед выполнением, а для tcsh это - последняя начинающаяся на 67г команда. Такой синтаксис введен в tcsh для удобства повторения команд, имена которых начинаются с цифр. Чтобы заставить tcsh вести себя подобно csh, нужно перед числом поставить обратный слэш, экранирующий его специальное значение: ' ! \ 6 \ 7 г 1. В bash повторение команд выполняется так же, как и в csh. Дополнительно можно использовать клавиши "вверх" и "вниз" для переходов между командами, введенными раньше или позже. В ksh для повторения команд используют встроенную команду г, а в sh - команду fc, при этом в sh можно вызвать только такую команду которая была введена в текущем сеансе, потому что s h не ведет файл истории. Работа с заданиями Работая в режиме командной строки, вы можете запустить несколько программ одновременно, например, организовав конвейер. Совокупность таких одновременно запущенных из среды командного процессора процессов называется заданием . Задание можно приостановить, потребовать его продолжения или завершить его. Задание может выполняться как в фоновом режиме, так и в интерактивном. Для управления заданиями большинство командных процессоров (точнее, все кроме Bourne Shell) имеют встроенные команды: j obs, f g, bg. Посмотреть список запущенных ранее заданий можно с помощью команды jobs. Для вывода идентификаторов (PID) процессов, входящих в задание, следует использовать команду
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 jobs -1 Например, запускаем программу find для поиска файлов *.gif, список найденных файлов перенаправляем в -/gifs (т.е. наш домашний каталог, файл gifs ): find / -name > ~/gifs & [1] 33151 jobs -1 [1] + 33151 Running find / -name "*.gif" > ~/gifs & To, что в квадратных скобках [ ], и есть номер задания. Задания имеют уникальные номера в пределах текущего сеанса работы с shell-ом. Задание можно перевести в интерактивный режим командой fg (foreground): fg %1 # %1 - номер задания. Теперь задание выполняется в интерактивном режиме. Можно остановить его, переведя в режим suspend (sleeping, спящий): <Ctrl-z> [1] + Stopped find / -name "*.gif' > ~/gifs & Теперь можно продолжить выполнение задания в фоне командой Ьд (background): bg%l С помощью команд управления заданиями можно переключать программы между интерактивным и фоновым режимом выполнения. Если вы случайно забыли поставить знак & в конце команды, но собирались запустить ее в фоновом режиме, еще не все потеряно! Следует нажать Ctrl-Z, чтобы 'Усыпить" программу, а затем запустить задание в фоновом режиме с помощью команды Ьд. Команды Ьд и fg могут принимать разные аргументы, но знак %, за которым следует число, в любом командном процессоре интерпретируется как ссылка на номер задания.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Язык написания скриптов В командных процессорах используются всего два типа языков. Это sh -подобный языки csh -подобный язык. Первый тип поддерживается в sh, ksh, bash. Второй - в csh и tcsh. Язык sh более удобен и стандартен, на нем написаны практически все скрипты во всех системах UNIX, включая стартовые скрипты системы. Язык csh по синтаксису ближе к языку программирования С, но используется для скриптов реже. Однако в некоторых случаях программное обеспечение включает в себя скрипты на языке csh, поэтому здесь мы разберем вкратце конструкции обоих языков. Первой строкой любого скрипта должна быть строка, содержащая управляющий комментарий специального вида: #!полное_имя_командного процессора например #!/bin/sh Этот комментарий требует выполнить скрипт с помощью указанного командного процессора. По умолчанию скрипт выполняется в среде /bin/sh, даже если он запущен в среде другого командного процессора. Если вы работаете в tcsh и хотите, чтобы ваши скрипты запускались в tcsh, следует обязательно указать полный путь к tcsh в управляющем комментарии. Язык sh В языке sh существуют операторы ветвления и циклов. Ниже дано описание этих операторов. В нем жирным шрифтом выделены ключевые слова. Конструкция "команды" подразумевает одну или несколько команд командного процессора или вызовов программ, которые отделяются друг от друга разделителями (точкой с запятой или переводом строки). При вводе многострочных операторов в командной строке, командный процессор начинает новую строку приглашением
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 "продолжение команды" (его вид определяется значением переменной среды окружения PS2 или prompt2 ). В операторах циклов допустимы команды break (прерывание цикла, управление передается за конец цикла) и continue (передача управления на начало цикла, переход к следующей итерации). Эти команды действуют одинаково в любых командных процессорах, так как они реализованы и в языке sh, и в языке csh. Оператор ветвления if: if условие Шен команды else команды fi В bash, ksh и новых версиях sh возможна конструкция elseif (вложенное ветвление): if условие Шен команды elseif условие then команды fi else команды fi Оператор множественного ветвления case: case значение_переменной in значение!) команды; break; значение2) команды; break; значениеЗ) команды; break; *) команды; esac Знак "звездочка" ( * ) означает "все остальные значения", т.е. если значение переменной не равно ни значению!, ни значению2, ни
Торчинский Ф.И., Ильин Е.С. значениюЗ. Операторы цикла while (выполнять, пока условие истинно) и until (выполнять до тех пор, пока условие станет истинным): while условие do команды done until условие do команды done Все эти операторы содержат неотъемлемый элемент, обозначенный нами как условие. Это - вызов любой команды (в том числе другой скрипт или конвейер), возвращающей код завершения. Условие считается истинным, если код завершения равен нулю, и ложным - если код завершения не равен нулю. Любая программа в UNIX возвращает код завершения: нулевой - в случае успешного выполнения и ненулевой - в противном случае. Значения кодов завершения программ можно выяснить с помощью руководства к ним, например, man. Для проверки условий, относящихся к объектам файловой системы, применяется программа test. В некоторых командных интерпретаторах есть встроенная команда test, иногда test - это отдельная программа. С помощью test часто проверяется наличие файла или каталога в файловой системе: if test -е имя_файла then echo <файл существует^ Язык sh допускает конструкцию [ ] вместо команды test: if [ -е имя_файла ] then echo <файл существует^ Эта конструкция эквивалентна вышеприведенной. С помощью test и [ ] можно проверять различные условия, полный список которых содержится в man test или man sh, man bash.
Некоторые программы всегда возвращают код завершения ноль. Это легко использовать для организации бесконечных циклов. Такие циклы могут понадобиться для перезапуска процессов, имеющих тенденцию к неожиданному и ненужному завершению. Например, так можно запускать процесс pppd для соединения с провайдером по выделенной или коммутируемой линии: while sleep 10 do /usr/sbin/pppd done Программа sleep всегда будет возвращать ноль, так что цикл никогда не прервется и будет исправно запускать pppd всякий раз, как только он завершится, например, из-за ошибки связи. Десять секунд ожидания добавлены просто для того, чтобы было время переждать неблагоприятную ситуацию, из-за которой произошла ошибка. В Solaris и других системах System V такое применение менее полезно, чем в BSD-системах, так как того же эффекта можно добиться, указывая вызов pppd в /etc/inittab с указанием режима запуска respawn (запустить, если завершится). Оператор for (цикл повторяется для каждого значения из списка): for имя_переменной in список do команды done Оператор цикла for используется особенно часто, например, для однотипной модификации нескольких файлов сразу Предположим, надо во всех файлах * . html в текущем каталоге изменить ссылку на файл с фотографией: for i in *. html do sed 's/otello.gifi'dezdemona.gifi'g' $i >tmp mv-f tmp $i done
Поскольку sed не меняет файл, а лишь выдает измененный текст в свой выходной поток, приходится перенаправлять вывод во временный файл tmp (назовите ваш файл по вкусу от названия ничего не зависит) и затем переименовать tmp в файл с тем же именем, что у исходного файла. В момент переименования старый файл, естественно, исчезнет. При вызове sed: следует писать именно $i, а не просто i, чтобы командный процессор подставил в командную строку значение переменной i, а не символ i. Сразу перенаправить вывод в файл, имя которого указывается как $i, нельзя, поскольку перенаправление вывода в существующий файл вызовет уничтожение его прежнего содержимого. Это значит, что одновременное перенаправление ввода и вывода из/в один и тот же файл недопустимо. Программе mv дается ключ -f, который требует от нее выполнить работу не задавая вопросов типа "а вы действительно хотите уничтожить файл?" Для вывода информации в sh принято использовать команду echo. Эта команда печатает в стандартный выходной поток свои аргументы, а в конце вывода выполняет перевод строки. Команда echo -п строка выводит строку и не добавляет перевод строки в конце. Для ввода информации в скриптах на языке sh используют оператор read: read name echo "Name is $name" Язык, реализованный в вашем командном процессоре, может быть богаче, чем описанный здесь минимальный стандарт. Для получения дополнительной информации обратитесь к man по вашему командному процессору.
Торчинский Ф.И., Ильин Е.С. Язык csh В операторах циклов языка csh можно использовать команды break (прерывание цикла, управление передается за конец цикла) и continue (передача управления на начало цикла, переход к следующей итерации) также, каки в языке sh. Языки sh и csh отличаются синтаксисом операторов и некоторыми командами. Помните, что: • в csh имена системных переменных среды окружения пишутся буквами нижнего регистра; • в csh нет оператора until ; почти все операторы называются иначе, чем в sh. В csh и tcsh есть свои правила вычисления логических выражений для того, чтобы выяснить истинность или ложность условия в операторах цикла и ветвления. Команда test есть в любом языке, независимо от типа командного процессора: if (условие)команда или if (условие) then команды eke if (условие) then команды eke команды endif Допускается любое число вложенных операторов elseif, при этом нужен только один оператор endif. Отступы в операторе ветвления не важны, но операторы else и endif должны начинаться с новой строки, оператор if должен следовать за else или начинаться с новой строки.
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Оператор множественного ветвления в csh называется switch: switch (строка) case строка1: команды breaksw case строка2: команды breaksw default: команды breaksw endsw Опреатор switch в csh выполняется подобно оператору switch из языка С, команда breaksw передает управление за оператор endsw. Оператор while действует также, как while в sh, однако синтаксис у него немного иной: while (условие) команды end Оператор цикла for в csh назвали foreach, подобно одноименному оператору из Perl: foreach имя_переменной (список) команды end Если оператор foreach вводится в командной строке, то csh на каждой новой строке выводит приглашение "foreach?" Это означает, что ввод оператора еще не закончен и его можно продолжать, ввод завершается финальным словом end в начале строки. Для ввода информации в скриптах на языке csh используют конструкцию $< (подстановка строки из входного потока): echo " Enter your name:'
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 setenv name $< echo "Name is $name" Установка приглашения shell Командный интерпретатор имеет несколько вариантов приглашений на разные случаи жизни. По умолчанию в sh - это $, в csh - %. Привилегированный пользователь ( roo t ) имеет другое приглашение - #. В среде окружения каждого командного процессора есть переменные PS1 и PS2. Это - вид обычного приглашения и приглашения к продолжению ввода команды соответственно. При вводе длинной команды можно набрать ее в две строки, для этого следует в конце первой строки набрать символ обратного слэша и нажать Enter - вот так: \<Enter> и продолжить ввод на следующей строке. Команда может быть многострочной, как правило, допустимая длина команды составляет 1024 символа. Обратный слэш экранирует следующий за ним символ перевода строки от интерпретации в качестве символа завершения команды. При переходе к новой строке появится символ >, так как именно это значение по умолчанию имеет PS2. В csh и tcsh вместо PS1 и PS2 определены переменные prompt и prompt2. Некоторые командные процессоры, в частности, ksh, имеют дополнительные приглашения для специальных случаев. Они хранятся в переменных PS3, PS4 и т.д., а в csh - в prompts и prompt4. Многие реализации командных процессоров (прежде всего, bash ) умеют показывать приглашения, включающие в себя динамически подставляемые части (например, имя текущего каталога). В этих командных процессорах есть свои собственные макроопределения для таких подстановок. Например, имя текущего каталога в bash
подставляется в приглашение командной строки с помощью макроса \w, а в csh - с помощью %/. Помните, что назначать желаемое значение переменной можно только, указывая макрос внутри апострофов, чтобы экранировать его от интерпретации командным процессором, например в bash: $PSl='\w$' Перечень макроопределений для приглашений командной строки обычно содержится в руководстве man по командному интерпретатору. Перечень спецсимволов Как уже говорилось, все командные процессоры воспринимают некоторые символы как служебные, придавая им специальное значение при разборе командной строки. Выше рассматривались спецсимволы, связанные с указанием конкретных конструкций. Как было показано, многие служебные символы интерпретируются разными командными процессорами одинаково, хотя бывают и исключения. Основные спецсимволы приведены в табл. 10.6. Таблица 10.6. Специальные символы командных процессоров командный процессор основные спецсимволы sh $ * ? \'' "[]<>& csh $ * ? \! л { } [ ] ! % < > & ksh $ * ? \"!л { } [ ] < > & bash $ * ? \! л { } [ ] % < > & Для ввода специальных символов без учета их специального смысла (например, для вычисления произведения двух чисел выполняется команда ехрг 2 \* 2, надо передать программе ехрг просто звездочку не расшифровывая ее специальное значение для командного процессора ) в командной строке предваряйте их символом экранирования \ или заключайте в кавычки или апострофы. Кавычки отличаются от апострофов тем, что они экранируют от интерпретации все специальные символы, за исключением ', $ и \, а апострофы
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 экранируют абсолютно все специальные символы. Разбор командной строки Каждый командный процессор выполняет разбор командной строки в строго определенном порядке: • определение команд и их аргументов; • подстановка псевдонимов (определенных командой alias ); • подстановка имен файлов согласно шаблонам; • подстановка результата выполнения команды, если есть конструкция ' ' ; • запуск программ и передача им переменных среды окружения и аргументов. Кэширование имен выполняемых файлов Командные процессоры csh и tcsh кэшируют сразу после начала работы список выполняемых файлов из каталогов, указанных в переменной path, поэтому при изменении значения этой переменной или при добавлении новых исполняемых файлов в указанные в ней каталоги следует выполнять команду rehash, чтобы командный процессор обнаружил новые каталоги и команды. Без этой команды новые программы буцут недоступны, их придется вызывать по полному имени файла. Список (историю) введенных команд можно получить по команде history. Используйте tail для просмотра нескольких последних команд: history | tail
Торчинский Ф.И., Ильин Е.С. Организация UNIX-систем и ОС Solaris 9 Спи сок лите р ату р ы 1. Торчинский Ф., UNIX. Практическое пособие администратора, Спб.:2003, - 352 с. 2. Немет Э. И др., UNIX. Руководство системного администратора, 2005, -925 с. 3. Робачевский А., Операционная система UNIX, 2003, -258 с.
Торчинский Ф.И., Ильин Е.С. Содержание Титульная страница 2 Выходные данные 3 Лекция 1. Введение в UNIX. Устройство системы 4 Лекция 2. Введение в UNIX. Интерфейс пользователя 21 Лекция 3. Установка ОС Solaris 43 Лекция 4. Установка ОС Solaris и управление пользователями Лекция 5. Файловая система: идеология и структура 85 Лекция 6. Файловая система: разделы, файлы и каталоги 114 Лекция 7. Управление процессами 142 Лекция 8. Получение дополнительной информации 196 Лекция 9. Запуск и останов системы 213 Лекция 10. Командные процессоры 248 Список литературы 276