Скачиваний:
89
Добавлен:
10.05.2014
Размер:
11.4 Mб
Скачать

3. Способы группирования команд в операционных системах. Командные файлы. Программные каналы, конвейеры команд.

Воперационных системах команды можно разделить на несколько основных групп:

команды для работы с деревом каталогов;

команды для работы с файлами;

команды ввода/ вывода;

информационные команды;

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

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

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

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

$ <имя shellпроцедуры><параметр1>< параметр2>

Каждому аргументу, передаваемому в shellпроцедуру из командной строки, ставится в соответствие порядковый номер от 1 до 9. Если порядковый номер двузначный, то он должен быть заключен в фигурные скобки {}. Имени процедуры ставится в соответствие порядковый номер 0.

В shell данные могут передаваться одним из 3-х способов:

1.через переменные среды;

2.через аргументы командной строки;

3.с помощью команды read.

Команда shift [n] сдвигает все аргументы на n позиций влево, если n не указано, то на одну позицию и уменьшает значение переменной # (количество передаваемых аргументов) на n.

Команда read <переменная> [переменная] в процедуре передает значения переменных во время работы этой процедуры, причем вводимые пользователем значения будут присваиваться указанным переменным.

Конвейер позволяет напрямую использовать вывод одной команды в качестве ввода другой команды без использования промежуточного файла. Конвейер обозначается |. <команда1> |< команда2> |< команда3> Количество команд не ограничено. Самая первая команда в конвейере должна в

нормальном режиме выводить информацию в потока stdout. Самая последняя – принимать информацию из потока stdin. Все промежуточные команды в конвейере должны принимать информацию из стандартного потока ввода и передавать в стандартный поток вывода. Такие команды называются фильтром.

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

В системе UNIX широко используется механизм подстановки имен по некоторому образцу (шаблону). Для подстановки имен используются специальные символы генерации:

? соответствует любому одному символу, кроме лидирующей точки; [] определяет группу символов; - определяет принадлежность заданному диапазону;

! отрицание заданного символа или группы символов;

*любое кол-во любых символов за исключением лидирующей точки.

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

Конвейеры. Знаки | || &&

Конвейером - называют последовательность команд в одной командной строке, разделенных одним из перечисленных выше знаков, в которой вывод команды слева от знака конвейера передается на ввод команды справа от знака конвейера.

Ls-lisort – сортировка содержимого текущего каталога Вывод команды ls подаётся на вход команды lisort

Программные каналы.

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

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

Подстановка команд $ (<команда>) pwd /home/uset2

curdir=$(pwd) echo $curdir

Командные файлы (Unix – Shell procedure).

Возможности интерпретатора shell значительно более широкие, чем интерпретация команд.

Интерпретатор, в частности, выполняет функции инициализации (настройку) при вхождении пользователя в систему. Информацию для настройки shell получает при выполнении командного файла /etc/profile, командных файлов из системного каталога /config/profiles, а также командного файла .profile , если он помещен в начальный каталог пользователя.

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

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

$ sh -c "shfil"

<NewLine> или

$ sh shfil

<NewLine> или

$ chmod u+x shfil

<NewLine>

$ shfil

<NewLine>

Впервом и втором случаях по команде sh вызывается вторичный интерпретатор shell, и

вкачестве аргумента ему передается командная строка, содержащая имя файлапроцедуры shfil, находя щегося в текущем каталоге. Третья форма предполагает, что файл-процедура новый и его надо сначала сделать выполняемым.

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

$ имя_процедуры arg1 arg2 ... <NewLine>

$ _

Каждому из девяти первых аргументов командной строки в тексте процедуры соответствует один из позиционных параметров: $1, $2, ..., $9 соответственно. Параметр $0 соответствует имени самой процедуры, т.е. первому полю командной строки. К каждому из 10 первых аргументов можно обратиться из процедуры, указав в нужном месте ее текста позиционный параметр необходимого аргумента.

4. Обзор возможностей командных процессоров (оболочек) операционных систем.

(ОС, Лекция 24.11.2003)

Основы Shell:

Shell, с одной стороны, представляет собой интерпретатор команд, который, как правило, хранится в каталоге:

/usr/bin/ksh

Korn Shell

/usr/bin/bash

Bash Shell

/usr/bin/csh

C Shell

/usr/bin/sh

Posix Shell

/usr/old/bin/sh

Borne shell

