Обработкой команд, вводимых пользователем, превращением их в последовательность системных и библиотечных вызовов занимается специальная программа, с которой непрерывно ведет диалог пользователь сразу после входа в систему. Эта программа называется интерпретатор командной строки или командная оболочка («shell»). «Оболочкой» она названа как раз потому, что все управление системой идет как бы «изнутри» нее: пользователь общается с нею на удобном ему языке (с помощью текстовой командной строки), а она общается с другими частями системы на удобном им языке (вызывая запрограммированные функции).
Таким образом, пользователь вводит с терминала строку, shell считывает ее, иногда преобразуя по определенным правилам. Получившуюся строку разбивает на команду и параметры, а затем выполняет команду, передавая ей эти параметры, т.е. запускает утилиту – программу, имя которой совпадает с именем команды. Команда, в свою очередь, анализирует параметры, выделяет среди них ключи и делает то, о чем ее попросили, попутно выводя на терминал данные для пользователя, после чего завершается. По завершении команды возобновляется работа «отступившего на задний план» командного интерпретатора – он снова считывает командную строку, разбирает ее, вызывает команду... Так продолжается до тех пор, пока пользователь не скомандует оболочке завершиться самой (с помощью управляющего символа ^D, который для shell значит то же, что и для других программ – больше с терминала ввода не будет).
|
|
Конечно, командных интерпретаторов в Linux несколько. Самый простой из них, появившийся в ранних версиях UNIX, назывался sh – Bourne Shell – по имени автора, Стивена Борна (Stephen Bourne). Со временем его везде, где только можно заменили на более мощный, bash – Bourne Again Shell. Bash превосходит sh во всем, особенно в возможностях редактирования командной строки. Помимо sh и bash в системе может быть установлен zsh – The Z Shell, самый мощный на сегодня командный интерпретатор (шутка ли, 22 тысячи строк документации!), или tcsh, обновленная и тоже очень мощная версия старой оболочки csh – C Shell, синтаксис команд которой похож на язык программирования Си.
Имя оболочки, запускаемой для пользователя сразу после входа в систему – так называемый стартовый командный интерпретатор (login shell), – это часть пользовательской учетной записи, которую пользователь может изменить командой chsh (change shell).
Для того, чтобы узнать значение переменных Вашей среды необходимо набрать команду env. Значение переменных команды:
Home – место расположение Вашего основного каталога.
Logname – хранит имя пользователя.
Mail – хранит расположение Вашего почтового ящика.
|
|
Path – хранит список всех каталогов, которые просмотрит оболочка при поиске команд при запуске на исполнение той или иной команды. Если каталоги, хранящие команды, не включены в path, то оболочка ответит сообщением об ошибке («не обнаружено»).
PS1 (PS2) – определяет как будет выглядеть символ командной строки ($ или #).
TZ – идентифицирует текущий часовой пояс.
Shell – переменная оболочки.
Term – переменная терминала.
Какая бы задача, связанная с управлением системой, ни стояла перед пользователем Linux, она должна иметь решение в терминах командного интерпретатора. Фактически, решение пользовательской задачи – это описание ее на языке shell. А shell в свою очередь занимается только тем, что подготавливает набор параметров в командной строке (например, раскрывая шаблоны), запускает программы и обрабатывает результаты их работы. Язык общения пользователя и командного интерпретатора – это высокоуровневый u1103 язык программирования, дополненный, с одной стороны, средствами организации взаимодействия команд и системы, а с другой стороны – средствами взаимодействия с пользователем, облегчающими и ускоряющими работу с командной строкой.
Ввод и вывод
Любая программа - это автомат, предназначенный для обработки данных: получая на входе одну информацию, они в результате работы выдают другую. Хотя входящая и/или выходящая информация может быть и нулевой, т. е. попросту отсутствовать. Те данные, которые передаются программе для обработки - это ее ввод, то, что она выдает в результате работы - вывод. Организация ввода и вывода для каждой программы - это задача операционной системы. Многие команды получают информацию с так называемого стандартного входа и посылают информацию на опять же так называемый стандартныйвыход. shell организует дело так, что стандартным входом служит клавиатура, а стандартным выходом - экран.
Рассмотрим, к примеру, использование команды cat. Если в качестве параметров заданы имена файлов, cat читает данные из файлов и посылает эти данные прямо на стандартныйвыход (stdout). Поэтому при выполнении команды cat student class на экран будет выведено содержимое файла student, а следом за ним содержимое файла class. Но если команде cat не заданы имена файлов в качестве параметров, то она читает данные со стандартного входа (stdin) и посылает их на стандартныйвыход. То есть, все, что Вы будете вводить с клавиатуры, будет выведено командой cat на экран после завершения ее работы – сочетание клавиш Ctrl-d.
Команда sort, это команда сортировки, без указания аргументов сортирует информацию, поступающую со стандартного входа. Она упорядочивает строки и выдает результат на стандартный выход - экран. Пример:
$ sort
Bananas
Carrots
Apples
Нажмите Ctrl-d и Вы увидите измененный список в алфавитном порядке. В конце появится новое приглашение на ввод команд $.