Вперед: 2.6. Наиболее употребительные команды пользователя
Назад: 2.4. Процессы в ОС UNIX
К содержанию: Оглавление


2.5. Выполнение команд в ОС UNIX

Работа с ОС UNIX в удаленном режиме выполняется главным образом в режиме "командной строки". Пользователь вводит команду и ожидает завершения ее выполнения. Выполнение команды состоит из нескольких этапов:

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

Синтаксис командной строки:

команда [опции] [аргумент] ... [аргумент]

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

опции (ключи) - специальные параметры программы, которые влияют на процесс ее выполнения и результат работы команды. Опции могут состоять из одного символа перед которым ставится знак минус ( -l ) или из слова целиком, перед которым ставятся два знака минус подряд (--help). Опции, состоящие из одного символа, могут объединятся. Например, комбинированная опция -al эквивалентна двум опциям -a -l. Для разделения компонентов внутри командной строки по умолчанию используется пробел;

аргумент - параметр, передаваемый команде.

В скобках указываются необязательные элементы команды. Таким образом, обязательным элементом является только имя команды.

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

команда [опции] [аргументы] &

В этом случае, происходит немедленное освобождение терминала, а команда выполняется в фоновом режиме.

С каждым процессом в ОС UNIX связывается три стандартных файла: файл ввода (stdin), файл вывода (stdout) и файл диагностики (stderr). По умолчанию файл вывода и диагностики связывается с монитором, в файл ввода с клавиатурой. Однако выдачу результата можно перенаправить в любой файл с помощью знаков > или >> :

команда [опции] [аргументы] > outfile или

команда [опции] [аргументы] >> outfile или

Если файл с именем outfile уже существовал. то в первом случае он перезапишется заново, а во втором, выдача будет добавлена в конец файла. В тех случаях, когда выдача результата не требуется, то используют перенаправление в спецфайл /dev/null (выдача в "никуда").

Для перенаправления файла ввода используется символ <. Например, можно заранее подготовить письмо в файле letter.txt, а затем отправить его по электронной почте пользователю drug:

mail drug < letter.txt

Часто возникает необходимость, перенаправить вывод одной команды на вход другой. Для этого используются конвейеры. Конвейером называется операция, когда выход одной команды перенаправляется на вход другой команды. Для этого используется специальный оператор | (конвейер) между двумя командами для перенаправления stdout первой команды на stdin второй команды.

команда1 [опции] [аргументы] | команда2 [опции] [аргументы]

ps -el | wc -l - команда ps выводит список процессов в системе, и передает его на вход команды wc -l. Команда wc -l подсчитывает число строк, полученных от команды ps. В результате получим число выполняющихся процессов в системе.

Очень мощным средством является механизм подстановки результата работы команды. Для этого команда заключается между знаками "слабое ударение" (`...`). Результат можно подставлять, либо в качестве аргумента в другую команду, либо присваивать какой-либо переменной:

banner `date | cut -c12-19`
DATE=`date | cut -c12-19`

Как правило, в строке набирается одна команда, но можно набрать и несколько команд, для этого их необходимо разделить символом ';' :

сmd1;cmd2;cmd3 - последовательное выполнение.

Условное выполнение команд

cmd1 && cmd2 - 2-я команда выполнится, только в случае успешного завершения 1-ой команды.

cmd1 || cmd2 - 2-я команда выполнится только, если выполнение 1-ой команды завершилось с ошибкой

Группирование процессов выполняется заключением нескольких команд в круглые скобки (k1;k2;k3). Команды отделяются друг от друга точкой с запятой. Группирование обычно применяется при условном выполнении команд:

k1 && ( k2;k3 )

Однако эта процедура обладает еще одним свойством - для выполнения сгруппированных команд запускается отдельный shell. Если для группирования команд использовать фигурные скобки, то команды будут выполняться в той же самой оболочке.

Останов выполнения команды

Выполнение интерактивной команды прерывает комбинация клавиш "CTRL C". Часто для этой цели пытаются использовать комбинацию "CTRL Z", однако эта комбинация только приостанавливает выполнение, а не завершает его. Для завершения фоновой команды используется специальная команда kill:

kill -9 PID

Здесь PID - идентификатор процесса, а -9 сигнал завершения.

Большинство команд в операционной системе UNIX помимо выдачи на стандартные потоки вывода и ошибок возвращает еще и код завершения команды. По этому коду завершения shell определяет, как завершилась работа программы. Не официально принято, что при правильном завершении, команда возвращает нуль. Если код возврата отличен от нуля, то это означает ошибку при выполнении команды.



Вперед: 2.6. Наиболее употребительные команды пользователя
Назад: 2.4. Процессы в ОС UNIX
К содержанию: Оглавление