Во многих случаях при работе с файлами нам необходимо будет использовать вывод команды. Решением проблемы перенаправления вывода занимаются командные оболочки, которые мы будем рассматривать позже.
В работе с коммандной строкой Linux есть понятия стандартных устройств ввода, вывода и вывода ошибок.
stdin – стандартное устройство ввода. Имеет файловый указатель №0.
Автоматически открывается всеми процессами.
stdout – стандартное устройство вывода. Имеет файловый указатель №1.
Автоматически открывается всеми процессами.
stderr – стандартный поток ошибок (специальное устройство вывода для
сообщений об ошибках. Имеет файловый указатель №2.
Автоматически открывается всеми процессами.
По умолчанию практически все команды Linux используют для ввода информации stdin, а для вывода stdout и stderr, если им параметрами не указано обратное.
Операторы перенаправления способны изменять направление вывода и ввода информации. Так оператор:
> - перенаправляет стандартный поток в файл (другой поток). При этом
если файл существует, то он перезаписывается, если не существует –
создается.
>> - перенаправляет стандартный поток в файл. При этом если файл
существует, то информация добавляется в конец, если не существует
– файл создается.
< - перенаправляет содержимое указанного файла на стандартный ввод
программе.
>& - перенаправляет стандартные потоки вывода и ошибок друг в друга.
Рисунок 38.
Рисунок 39.
Рисунок 40.
Рисунок 41.
Такой способ перенаправления вывода подходит при работе с файлами. Если вывод какой-либо программы необходимо перенаправить на вход другой? Для этого в Linux существует такое понятие как каналы.
Канал – программный интерфейс, позволяющий процессам обмениваться данными (односторонний поток).
Организацией канала занимается shell. Для управления каналом существует оператор “|”. Пример:
Рисунок 42.
Рассмотрим поподробнее все, что произошло при выполнении данной нами группы команд:
• Команда cat прочитала файл lesson7_1.txt и передала его содержание на стандартный ввод команды tail
• Команда tail исходя из заданных ей параметров взяла 3 последние строки текстового файла и передала их на стандартный ввод команде less
• Команда less вывела информацию со стандартного ввода на экран и стала ожидать действий пользователя.
Таким образом одна команда передавала по каналу информацию другой команде.