нахад

Утилиты

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

Слово "утилиты" (utilities) буквально означает "полезности". Утилиты - это программы, которые могут понадобиться при решении всевозможных задач. Если есть высокая вероятность, что некоторая программа может понадобиться более чем одному пользователю для решения более чем одной задачи, то ее стоит включить в систему. Таких пользовательских утилит в UNIX еще больше, чем системных (чем определенно нарушается принцип У контекста; о том, как устранить это нарушение, речь пойдет в лекции 6). Множество пользовательских утилит занимается преобразованием текста, так как текстовый файл - универсальное пространство для создания умопостижимых моделей. Немало утилит помогает при разработке решений: компиляторы, отладчики, редакторы диаграмм, трассировщики и т. д. Почти всеми пользовательскими утилитами пользуется система, потому что при проективном подходе вообще невозможно провести четкую границу между системным и пользовательским наполнением. К обеим категориям, например, относятся утилиты для работы с файлами и файловой системой или интерпретатор командной строки (shell). На shell написаны все системные сценарии, поскольку он представляет собой еще и удобный высокоуровневый язык программирования.

Программные продукты и пакеты

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

Для того чтобы оперативно добавлять программный продукт в систему или удалять его оттуда, необходимо заранее договориться о размещении в файловой системе всех входящих в него файлов. Запомнив каждый файл с полным именем, мы получим архив, целиком определяющий расположение программного продукта в системе. Такой архив в UNIX называется пакетом. Мы можем устанавливать пакет в систему и удалять его, зная, что записываем и удаляем файлы, принадлежащие только ему. В пакете могут храниться не только программные продукты, но и вообще любые "кирпичики", из которых можно складывать систему: утилиты, драйверы, документация, шрифты и все остальное. Если при установке или удалении пакета нужно проделать какие-нибудь действия (например, зарегистрировать устанавливаемый шрифт), к нему прилагаются установочный сценарий и сценарий удаления.

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

Процессы

В роли задач в UNIX выступают процессы. Процесс – это программа, запущенная пользователем, которая находится в памяти и, как полагается задаче, потребляет ресурсы: выполняется, требует памяти, обменивается данными с системой, внешними устройствами и другими процессами. При запуске процесс получает уникальный идентификатор процесса (Process IDentifier, PID), по которому он становится доступен другим процессам и планировщику. Планировщик процессов в UNIX устроен сложнее. Наше описание предельно упрощено, а полностью разобраться в планировании процессов поможет. Главное отличие планировщика UNIX заключается в том, что каждая задача из очереди работает в течение всего отведенного ей промежутка времени, только если ей есть чем заняться. Если задача к этому времени работать не может (например, ожидает завершения операции ввода/вывода, или сигнала, или освобождения какого-либо ресурса), она из начала очереди перемещается в конец "очереди для тех, кто без очереди" или очереди "спящих" задач. Как только какая-нибудь задача из очереди спящих просыпается, ей тут же отводится место в начале обычной очереди. Таким образом максимально сокращается время простоя (idle) системы, если, конечно, выполняемых задач достаточно для того, чтобы полностью ее загрузить. Сверх того процессы в UNIX могут иметь разные приоритеты, сообразно которым идет планирование очередного запуска процесса (например, полностью отработав свой промежуток времени, процесс может помещаться не в конец очереди).

Использование виртуальных терминалов

Операционная система (ОС) UNIX является многопользовательской системой, то есть обеспечивает возможность одновременной работы нескольких пользователей. Для этого в системе имеется несколько терминальных портов (терминалов). Традиционно терминалом называется устройство, состоящее из клавиатуры и монитора, подключенное к ЭВМ и обеспечивающее ввод-вывод информации. В данном случае под терминалом понимается любой зарегистрированный в системе двунаправленный канал для последовательной передачи алфавитно-цифровой информации, связанный с драйвером устройства ввода-вывода (консоль - монитор и клавиатура, последовательный порт). Любая работающая в системе прикладная программа связана с одним из терминалов и использует его для получения информации от пользователя и выдачи выходных данных. Несколько одновременно работающих пользователей используют разные терминалы, вновь запускаемые программы по умолчанию связываются с тем терминалом, с которым работает запустивший их пользователь. Процесс работы пользователя с терминалом называется терминальной сессией.

Современные версии UNIX позволяют пользователю персонального компьютера одновременно запустить несколько терминальных сессий, переключаясь между ними и попеременно работая от имени различных пользователей с использованием одной и той же реальной клавиатуры и монитора. Такие терминальные порты, связанные с одними и теми же физическими устройствами называются виртуальными терминалами. По умолчанию в LINUX активны 7 виртуальных терминалов, для переключения между ними используются сочетания клавиш Alt+F1 … Alt+F7. Седьмой виртуальный терминал как правило используется для запуска графического интерфейса пользователя.

