Библиотека сайта 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>
| Предыдущий раздел: | Оглавление | Следующий раздел: |
| Уровень диагностического вывода команд | Справочные системы |
