4 Пользовательская среда UNIX: командный процессор shell и графическая система X Window
На ранних этапах развития UNIX предполагалось, что пользователь работает в системе при помощи алфавитно-цифрового устройства – текстового терминала или телетайпа. В связи с этим базовым стал традиционный для операционных систем того времени командный пользовательский интерфейс, при котором диалог пользователя с системой представляет собой ввод ключевых слов – команд, в соответствии с которыми система производит требуемые действия.
В UNIX командно-строковый интерфейс получил закономерное развитие в виде аппарата командных сценариев – исполняемых файлов, состоящих из последовательностей команд. Командный интерпретатор, таким образом, играет роль не только пользовательского интерфейса, но и транслятора-интерпретатора для особого языка программирования. Командные сценарии крайне широко используются в среде UNIX, так как представляют собой гибкий и несложный инструмент создания элементарных программ.
Современные реализации UNIX, наряду с командным, обладают и визуальным (графическим) пользовательским интерфейсом, основой которого является мощная графическая среда X Window System. Тем не менее, многие частные задачи более эффективно и наглядно могут быть выполнены именно традиционным способом - при помощи команд. Более того, в UNIX стал достаточно распространенным подход, при котором графические программы представляют собой надстройки (front-end) над стандартными командно-строковыми утилитами. Такие программы-надстройки выполняют функции наглядного представления информации (напр., текущего состояния некоторой подсистемы), позволяют оператору в визуальной форме выполнить требуемые действия, на основании чего в фоновом режиме формируется и исполняется команда или последовательность команд.
4.1 Командный интерпретатор shell
Командный интерпретатор UNIX принято называть оболочкой (shell); как правило, в литературе используется именно английский вариант названия. Все современные системы UNIX поставляются по крайней мере с тремя командными интерпретаторами: это shell Баурна (/bin/sh), Си-shell (/bin/csh) и Korn-shell (/bin/ksh). Существует еще несколько интерпретаторов, например, bash и tcsh, со сходными функциями.
В UNIX реализуется следующий сценарий пользователя в системе:
1. При включении терминала (либо установлении сетевого telnet-соединения) активизируется процесс getty, который является сервером терминального доступа и запускает программу login, которая запрашивает у пользователя имя и пароль.
2. Если пользователь зарегистрирован в системе и ввел правильный пароль, login запускает программу, которая присвоена данному пользователю как его shell. В принципе, это может быть любая программа, но обычно это командный интерпретатор. Если пользователь зарегистрирован как не имеющий shell (соответствующее поле пусто), в доступе отказывается – пользователь не может непосредственно работать в системе, хотя может пользоваться такими сервисами, как почта или FTP.
3. Shell выполняет соответствующий командный файл инициализации и выдает на терминал пользователя приглашение (командную строку). С этого момента пользователь может вводить команды.
4. Shell считывает ввод пользователя, производит синтаксический анализ введенной строки и выполняет действие, предписанное пользователем (это может быть запуск программы, выполнение внутренней функции интерпретатора), или сообщает об ошибке, если программа или функция не найдена.
5. По окончании сеанса пользователь завершает работу с интерпретатором, вводя команду exit или нажимая комбинацию клавиш Ctrl-D, и выходит из системы.
При входе пользователя в систему запускается его инициализационный сценарий, выполняющий несколько функций: установку пути поиска программ, инициализацию терминала, определение положения почтового ящика и т.п. Инициализационный сценарий располагается в домашнем каталоге пользователя. Для разных shell используются различные сценарии инициализации:
Командный интерпретатор |
Сценарий инициализации |
shell Баурна (sh) |
.profile |
Си-shell (csh) |
.login и .cshrc |
Korn shell (ksh) |
.profile и .kshrc |
Обновленный shell Баурна (bash) |
.profile и .bashrc |
Если shell используется в роли пользовательской оболочки, его основной функцией является обеспечить ввод и исполнение команд. Готовность к вводу и исполнению команд отображается выводом приглашения командной строки, которое обычно имеет вид символа «$» (перед этим символом может выдаваться краткая информация – имя текущего каталога и т.п.).
Команда вводится в командной строке, состоит из одного или более слов, разделенных пробелами. Первое слово задает собственно команду, остальные (если они присутствуют) являются параметрами команды.
В большинстве случаев собственно команда является именем исполняемого файла, который при этом запускается на исполнение. В частности такие команды, как ls, cp, rm и т.д. представляют собой программы (исполняемые двоичные файлы), расположенные в каталоге /bin. В качестве команды может быть указан полный или сокращенный путь к исполняемому файлу:
/usr/sbin/useradd john
Если команда расположена в одном из стандартных каталогов, описанных как путь поиска (/bin, /usr/bin и т.д.), путь в записи опускается. Если требуется запустить программу из текущего каталога, необходимо явно указать ткущий каталог (обозначается как «точка»):
./mycommand param1 param2
Параметрами команд, в частности, могут быть имена файлов. Особым типом параметров являются ключи – алфавитные символы, задающие или корректирующие действие команды. Как правило, ключ или комбинация ключей начинается с символа «-» («минус»). Некоторые команды могут иметь ключи, записываемые в виде целого слова; обычно ключи такого формата предваряются символами «--»: «--erase», «--with-apxs» и т.д.
Ввод команды завершается нажатием Enter. Различные командные интерпретаторы могут включать дополнительные средства редактирования команд. Как правило, предусмотрено удаление символа перед курсором клавишей «Забой». Некоторые командные интерпретаторы (в частности, bash) позволяют вызывать в командную строку ранее введенные команды клавишами «вверх» и «вниз».
В одной строке могут быть введены несколько команд, разделенные символом «;»
pwd; ls
Можно запустить программу в фоновом режиме. В этом случае shell не будет ожидать завершения программы, а сразу же выведет приглашение и позволит продолжить работу. Для этого командная строка завершается символом «&»:
cp longfile newfile &
(копирование файла большого объема в фоновом режиме). Фоновый режим, в частности, используется при запуске программ-демонов, сетевых сервисов, а также в графической среде, когда запускаемая программа работает в отдельном окне.
Конструкции переопределения стандартного ввода-вывода и организации трубопровода также реализованы на уровне shell.
4.2 Сценарии shell
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.