Организация UNIX-систем и ОС Solaris

Семейство командных процессоров


При интерактивной работе с системой пользователь постоянно сталкивается с необходимостью отдавать ей команды. В 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 Korn).

С-shell был разработан студентом Университета в Беркли (University of California Berkeley) Биллом Джоем (Bill Joy), который по окончании Berkeley основал компанию Sun Microsystems. Еще Билл Джой написал самый известный в UNIX редактор vi и был одним из авторов первой версии BSD UNIX.

Таблица 10.1. Популярные командные процессоры в UNIX

НазваниеИмя в системеПлюсыМинусы
Bourne Shellshобладает легким и удобным языком скриптов, прост и понятенмало средств редактирования введенных ранее команд, нет возможности управления заданиями
C Shellcshесть управление заданиями и приемлемое редактирование введенных ранее командсложный язык скриптов, некоторые версии содержат много ошибок
Korn Shellkshсовместим с sh по командам и содержит ряд возможностей csh, имеет средства редактирования команд, введенных ранее (history)редактировать команды неудобно, язык скриптов так развит, что все трудно запомнить
Bourne Again Shellbashпохож на ksh по возможностям, имеет легкий удобный интерфейс, простое интуитивно ясное редактирование введенных ранее команд, стандарт де-факто в 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'ов
Функцияshcshtcshkshbash
HistoryНетДаДаДаДа
ПсевдонимыНетДаДаДаДа
СкриптыДаДаДаДаДа
Подстановка и завершение имен файловНетДа*ДаДа*Да
Редактирование командной строкиНетНетДаДа*Да
Управление заданиямиНетДаДаДаДа
* - по умолчанию выключено


Содержание раздела