...с другой стороны, shell - это язык программирования, позволяющий выполнять любые действия, которые позволяет выполнять языкC. Базовым shell'ом с минимальными возможностями является borne-shell.Всеостальныеоболочкивключаютвозможностиborne-shell'а.

ОсновныефункцииоболочеквUNIX:

Исполнение команд. Находит команду и выполняет для нее соответствующую программу,подставляетзначенияпеременных.

Установка среды.

Заданиепеременныхи замена переменных

Подстановка команд (установка псевдонимов командспомощью командalias/unalias).

Генерацияимён файлов.Формируетимена файлов,используясимволыгенерации

Выполняетперенаправлениеввода-вывода

Выполняетподстановкурезультатоввыполнениякоманд

Реализует конвейеры

Интерпретация программ.Поддерживает интерпретируемый программный интерфейс, включаяпроверки,ветвленияициклы.

Буферирование команд (кроме оболочки Borne-Shell). Shell сохраняет команды, которые вводит пользователь, в некотором файле предыстории. History выводит на экран последние 16 команд. Таким образом осуществляется буферирование команд с возможностью повторного ввода, а так же редактирование командной строки с помощью редактора VI (для этого должна быть установлена переменная среды EDITOR=vi, установка командой export EDITOR).

Рассмотрим реализациюнекоторыхизэтихвозможностейподробнее:

1)КомандывShell:

Различают2типакоманд:

Внутренниекомандыshell.Примеры: set, while,is, for

Команды, которые интерпретируются shell. Примеры: ls, more, pwd. Команды UNIX

находятся спомощью переменнойсредыPATH.

КомандыUNIX могут иметь те же имена,чтои встроенныекомандыshell'а: в этом случае для доступа к командам UNIX пользователь должен явно указывать полное маршрутное имя команды. Как

правило,всекомандыв системеUNIX хранятсяв 4-х основныхкаталогах:

/sbin

/user/bin

/usr/local/bin

/usr/contrib/bin

Дляпоисканужнойкомандыв системепредусмотренакоманда: whereis <имя команды>

Этакомандавыдаётнаэкранполноеимякаталога,содержащегоуказаннуюкоманду.

Установкапсевдонимовкоманд:

Допускается установка/снятие псевдонимов команд командами alias/unalias. Формат команды:

alias <имя>=<строка>

Пример:

alias dir=ls

2)Средапользователя

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

маршрутное имя начального кат-га пользователя

под каким именем вошел пользователь

где shell будет искать команды и т.д.

Среда пользователя может быть отображена на экран командой env.

3)Стартовыефайлыshell:

При входе в систему для формирования среды и выполнения других необходимых действий

выполняютсяспециальныепроцедуры,которыеназываютсястартовымипроцедурамиshell.

.profile

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

Если.profile содержиткоманду exec <приложение>

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

Общесистемный стартовый файл(выполняется для всех пользователей, работающих сBorne, Korn

илиPosix-shell'ом):

/etc/profile

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

На рисунке представлены функции процедур, выполняющихся при входе пользователя в систему. Выполнениеихв совокупностиназываетсяавторизациейпользователя. АвторизацияUNIX включает3 этапа:

1.Getty - выводит на экран содержимое файла/etc/issue. Выдаёт приглашение login. Запускает процессlogin.

2.Login - определяет допустимость введённого имени и пароля и( проверяет их на соответствие в файле etc/passwd). Если запись есть, делает текущим начальный каталог пользователя и запускаетshell

3.Shell - выполняет /etc/profile (общесистемный командный файл), а затем.profile (настраивает среду конкретного пользователя, содержится в домашнем каталоге пользователя) и выводит приглашение shell. Таким образом выполняется настройка параметров среды пользователя.

4)Хранимыепеременныевshell:

ВUNIX различаютнескольковидовпеременных:

локальныепеременные

программных кодshell

переменные среды

ВShell встроеныдве области переменных:

областьлокальныхпеременных;

среда.

Установка переменных shell: Для установки переменной необходимо указать имя переменной и значение(<имя>=<значение>).Особенностизаданияпеременных:

принаписаниинедопускаетсяпробелов

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

цифрыи символыподчёркивания,ограничениянадлинуимённет.

Shell хранит переменные или в локальной области пользователя, или в среде. Для передачи

переменныхиз локальной областив средунеобходимовыполнить командуexport. Пример:

EDITOR=vi export EDITOR

Пример оболочек:

Соседние файлы в папке docs