Shells и команды


В большинстве ваших исследований мира UNIX вы будете общаться с ним через оболочку shell. Shell - это просто программа, которая воспринимает введенное пользователем, (т.е. команды, которые вы напечатаете) и транслирует это в команды системе. Это можно сравнить с программой COMMAND.COM под MS-DOS, которая делает нечто похожее. Shell - это лишь один из интерфейсов UNIX. Существует много различных интерфейсов, таких как X Window System, которая позволяет выполнять команды используя мышь и клавиатуру в сочетании.

Как только вы вошли, система запускает shell и вы можете вводить для него команды. Вот короткий пример. Как раз Larry вошел в систему и система вновь выдала подсказку:

mousehouse login: larry Password: larry's password Welcome to Mousehouse! /home/larry#

``/home/larry#'' это подсказка shell, показывающая, что он готов принимать команды. (Подробнее про подсказкy позже). Давайте попросим систему сделать что-нибудь интересьненькое:

/home/larry# make love make: *** No way to make target `love'. Stop. /home/larry#

Хм, как оказалось, "make" - это имя существующей в системе программы и shell пытался выполнить эту команду. (Жаль, но система отнеслась к просьбе недружественно).

Это подводит нас к жгучему вопросу: Что такое команды? Что происходит, когда вы вводите ``make love''? Первое слово командной строки ``make'' это имя команды, которую предполагается выполнить. Все остальное в командной строке воспринимается как аргументы команды.

Примеры:

/home/larry# cp foo bar

Здесь имя команды ``cp'', а аргументы ``foo'' и ``bar''.

Когда вы вводите команду, shell делает несколько вещей. Во-первых, смотрит на то, что может (должно) быть именем команды и является ли это внутренней для shell командой. (Внутренняя, это команда, которую shell знает как выполнять. Существует ряд таких команд, мы о них поговорим позже). Shell также проверяет, не является ли команда синонимом другой или требуется подстановка имени. Если этого не надо делать, shell ищет соответствующую этому имени программу на диске. Если shell находит такую программу, он ее выполняет, передавая ей аргументы из командной строки.

В нашем примере shell ищет программу по имени make и пытается выполнить ее с аргументом love. make - это программа, которая часто используется при компиляции больших программ, она берет в качестве аргумента имя "целевого" файла компиляции. В случае ``make love'' мы приказали команде make откомпилировать love. Поскольку make не смог найти файла с таким именем, он сообщил (несколько забавным образом) о невозможности выполнить команду и вернулся в подсказку.

Что случится, если мы введем команду, а shell не сможет найти программу с этой командой? Давайте попробуем:

/home/larry# eat dirt eat: command not found /home/larry#

Все очень просто, если shell не может найти программу с именем данным в командной строке (здесь ``eat''), он выдает сообщение об ошибке, которое объясняет причину невыполнения команды. Вы часто будете видеть это сообщение, если будете вводить имена команд с ошибками. (например, напечатаете ``make love'' вместо ``make love'').



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