Перенаправление потоков и программные каналы


В ОС UNIX существует три стандартных потока: поток ввода, поток вывода и поток стандартного протокола (поток ошибок). Перенаправление потоков позволяет изменить стандартный ввод/вывод: < - изменение источника стандартного ввода; >, >> - изменение приемника стандартного вывода. Примеры:

cat > filename - перенаправление вывода программы cat в файл filename (если этот файл существует, то его прежнее содержимое будет утеряно);

cat >> filename - добавить содержимое вывода программы cat к содержимому файла filename;

cat < filename - сформировать стандартный ввод программы cat из содержимого файла filename.

Стандартные потоки - поток ввода, поток вывода и поток ошибок (поток протокола) имеют фиксированную нумерацию - 0, 1 и 2 соответственно. Эти номера (номера дескрипторов потоков) можно использовать в явном виде. Например, запись

prog 1>file

эквивалентна записи prog >file

Для того, чтобы отличить имя потока от имени файла, перед номером потока ставится символ ‘&’: prog >file 2>&1

Здесь происходит перенаправление стандартного потока вывода в файл file (>file). А кроме того, сообщения об ошибках также будут перенаправлены в файл file: запись 2>&1 означает перенаправление потока ошибок на стандартный поток вывода, который, в свою очередь, был перенаправлен в файл. Замечание: анализ команды осуществляется интерпретатором справа налево: сначала происходи слияние потоков (2>&1), а затем перенаправляется стандартный поток вывода (1) в файл file. Бывает полезно использование псевдоустройства /dev/null, удаляющего все введенные в него символы. Это используется тогда, когда необходимо полностью игнорировать (подавить) выходные потоки.

Канал - это программное средство, связывающее процессы ОС UNIX буфером ввода/вывода. Запуск процессов в виде $ процесс_1 | процесс_2 | ... | процесс_n

означает, что стандартный вывод процесса_1 будет замкнут на стандартный ввод процесса_2, стандартный вывод процесса_2 будет замкнут на стандартный ввод процесса_3 и т.д. При этом сначала создается канал, а потом на выполнение одновременно запускаются все процессы, и общее время их выполнения определяется более медленным процессом. Пример: ls | wc -l

Те же действия можно организовать так:

ls > buffer

wc -l < buffer

rm -f buffer

Команда ls выводит на экран (стандартный поток вывода) список файлов текущего каталога, а команда wc -l считает количество строк во входном потоке (в файле, а если файл не указан - в стандартном входном потоке). Таким образом, объединение этих двух команд программным каналом позволяет посчитать количество файлов в текущем каталоге.

Итоговая таблица:

 

> file Перенаправление стандартного потока вывода в файл file
>> file Добавление в файл file данных из стандартного потока вывода
< file Получение стандартного потока ввода из файла file
p1 | p2 Передача стандартного потока вывода программы p1 в поток ввода программы p2
n > file Переключение потока вывода из файла с дескриптором n в файл file
n >> file Добавление записей потока вывода из файла с дескриптором n в файл file
n > &m Слияние потоков с дескрипторами n и &m

Набор имени команды производится с клавиатуры после появления промпта (приглашения), обычно, - $. Для облегчения работы с системой UNIX имеется возможность использовать шаблоны имен файлов (или метасимволв): ? - один любой символ;

* - произвольное количество любых символов.

Например: *.c - задает все файлы с расширением "c";

pr???.* - задает файлы, имена которых начинаются с "pr", содержат пять символов и имеют любое расширение.

Справочные команды

date - получение даты и времени.

who - получение списка пользователей, работающих в системе в данный момент.

Пример: $ who

petr tty4i Mar 11 18:46

ann tty12 Mar 11 16:29

Выводится имя пользователя, номер терминала, дата и время начала работы этого пользователя. Команда who am i выведет информацию о самом пользователе.

man - получение справочной информации: $ man [имя команды]

Альтернативой команды man в некоторых клонах UNIX является командаuse:

use [имя команды]



Дата добавления: 2021-09-25; просмотров: 358;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.