$ who | sort
Печать отсортированного списка пользователей
$ who | wc -l
Подсчет числа пользователей
$ ls | wc -l
Подсчет числа файлов
$ ls | pr -3
Вывод списка имен файлов в три столбца
$ who | grep mary
Поиск определенного пользователя
Всякая программа, вводящая информацию с терминала, может вводить ее и по программному каналу; всякая программа, производящая вывод на терминал, может выдавать информацию в программный канал. Это тот случай, когда приносит плоды решение читать стандартный входной поток, если не заданы никакие файлы. Любая программа, выполняющая данное соглашение, может быть включена в конвейер. В рассмотренных выше примерах команды pr
, grep
, sort
и wc
используются именно таким способом.
Можно связать конвейером сколь угодно много программ. Например,
$ ls | pr -3 | lpr
создает список имен файлов в три столбца и выдает его на печатающее устройство, а
$ who | grep mary | wc -l
подсчитывает, сколько раз пользователь Мэри входила в систему.
Программы, связанные конвейером, выполняются одновременно, а не последовательно одна за другой. Это означает, что программы в конвейере могут вступать в диалог; ядро выполняет необходимые операции переключения и синхронизации, чтобы такая схема работала. Большинство команд следует определенному образцу, поэтому они хорошо вписываются в конвейер и могут выполняться в нем на любом месте. Обычный вызов команды имеет вид:
команда флаги возможные имена файлов
Если имена файлов не указаны, то команда читает стандартный входной поток, который по умолчанию поступает с терминала (что удобно для экспериментирования), однако возможно его переключение на файл или программный канал. Кроме того, во многих командах выдача идет в стандартный выходной поток, который по умолчанию направлен на терминал, но его также можно переключить на файл или программный канал.
Сообщения же об ошибках, выдаваемые командами, следует обрабатывать по-другому, иначе они затеряются в файле или программном канале. Поэтому каждая команда имеет еще один стандартный файл, называемый файлом диагностики, который обычно связан с вашим терминалом:
Рис. 1.2 : Схема потоков в UNIX
Почти все рассматривавшиеся выше команды укладываются в эту схему; исключение составляют who
и date
, не имеющие входной информации, а также те, например cmp
или diff
, которые имеют определенное число входных файлов. (Посмотрите их флаг '-'
.)
Упражнение 1.7
Объясните разницу между командами
$ who | sort
и
$ who > sort
Процессы
Интерпретатор shell
выполняет и некоторые другие операции, помимо связывания через программный канал. Рассмотрим кратко вопрос одновременного выполнения нескольких программ, о чем уже упоминалось при обсуждении программных каналов. Например, можно запустить две команды с помощью одной командной строки, разделив их точкой с запятой; интерпретатор shell
распознает этот символ и разобьет строку на две команды:
$ date; who
Tue Sep 27 01:03:17 EDT 1983
ken tty0 Sep 27 00:43
dmr tty1 Sep 26 23:45
rob tty2 Sep 26 23:59
bwk tty3 Sep 27 00:06
jj tty4 Sep 26 23:31
you tty5 Sep 26 23:04
her tty7 Sep 26 23:34
Обе команды будут выполнены (подряд) прежде, чем интерпретатор вновь вернется с приглашением.
Можно также при желании запустить несколько команд одновременно. Предположим, что вы собираетесь заняться длительными вычислениями, например, подсчитать число слов в вашей книге, но не хотите ждать окончания команды wc
для перехода к другой работе. Тогда можно задать:
$ wc ch* > wc.out &
6944
Shell дает номер процесса
$
Амперсанд ( &
) в конце командной строки указывает интерпретатору, что нужно запустить данную команду, а затем сразу перейти к получению последующих команд с терминала, т.е. не ждать ее завершения. Итак, команда будет выполняться, а вы можете отвлечься на что-нибудь другое. Переключение выходного потока на файл wc.out
предотвращает возможность его смешивания с той информацией, которая появится на терминале в процессе дальнейшей работы.
Каждый экземпляр запущенной программы называется процессом . Число, выдаваемое shell
в ответ на команду, введенную с &
, является номером процесса. Его можно использовать в других командах в качестве ссылки на данный экземпляр выполняемой программы.
Читать дальше
Конец ознакомительного отрывка
Купить книгу