Существует два способа выполнения программ: в оперативном и фоновом режимах. Оперативный режим означает, что Вы взаимодействуете с программой - она получает информацию с клавиатуры и посылает результаты на экран и пока первая программа не закончит работу, запустить вторую нельзя. Фоновые программы не получают информации с терминала, а в случае необходимости вывода сообщения на экран делают это, не обращая внимания на существующий на экране текст.
Для запуска фоновых, долго выполняющихся команд, без отрыва от текущей задачи используется «&».
& - фоновое выполнение предшествующей команды;
&& - выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать;
|| - выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать.
Для группировки команд shell использует фигурные «{}» и круглые «()» скобки. Рассмотрим примеры, сочетающие различные способы группировки: Если введена командная строка, где k1, k2 и k3 - какие-то команды
|
|
$ k1 && k2; k3
то k2 будет выполнена только при успешном завершении k1. После любого из исходов обработки k2 (т.е. k2 будет выполнена, либо пропущена) будет выполнена k3.
$ k1 && {k2; k3}
Здесь обе команды, k2 и k3, будут выполнены только при успешном завершении k1.
$ {k1; k2} &
В фоновом режиме будет выполняться последовательность команд k1 и k2.
Команда sleep ожидает указанное число секунд, прежде чем закончить свое выполнение:
$ (sleep 5; date) & date
Дата будет сразу выведена на экран, но это будет результат выполнения второй команды date. После даты появится приглашение - так что Вы можете продолжать ввод команд, и лишь затем через 5 секунд дата, выданная первой командой date.
Что происходит в системе при выполнении такой командной строки? Фоновый процесс начинается, но сразу «засыпает». Тем временем вторая команда date выдает текущее время, а интерпретатор shell - приглашение для ввода новой команды. Пятью секундами позже прекращается выполнение команды sleep, и первая команда date выдает новое время. Это удобный способ отложить запуск команды на будущее.
(sleep 120; echo The tea is ready) & echo The tea will be ready through 2 minutes
Выполнение команд, заключенных в скобки будет переведено в фоновый режим. Вторая команда echo немедленно выдаст на экран сообщение: "The tea will be ready through 2 minutes" (Чай будет готов через 2 минуты). После чего в следующей строке появится системное приглашение, и Вы сможете продолжить выполнение команд. Через две минуты закончится фоновое выполнение команды sleep и команда echo выдаст на экран сообщение о том, что чай готов.
При генерации имен используют метасимволы:
* – произвольная (возможно пустая) последовательность символов;
|
|
? – один произвольный символ;
[...] – любой из символов, указанных в скобках перечислением и/или с указанием диапазона.
Примеры:
cat f* – выдаст все файлы каталога, начинающиеся с «f»;
cat *f* – выдаст все файлы, содержащие «f»;
cat program.? – выдаст файлы данного каталога с однобуквенными расширениями, скажем «program.c» и «program.o», но не выдаст «program.com»;
cat [a-d]* – выдаст файлы, которые начинаются с a, b, c, d. Аналогичный эффект дадут и команды «cat [abcd]*» и «cat [bdac]*».
Вопросы для самоконтроля
1 Что такое shell?
2 Каким образом работает shell?
3 Какие еще существуют виды оболочек в Linux?
4 Как можно узнать значение переменных Вашей среды?
5 Что является стандартным входом и стандартным выходом в Linux?
6 Каким образом команда cat работает со стандартным входом и стандартным выходом?
7 В чем назначение команды sort?
8 Что такое перенаправление (входа и выхода), и каким образом оно реализуется?
9 Рядом с каждой ниже перечисленной командой напишите результат ее выполнения: 1) сat 2) sort > primer 3) сat primer 4) cat primer > zadanie 5) cat < primer
10 Куда команда cat перенаправит информацию из файла, если указано имя несуществующего файла?
11 Что произойдет с содержимым файла, если в него перенаправить информацию из другого файла?
12 Что такое конвейер? Какую работу выполняет конвейер между двумя командами?
13 В чем преимущество выполнения команд с помощью конвейера и без него?
14 Что такое перенаправление с добавлением, и каким образом оно реализуется?
15 Где располагается информация, добавленная в фай с помощью перенаправления с добавлением?
16 В чем отличие выполнения программ в оперативном и фоновом режимах?
17 Каким образом реализуется выполнение фоновых программ?
18 Для чего необходима группировка команд, и каким образом она реализуется?
19 Для чего необходимы метасимволы? Назовите основные метасимволы.