Лекция: Интерпретатор команд.

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

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

Пользователь может определить, с какой оболочкой он работает с помощью команды echo $SHELL. При выполнении этой команды на экран будет выведено имя оболочки сессии, назначенной пользователю при регистрации.

Формат вызова команды в общем случае следующий:

…~>команда [ключи] [аргументы] [1]

Почти все команды могут работать в нескольких различных режимах. Для указания режима выполнения команды используются ключи. При указании ключей часто, но не всегда, вначале размещается символ «минус», а затем указываются один или несколько символов. В некоторых командах требуется указать объект, к которому применяется команда. Для указания объекта используются аргументы команды. Такими объектами могут быть, например, имена файлов или каталогов.

Пример 1. Выдача информации о файлах и каталогах:

…~>ls

В этом случае на экран будут выведены только имена файлов, расположенных в текущем каталоге, то есть в том каталоге, в котором пользователь работает в настоящий момент. Имена файлов, начинающиеся с символа «точка» выводиться не будут. Если вызвать эту же команду с ключом –a, то выводиться будут имена всех файлов. Использование ключа –l приводит к выводу на экран дополнительной информации: права доступа к файлу, имя его владельца, размер и т. д. Допускается совместное использование нескольких ключей. Результатом выполнения команды ls –al будет вывод подробной информации обо всех файлах текущего каталога. Если необходимо просмотреть содержимое не текущего каталога, а какого-либо другого (например, системного каталога /bin), необходимо указать его имя в качестве аргумента:

…~> ls –al /bin

Пример 2. Справочные команды:

…~>date

Получение даты и времени:

…~>who

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

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

1) внешние программы и утилиты (системные программы).

2) встроенные функции (команды);

3) функции оболочки, определенные пользователем;

Программы и утилиты представляют собой внешние по отношению к оболочке команды и являются обычными исполнительными файлами. Команды, код которых находится в исполняемом файле оболочки, называются встроенными или внутренними. Наиболее важные из них ‑ cd, pwd, echo, kill, read, set, unset, setenv, export. Если набранное пользователем имя команды является именем встроенной команды, она немедленно будет исполнена. Если же имя не совпадает с именами встроенных команд, оболочка выполняет поиск исполняемого файла программы с указанным именем.

Файлы в UNIX хранятся в каталогах. Каталоги могут содержаться в других каталогах, то есть быть вложенными. Имена каталогов отделяются друг от друга и от имен файлов символом / (slash). В именах файлов и каталогов могут содержаться любые символы, кроме косой черты. Имя текущего каталога ‑ «.», вышестоящего ‑ «..». Имя главного, корневого каталога файловой системы UNIX ‑ /.

Каталоги, в которых оболочка ищет программу, перечислены в переменной окружения PATH. Выполните команду echo $PATH, для знакомства с ними. Программа должна находиться в одном из этих каталогов, иначе оболочка выведет сообщение о том, что команда не найдена. Если программы нет в каталогах, перечисленных в пути поиска программ, для ее запуска следует указать абсолютное или относительное имя файла. Это имя обязательно содержит в себе косую черту. Если имя начинается с косой черты ‑ это абсолютное имя файла, например, /bin/ls, /bin/ps, /usr/ucb/ps. Если имя начинается с другого символа, это относительное имя файла, определяемое относительно текущего каталога. Часть имени до первой косой черты, если, конечно, косая черта входит в состав имени файла, должна быть именем каталога, расположенного в текущем каталоге. Для явного указания текущего каталога следует использовать точку: ./test ‑ программа test из текущего каталога, ./bin/clean, и bin/clean ‑ указывают на одну и ту же команду clean из каталога bin, находящегося в текущем каталоге. В составе имени файла можно использовать имя вышестоящего каталога: ../../programs/test.

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

Для облегчения работы с системой UNIX имеется возможность использовать шаблоны имен файлов (или метасимволв):

? — один любой символ;

* — произвольное количество любых символов.

Например:

*.c — задает все файлы с расширением «c»;

pr???.* — задает файлы, имена которых начинаются с «pr», содержат пять символов и имеют любое расширение.

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

Пример 3. Принудительное завершение процесса или группы процессов.

Если необходимо завершить «зависший» процесс, следует воспользоваться командой посылки сигнала процессу или группе процессов.

…~>kill [-номер_сигнала] идентификатор_процесса ...

Идентификаторы_процессов можно узнать по команде ps (в колонке PID). Идентификатор процесса, запущенного в фоновом режиме сообщается оболочкой в момент запуска. Если указан процесс с номером 0, то сигнал будет послан всем процессам данной группы.

Терминируемый процесс должен принадлежать текущему пользователю (если он не root).

Команда kill -9… уничтожает процесс наверняка, если, конечно, для уничтожения хватает прав.

 

еще рефераты
Еще работы по информатике