Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение. |
Командные процессоры
Семейство командных процессоров
При интерактивной работе с системой пользователь постоянно сталкивается с необходимостью отдавать ей команды. В 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.2).
Запуск командного процессора
Командный процессор запускается либо при входе пользователя в систему (и в дальнейшем пользователь отдает команды в его командной строке), либо из какой-либо программы (по команде пользователя). Частным случаем является запуск командного процессора из другого командного процессора. Например, вы работаете в sh и желаете получить более удобные средства редактирования командной строки; для этого вызывается bash. Тогда вы просто набираете команду
bash
и оказываетесь в среде свежезапущенного командного процессора bash. При этом обычно меняется вид приглашения командной строки.
Каждый командный процессор при запуске пытается выполнить свои стартовые файлы, вначале системные (общие для всех пользователей), а затем пользовательские. Общие лежат в /etc, индивидуальные – в домашнем каталоге пользователя. Если командный процессор запускается при входе пользователя в систему (в таком случе он называется login shell, дословно – командный процессор, запущенный при входе в систему), то после стартовых файлов он выполняет еще и login-файлы в том же порядке: сначала общий login-файл из /etc, затем – индивидуальный, из домашнего каталога. Login-файлы – это тоже стартовые файлы командного процессора; все стартовые файлы фактически представляют собой скрипты на языке командного процессора и служат для инициализации среды окружения командного процессора для конкретного пользователя. Настройка командного процессора для пользователя позволяет творить чудеса: задать короткие псевдонимы для длинных часто используемых команд и т.п.
Некоторые командные процессоры при входе в систему выполняют сначала login-файлы, а затем – стартовые файлы; это зависит от того, как они были скомпилированы.
Другие командные процессоры не выполняют никакие стартовые файлы иначе, как при входе пользователя в систему. У командного процессора обычно есть ключ, который можно дать, чтобы сымитировать вход в систему и заставить его выполнить login-файлы.
Командный процессор 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 вовсе и дает доступ только к командам, которые были введены в течение текущего сеанса работы с ним. Можно изменить число хранимых команд, указав иное значение переменной, в которой оно хранится.