Библиотека сайта rus-linux.net
Цилюрик О.И. Linux-инструменты для Windows-программистов | ||
Назад | Консольные команды | Вперед |
Фильтры, каналы, конвейеры
Большинство команд и утилит UNIX (GNU, Linux) являются фильтрами:
- они имеют неявный стандартный поток ввода
(файловый дескриптор 0,
SYSIN
) и стандартный поток вывода (файловый дескриптор 1,SYSOUT
) ... (и стандартный поток журнала ошибок, 2,SYSERR
, который в этом рассмотрении нас будет меньше прочих интересовать); - часто (но не обязательно)
SYSIN
это клавиатура ввода, аSYSOUT
это экран консоли или терминала, но, например, при запуске из-под суперсервераinetd (xinetd)
SYSIN
иSYSOUT
это будут сетевые TCP/IP сокеты; - эти потоки ввода-вывода могут перенаправляться
(
>, >>, <
), или через каналы (|
) поток вывода одной утилиты направляется в поток ввода другой: <DF>$ prog 2>/dev/null
- подавляется вывод ошибок (
SYSERR
направляется на/dev/null
— псевдоустройство, которое поглощает любой вывод).$ ps -Af | grep /usr/bin/mc | awk '{ print $2 }' 4920 4973 5013 5096
- выбираем только 2-е поле (
<DF>PID
) интересующих нас строк.
- потоки могут сливаться (очень часто это характерно для потока
ошибок 2):
<DF>
$ prog >/dev/null 2>&1
- поток ошибок 2 направляется в поток вывода 1 (знак
<df>&
отмечает, что это номер дескриптора потока,SYSOUT
, а не новый файл с именем 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>
Предыдущий раздел: | Оглавление | Следующий раздел: |
Уровень диагностического вывода команд | Справочные системы |