**103.4** Потоки, конвейеры и перенаправления

Студент должен уметь управлять потоками для обработки текстовых данных

**Изучаем** :

- перенаправление стандартных ввода, вывода и ошибок;
- передачу вывода одной команды на ввод другой;
- использование вывода одной команды в качестве аргументов другой;
- получение выходных данных в файл и на стандартный вывод.

**Термины и утилиты:       **

- tee
- xargs

- stdin
- stout
- stderr

Linux традиционно использует потоки для ввода, вывода и ошибок. Обычно ввод – это клавиатура или файлы, а вывод ошибок и результатов происходит в консоль. Но часто бывает нужно объединить последовательность команд в конвейер, или отправить результат в какой-нибудь файл.

Для того чтобы послать на ввод программы некоторые данные используется знак &quot; **&lt;**&quot;, например:

**wc**  **&lt;**  **file**** 1. ****txt****        ** _(использовать в качестве ввода для программы_ _wc_ _файл_ _file __.__ txt__);_

Для того чтобы послать вывод программы куда-нибудь, кроме стандартного направления, используется знак &quot; **&gt;**&quot;, например:

**ls**  **&gt;**  **list****. ****txt**  _(перезаписать содержимое файла_ _list __.__ txt_ _результатом команды_ _ls__);_

**ls**  **&gt;&gt;**  **list****. ****txt**  _(дописать в файл_ _list __.__ txt_ _результат команды_ _ls__);_

Для ввода, вывода и ошибок используются следующие обозначения:

- **Stdin**         _– стандартный ввод программы (обозначение &quot;0&quot;);_
- **Stdout**         – _стандартный вывод программы (обозначение &quot;1&quot;);_
- **Stderr**          – _стандартные ошибки программы (обозначение &quot;2&quot;);_

Например:

**l**** s bob 2&gt; error.txt**

**ls**** bob **** &gt; **** result ****.**** txt **** 2&gt; **** error ****.**** txt**