Рейтинг@Mail.ru

Наши друзья и партнеры

UnixForum




Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Linux-инструменты для Windows-программистов
Назад Консольные команды Вперед

Фильтры, каналы, конвейеры

Большинство команд и утилит UNIX (GNU, Linux) являются фильтрами:

  1. они имеют неявный стандартный поток ввода (файловый дескриптор 0, SYSIN) и стандартный поток вывода (файловый дескриптор 1, SYSOUT) ... (и стандартный поток журнала ошибок, 2, SYSERR, который в этом рассмотрении нас будет меньше прочих интересовать);
  2. часто (но не обязательно) SYSIN это клавиатура ввода, а SYSOUT это экран консоли или терминала, но, например, при запуске из-под суперсервера inetd (xinetd) SYSIN и SYSOUT это будут сетевые TCP/IP сокеты;
  3. эти потоки ввода-вывода могут перенаправляться (>, >>, <), или через каналы (|) поток вывода одной утилиты направляется в поток ввода другой: <DF>

    $ prog 2>/dev/null

    - подавляется вывод ошибок (SYSERR направляется на /dev/null — псевдоустройство, которое поглощает любой вывод).

    $ ps -Af | grep /usr/bin/mc | awk '{ print $2 }'
    4920
    4973
    5013
    5096
    

    - выбираем только 2-е поле (PID) интересующих нас строк.

    <DF>
  1. потоки могут сливаться (очень часто это характерно для потока ошибок 2): <DF>

    $ prog >/dev/null 2>&1

    - поток ошибок 2 направляется в поток вывода 1 (знак & отмечает, что это номер дескриптора потока, SYSOUT, а не новый файл с именем 1); изменение порядка записи операндов в этом примере изменит результат: поток ошибок будет выводиться;

    <df>
  1. чаще всего (но и это не обязательно) SYSIN и SYSOUT это символьные потоки, но это могут быть и потоки бинарных данных, например, аудио в утилитах пакетов: sox, ogg, vorbis, speex ... <DF>
    $ speexdec -V male.spx - | sox -traw -u -sw -r8000 - -t alsa default
    $ speexdec -V male.spx - | tee male3.raw | sox -traw -u -sw -r8000 - \
    -t alsa default
    <DF>

Предыдущий раздел: Оглавление Следующий раздел:
Уровень диагностического вывода команд   Справочные системы

Поделиться: