Каналы и перенаправление потоков Linux

Любому процессу  доступны минимум 3 инфо канала: “стан­дартный ввод” (STDIN), “стандартный вывод” (STDOUT) и “стандартная ошибка” (STDERR). Они устанавливаются ядром ОС  от самого процесса и сам процесс может даже не знать о их направленности.

Для Unix систем используют универсальную модель ввода-вывода, где каждому каналу присваивается целое число называемое файловым дескриптором. 

u9584_4400_Widescreen__006728_-1024x640

Точное число канала для приложений не важен, но дескриптор каналов STDIN, STDOUT, STDERR абсолютно всегда соответствует файловым дескрипторам 0 ; 1 ; 2. Что дает безопасное обращение по номерам. На практике в окне терминала канал STDIN обычно считывает данные с клавиатуры, а  STDOUT и STDERR выводят свои данные на экран(записывают в файл)

Большинство коман принимает данные из  STDIN и выводит в STDOUT, а ошибки записывает в STDERR. Оболочка интерпретирует символы “<”, “>” и “>>” как команду по перенаправлению данных.

“<” – ввод данных (STDIN)

“>” и “>>” – вывод (STDOUT).  “>”- заменят содержимое файла, “>>” – дописывает в конец файла.

Например :

Сохраняет данную строку в файл /tmp/mytest . Если файл не существует, то он будет создан, если в этом файле есть другая информация, то она будет удалена.

Эта команда отправит электронное сообщение пользователю admin из нашего только, что созданного файла (программа- mail, должна быть установленнна и настроенна в системе):

Для одновременного перенаправления потоков STDOUT и STDERR в одно место используется символ “>&”, для одного потока STDERR  пользуйтесь “2>”.

Например для того чтоб убрат все ошибки при поиске, можно использовать следующую команду:

Можно использовать последовательно(записать в файл вывод, опуская ошибки):

Для связи обоих операторов  STDOUT и STDIN  используется файл ” | “. Например:

 

Поделиться в соц. сетях:

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс