Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Забродин УНИХ основы командного интерфейса 2010

.pdf
Скачиваний:
159
Добавлен:
16.08.2013
Размер:
1.33 Mб
Скачать

Функции shell:

-интерпретирует командные строки и передает управление ядру ОС;

-формирует характеристики среды (набор глобальных переменных среды);

-выдает приглашение на ввод очередной команды;

-генерирует имена файлов;

-присваивает и подставляет значения переменных;

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

-выполняет перенаправления ввода-вывода и реализует конвейеры команд;

-обеспечивает программирование на собственном языке shell и пр.

При входе в систему команда login после ввода пароля запускает программу оболочки. Прежде всего оболочка отыскивает в начальном каталоге пользователя запускающий файл (/еtc/.profil), содержащий команды, выполняющиеся автоматически при входе в систему, и переменные среды. Таким образом осуществляется адаптация системы к конкретным функциям, используемому оборудованию и решаемым задачам. Такие файлы по существу являются “сценариями оболочки”(shell scripts).

Список разрешенных оболочек размещается в файле /etc/shells. Оболочку можно заменить с использованием специальной команды – chsh.

Обобщенный формат командной строки командного интерфейса ОС для всех типов shell:

$ ком1 [ опции ] [аргументы /параметры];ком2 … [ENTER]

Заканчивается набор командной строки нажатием клавиши [ENTER], после чего команды передаются для интерпретации и выполнения оболочкой ОС. (Далее в примерах ENTER показываться не будет.)

Здесь $ – стандартное приглашение для ввода команды в bosh, ksh, sh (в csh – %).

Результат работы команд, как правило, выводится на экран дисплея – стандартного устройства вывода. (Далее в некоторых примерах результат, выводимый на экран, может быть прокомментирован строками текста с символом #. Комментарий не интерпрети-

руется shell.)

21

Например: $ls;pwd

#

Здесь командная строка содержит две команды – вывод на экран листинга # и его полного маршрутного имени $.

ВНИМАНИЕ: все элементы командной строки набираются только маленькими символами.

Оболочки UNIX обрабатывают два вида команд:

-внешние – каждой из них соответствует своя утилита, путь поиска которой при интерпретации команды определяется переменной среды оболочки – PATH;

-внутренние – встроенные команды в саму оболочку.

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

$man [опции] < команда >

[SPACE] – переход на следующую страницу справочника; [ENTER] – переход на следующую строку текущей страницы; [q] – выход из справочника в shell/

2.2. СРЕДА ДЛЯ РАБОТЫ ПОЛЬЗОВАТЕЛЯ

Оболочка shell создает среду работы пользователя. Начальная среда “по умолчанию” устанавливается при выполнении конфигурационного файла /etc/.profile, который формируется администратором системы и выполняется автоматически при авторизации пользователя в системе для всех пользователей. Пользователям этот файл не доступен, но может быть временно изменена его копия для отдельных пользователей с целью формирования необходимой индивидуальной среды на один текущий сеанс работы. Среда индивидуально может быть настроена посредством присвоения требуемых значений соответствующим переменным среды.

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

22

Например, в DOS функции настройки среды выполняются при инициализации ОС с помощью файла директив, описывающего требуемую среду, – CONFIG.SYS и с помощью исполнительного командного файла AUTOEXEC.BAT.

В UNIX возможности настройки среды значительно шире.

По сути, среда – это набор специальных системных глобаль-

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

Примеры переменных среды:

LOGNAME – входное имя пользователя; TERM – описывает тип терминала;

HOME – маршрутное имя начального («домашнего») каталога; PATH – альтернативные пути поиска утилит введенных команд; PS1 – текст приглашения и т.д.

Для настройки среды используется команда shell:

« = » присвоить значение указанной переменной.

Пример формирования новой среды: $ SHELL=/usr/bin/ksh $HOME=/home/lev

$EDITOR=vi $TERM=70092

………..

$PS1=”hello” (по умолчанию для bosh, sh, ksh = ”$” ) $PATH=/ / / / /;/ /;/ / /

Между разделителями «;» указываются маршрутные имена в системе каталогов ОС, где оболочкой будет осуществлять поиск утилит.

23

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

$ env SHELL= HOME=

………..

$

Имена системных глобальных переменных используют большие буквы.

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

Например: $chsh ksh

2.3.РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЯ В СИСТЕМЕ

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

Информация обо всех зарегистрированных пользователях содержится в файле /etc/passwd. При авторизации в файл добавляется строка, в общем случае содержащая имя пользователя, зашифрованный пароль длиной 13 символов, неотрицательные числовые идентификаторы пользователя и группы пользователей, к которой он отнесен, тип группы, полное имя личного каталога пользователя, имя программного файла для запуска родительского интерпретатора shell.

Например, для пользователя с входным именем lev регистрационная строка может иметь вид:

lev:код_пароля:210:14:USER:/home/user/lev:/usr/bin/ksh

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

$ passwd [входное_имя]

24

Личный секретный пароль содержит от шести до восьми символов, в число которых должно входить не менее двух букв и одной цифры.

После авторизации пользователь при каждом входе в систему должен указывать свое имя и вводить пароль. Если вход произведен корректно, то следует представление системы и приглашение от интерпретатора shell на ввод команды:

login: lev

Password: <набор_пароля>

UNIX System V Release 3.1 Version DN010192 U01 $ <ввод_команды>

< сеанс работы с системой >

$<Ctrl*D> или $exit

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

Команда просмотра текущих идентификаторов:

id – выводит идентификаторы пользователя и его группы для данного сеанса связи:

$id [*]

 

uid=303 (user3)

gid=300 (class)

210(lev)

14(user)

$

 

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

Система работает только с числовыми идентификаторами, а символьные имена – только для удобства их восприятия пользователями.

25

В принципе идентификаторы могут быть изменены с целью, например, дополнительной защиты файлов (см. ниже). Пользовательские идентификаторы содержатся в файле /etc/passwd.

Идентификаторы групп – в файле /etc/group.

2.4. ГРУППА КОММУНИКАЦИОННЫХ КОМАНД

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

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

who кто работает с системой ?

$ who

 

 

lev

tty4i

Feb 11 18:47

petr11

tty12

Feb 11 16:00

$

 

 

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

$ who am i

lev tty4i Mar 11 18:47

$

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

write – послать абоненту сообщение.

$ write petr11

Text of my message for user petr11 <Ctrl*D>

$

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

26

приглашения к общению с отправителем и текст передаваемого сообщения с идентификатором конца сообщения <EOT>:

Message from lev on U01 (tty4i) [ Thu Mar 11 19:10:33 ] .. Text of my message

for user petr11 <EOT>

Передаваемый текст может быть перенаправлен на вход команды write из предварительно подготовленного текстового файла filetext:

$ write petr11 < filetext

$

Если отправитель обращается к неработающему в настоящее время пользователю-адресату, то работа команды write завершается выдачей системного сообщения об ошибке:

<имя_пользователя> is not logged on

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

$ mesg n

<прием сообщений блокирован > $ mesg y

<прием сообщений разрешен >

$

Многопользовательская ОС UNIX предоставляет возможности для организации электронной почты на базе команды

mail отправка или чтение почты.

Команда mail имеет множество модификаций, задаваемых ключами и аргументами команды, предоставляя мощные средства поддержки разнообразных форм взаимодействия: от организации обмена сообщениями с их хранением в “почтовом ящике” до формирования и редактирования самих сообщений.

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

27

вателя в систему в почтовом ящике для него есть хотя бы одно сообщение, то система выводит на экран:

You have mail

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

$ mail

From petr11 Thu Mar 11 19:10 MDT 2007 < Текст сообщения >

?

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

<+> – вывод на экран следующего сообщения; <-> – вывод предыдущего;

<d> – удалить текущее сообщение, <q> – сохранить в буфере;

<S [файл]> – сохранить в файле (по умолчанию – файл «mbox»); <![команда]> – выполнение команды ОС не выходя из утилиты

mail.

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

'?'.

Если в “почтовом ящике” нет сообщений для Вас, то протокол работы с mail будет выглядеть так:

$ mail No mail.

$

28

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

$ mail petr11 ira ivan

< Общий текст сообщения всем адресатам >

<Ctrl*D>

$

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

2.5. ГРУППА ВСПОМОГАТЕЛЬНЫХ КОМАНД

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

сat имя_файла – вывод текста файла на экран;

мore имя_файла – постраничный вывод больших файлов на экран(постраничное листание – пробелом);

date [-k] – выводит системные дату и время (изменить их мо-

жет только системный администратор):

$ date

Fri Jul 1 11:15:55 EDT 2007

$

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

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

history [–n] - выводит на экран список ранее выполненных команд с параметрами и с № по порядку;

history m1 m2 - выводит на экран с команды № 1 до № 2; r i - повторный запуск команды № i из протокола.

29

Пример: $ history -2

15who

16write $history 3 5

3date

4id

5mail

$r 3

< дата>

$

Возможный конвейер из рассмотренных команд $history|more

$

обеспечивает вывод на экран длинных протоколов.

2.6. ПЕРЕНАПРАВЛЕНИЕ ВВОДА-ВЫВОДА

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

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

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

(системный файл «0»); [mail, write];

stdout — используется командами для вывода результатов на эк-

ран (системный файл «1»); [date, cat, who];

stderr — для вывода на экран протоколов при работе команд (системный файл «2»).

> команда для переадресации выходных данных в файл с

заменой его предыдущего содержимого; >> то же, но к предыдущему содержимому файла присое-

диняется переадресуемые выходные данные

30