Вход в систему

Перед началом работы с системой UNIX необходимо пройти регистрацию в системе, то есть ввести имя пользователя (login) и пароль (password). При загрузке системы для каждого активного терминала запускается программа getty, выдающая на терминал запрос имени пользователя. После ввода имени getty запускает программу login, передавая ей имя пользователя в качестве входного параметра. login запрашивает пароль, преобразовывает его одним из методов необратимого шифрования и сравнивает результат с шифрованным паролем данного пользователя, хранящимся в одном из файлов ОС (/etc/passwd или /etc/shadow). Если пароли совпадают, программа login выводит на экран приветствие, хранящееся в файле /etc/motd и запускает командный интерпретатор.

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

Имейте в виду, что в Linux различаются большие и малые буквы. А символы Del и Backspace считаются как символы пароля. Поэтому, если нажали не тот символ, чтобы очистить строчку с паролем, нажмите Ctrl+U и введите пароль заново. Если вы корректно ввели имя пользователя и пароль, то вы попадете в ваш домашний каталог.

Узнать ваше регистрационное имя можно командой “whoami

Узнать о других зарегистрированных пользователях можно командой “who

exit – выйти из текущей оболочки (bash, mc и т.п.)

logout – выйти из текущего сеанса (аналог Ctrl+D)

Alt+F1 … Alt+F6 – переключаться между виртуальными консолями

Пользователи, группы

Права пользователя на доступ к файлам определяются во-первых именем пользователя, а во-вторых именем группы, к которой он принадлежит. Имя пользователя вводится при регистрации в системе, имя группы, к которой он принадлежит определяется из файлов etc/passwd и /etc/group (подробнее эти файлы рассмотрены в лабораторной работе 2). Каждому имени пользователя и каждой группе в ОС сопоставлены числовые идентификаторы, обозначаемые UID (user ID) и GID (group ID) соответственно. Пользователь с UID=0 традиционно имеет имя root, называется суперпользователем, и имеет полномочия администратора, то есть право доступа ко всем файлам в ОС.

Для каждой запущенной программы (процесса) в ядре ОС имеется структура данных, в которой хранится различная информация о процессе, в том числе UID и GID пользователя-владельца, которые определяют права этого процесса на доступ к файлам. При запуске командного интерпретатора программа login присваивает ему UID и GID зарегистрировавшегося пользователя (сама программа login должна иметь доступ к файлу с шифрованными паролями, поэтому имеет UID=0).

Командный интерпретатор

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

root#

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

В UNIX существует несколько разновидностей оболочек. Стандартной оболочкой для всех разновидностей UNIX является Bourne shell, интерпретатор bash в LINUX полностью совмести с shell. В дальнейшем все команды интерпретатора рассматриваются на примере bash.

Команды реализованные в самой программе-интрпретаторе называются внутренними. Если интерпретатору не удается найти требуемую внутреннюю команду, то запускается внешняя команда - программа, находящаяся в файле с указанным именем. Поиск файлов внешних команд осуществляется только в каталогах, имена которых содержатся в переменной среды PATH (переменные среды изучаются в следующих работах). Как правило в число этих каталогав входят каталоги /usr/local/sbin; /usr/local/bin; /sbin; /bin; /usr/sbin; /usr/bin.

При записи правил использования команд в справочной системе UNIX (и в этих методических указаниях) приняты следующие обозначения:

[-p]

в квадратных скобках указываются параметры, которые могут быть опущены

имя пользователя | UID

через символ | указывается список возможных альтернатив, то есть при записи команды может быть выбран только один из этих вариантов

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

ls directory

выводит список содержимого каталога directory в краткой форме, а та же команда с ключем -l

ls –l directory

выводит его в развернутой форме.

LINUX ключи состоящие из одной буквы указываются со знаком -, из нескольких букв – с двумя знаками минус, например -l и --list. Часто для одной и той же функции имеется длинное и короткое написание ключа.

По окончании ввода команды следует нажать Enter.

Справочная система

Для вывода справки о команде как правило следует ввести эту команду с ключом –h или --help. Если справочная информация не убирается на экране, после ключа следует перенаправить вывод в программу more (подробнее перенаправление результатов работы команды изучается в работе 3), например

ls --help | more

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

man ls

Перемещение по тексту справочной системы осуществляется клавишами «вверх», «вниз», PgUp, PgDn, выход клавишей q