Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1308 / 258 | Оценка: 4.34 / 3.65 | Длительность: 21:13:00
Лекция 12:

Командные процессоры

< Лекция 11 || Лекция 12: 123456
Ключевые слова: интерактивность, пользователь, CDE, мышь, меню, командная строка, enter, команда, имя программы, спецсимвол, Unix, программа, командный процессор, shell, интерпретатор, интерпретация, процессор, solaris, ksh, csh, bash, командный интерпретатор, Bell Laboratories, ПО, Си, GNU, billing, SUN Microsystems, vi, BSD, макроопределения, синтаксис, язык скриптов, State, переменная среды, управление заданиями, history, Linux, 1-разбор, перенаправление потока, подстановка, редактирование командной строки, запуск, приглашение командной строки, домашний каталог пользователя, login, вход в систему, файл, инициализация, среда окружения, ключ, profiler, алгоритм, символьная ссылка, список, история команд, сеанс работы, диск, public domain, уязвимость, сервер баз данных, mysql, пароль, доступ, значение переменной, псевдоним, апостроф, alias, ключ команды, встроенная команда, echo, term, переменная, значение, арифметическая операция, операции, display, unset, права, path, USER, прикладная программа, скрипт, symbolic link, имя пользователя, shift, VAR, messaging, шаблон, регулярное выражение, функция, метасимволы, подстрока, диапазон, пробел, место, текущий каталог, e-money, BAK, OBJ, e-wallet, HTML, siemens, итерация, цикла, входной, поток, TMP, переименование файлов, поддерево, find, подстановка результатов, completion, tab, admin, bin, MSG, курсор, backspace, ctrl, visual, editor, системный администратор, запись, Command, NOT, длина строки, tail, обратный, FC-AL, поиск, job, PID, GIF, интерактивный режим, foreground, останов, SUSPEND, sleep, 'background', процентили, язык программирования, программное обеспечение, управляющий комментарий, полный путь, ветвление, шрифт, перевод строки, операторы цикла, break, прерывание, continue, elseif, код завершения, файловая система, re-testing, эквивалентность, pppd, провайдер, inittab, перенаправление вывода, read-only, цикл управление, системная переменная, логические выражения, switch, foreach, perl, root, длина, prompt, макрос

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

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

В конце 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.

Таблица 12.1. Популярные командные процессоры в UNIX
Название Имя в системе Плюсы Минусы
Bourne Shell sh Обладает легким и удобным языком скриптов, прост и понятен Мало средств редактирования введенных ранее команд, нет возможности управления заданиями
C Shell csh Есть управление заданиями и приемлемое редактирование введенных ранее команд Сложный язык скриптов, некоторые версии содержат много ошибок
Korn Shell ksh Совместим с sh по командам и содержит ряд возможностей csh, есть возможность редактирования команд, введенных ранее (history) Редактировать команды неудобно, язык скриптов так развит, что все трудно запомнить
Bourne Again Shell bash Похож на ksh по возможностям, имеет легкий удобный интерфейс, простое интуитивно ясное редактирование введенных ранее команд. Стандарт де-факто в Linux, в Solaris 9 устанавливается по умолчанию, но не является командным процессором по умолчанию Пока не обнаружено (поиски будут продолжены)

Командный процессор призван выполнять в системе нижеперечисленные задачи:

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

Некоторые командные процессоры поддерживают не все эти функции (см. таблицу 12.2).

Таблица 12.2. Основные задачи shell'ов
Функция sh csh tcsh ksh bash
History Нет Да Да Да Да
Псевдонимы Нет Да Да Да Да
Скрипты Да Да Да Да Да
Подстановка и завершение имен файлов Нет Да1по умолчанию выключено Да Да2по умолчанию выключено Да
Редактирование командной строки Нет Нет Да Да3по умолчанию выключено Да
Управление заданиями Нет Да Да Да Да

Запуск командного процессора

Командный процессор запускается либо при входе пользователя в систему (и в дальнейшем пользователь отдает команды в его командной строке), либо из какой-либо программы (по команде пользователя). Частным случаем является запуск командного процессора из другого командного процессора. Например, вы работаете в sh и желаете получить более удобные средства редактирования командной строки; для этого вызывается bash. Тогда вы просто набираете команду

bash

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

Каждый командный процессор при запуске пытается выполнить свои стартовые файлы, вначале системные (общие для всех пользователей), а затем пользовательские. Общие лежат в /etc, индивидуальные – в домашнем каталоге пользователя. Если командный процессор запускается при входе пользователя в систему (в таком случе он называется login shell, дословно – командный процессор, запущенный при входе в систему), то после стартовых файлов он выполняет еще и login-файлы в том же порядке: сначала общий login-файл из /etc, затем – индивидуальный, из домашнего каталога. Login-файлы – это тоже стартовые файлы командного процессора; все стартовые файлы фактически представляют собой скрипты на языке командного процессора и служат для инициализации среды окружения командного процессора для конкретного пользователя. Настройка командного процессора для пользователя позволяет творить чудеса: задать короткие псевдонимы для длинных часто используемых команд и т.п.

Некоторые командные процессоры при входе в систему выполняют сначала login-файлы, а затем – стартовые файлы; это зависит от того, как они были скомпилированы.

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

Таблица 12.3.
shell Стартовые файлы login-файлы
sh /etc/profile, ~/.profile
csh /etc/csh.cshrc, ~/.cshrc /etc/csh.login, ~/.login
ksh /etc/profile, ~/.profile
bash ~/.bashrc /etc/profile, ~/.bash_profile ~/.profile

Командный процессор bash, в отличие от других, использует более сложный алгоритм выполнения стартовых и login-файлов. Если он запущен как login shell, то выполняет /etc/profile, если такой файл есть. Затем делается попытка выполнить ~/.bash_profile. Если такого файла нет, bash пытается выполнить файл ~/.bash_login, а если нет и такого файла, то выполняется ~/.profile. Если bash запущен не как login shell, то при старте он выполняет только файл ~/.bashrc. Если же bash был запущен как sh (т.е. 9sh является символьной ссылкой на bash ), то при старте он ведет себя так же, как и sh.

История команд

Все командные процессоры запоминают введенные пользователем команды (их список называется историей команд). Во время сеанса работы командный процессор хранит историю команд в памяти, а по окончании работы записывает их в файл на диск. Файл истории команд хранится в домашнем каталоге пользователя. В sh, csh, tcsh он называется ~/.history, в bash~/.bash_history, в ksh~/.shhistory, а в бесплатной версии Korn Shell (public domain Korn shell – pdksh) его по умолчанию нет вообще.

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

Существование файла истории команд может привести к уязвимости вашей системы. Имейте в виду, что по умолчанию он может быть доступен для чтения не только тому, кто вводил команды, но и другим пользователям. В этом случае следует избегать ввода каких бы то ни было паролей в командной строке. Например, возможно вызвать веб-обозреватель lynx или программу доступа к серверу баз данных mysql, указывая пароль в командной строке:

lynx ftp://user:password@URL
mysql –u root –p password

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

Файл истории команд ограничен по размеру. По умолчанию, bash хранит 500 команд, tcsh – 1000, csh – 100, sh – в зависимости от версии. Часто sh не создает файл .history вовсе и дает доступ только к командам, которые были введены в течение текущего сеанса работы с ним. Можно изменить число хранимых команд, указав иное значение переменной, в которой оно хранится.

Таблица 12.4.
shell Переменная Значение по уполчанию
sh HISTSIZE не определено
csh history 100
ksh HISTSIZE 128
bash HISTFILESIZE 500
< Лекция 11 || Лекция 12: 123456
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.