Давненько у нас не было материалов для новичков в системном администрировании и желающих получше узнать подноготную Linux-дистрибутивов. Исправляюсь и далее расскажу про перенаправление ввода/вывода в Linux, стараясь сделать это просто и понятно.
Если вы подписаны на канал, но еще не приняли участие в конкурсе, то нужно это исправлять как можно быстрее! Если вы еще не подписаны на Просто Код, то быстренько подписываетесь и переходите по ссылке ниже, чтобы узнать подробности розыгрыша и описание призов.
Ввод, вывод и потоки
Не будем углубляться сильно в теорию (для этого есть учебники и справочники), а просто примем за данность следующие моменты:
- ввод - данные, которые поступают от пользователя в систему при помощи клавиатуры.
- вывод - данные, которые поступают от системы пользователю при помощи терминала и монитора.
Кажется, что все пока просто, верно? Ввод и вывод распределяются между тремя стандартными потоками: stdin (standard input или стандартный ввод), stdout (standard output или стандартный вывод) и stderr (standard error или стандартная ошибка). Также каждый поток пронумерован: 0 (stdin), 1 (stdout) и 2 (stderr). Стандартный вывод используется командами только для считывания данных, остальные две (1 и 2) можно использовать только для их записи.
Чтобы представить ввод наглядно, воспользуемся командой cat, которая обычно применяется для связи (объединения) содержимого двух файлов или их просмотра.
Для демонстрации работы потока вывода воспользуемся командой echo, знакомой нам по некоторым предыдущим заметкам.
Чтобы продемонстрировать работу потока стандартной ошибки достаточно ввести какую-либо команду, как это ни странно, с ошибкой.
Перенаправления потоков и их операторы
Три перечисленных выше потока можно подключать к чему угодно: файлам, программам и устройствам. Такое «подключение» называется перенаправлением. В Linux существуют специальные команды перенаправления, предназначенные для каждого потока:
- > - перенаправление стандартного вывода
- < - перенаправление стандартного ввода
- 2> - перенаправление стандартной ошибки
Вернемся к командам, которые использовали выше и дополним их командами перенаправления.
cat > text1
cat < text1
ls % 2> error
Как понять происходящее на демонстрации? Сначала мы перенаправили стандартный вывод посредством команды cat в файл text1. Затем перенаправили содержимое файла text1 и вывели его на экран (хотя знак перенаправления можно было и не использовать, так как cat сама понимает, что от нее хотят, я оставил его исключительно для примера). Ну, и наконец, мы перенаправили стандартный вывод ошибки в файл error, который после просмотрели при помощи команды cat.
Использование одинарных знаков приводит к перезаписи файла. Чтобы этого не делать, а присоединять данные к нему нужно использовать двойные символы:
- >> - перенаправление стандартного вывода
- << - перенаправление стандартного ввода
- 2>> - перенаправление стандартной ошибки
Вы можете подписаться на обновления канала Просто Код в Телеграме и получать уведомления о выходе новых заметок прямо в любимый мессенджер!
Каналы и их операторы
Чтобы перенаправлять потоки между программами в Linux используются каналы. Когда пользователь выполняет какую-то команду, то вывод данных (мы его еще называем «выхлоп») можно перенаправить в другую программу через канал, без его отображения на экране. Вторая программа обработает поступившие данные и посредством своего стандартного потока выведет отфильтрованные данные. Чтобы установить связь между потоками программ нужно использовать символ | (pipe или труба).
ls | less
В данном примере мы данные, полученные от команды ls (list, просмотр содержимого каталога), перенаправили посредством канала в команду less, которая разместила полученные данные с новой строки и вывела на экран. Говоря проще, мы связали вывод команды ls и ввод команды less.
Чуть подробнее про использование пайпа мы говорили в заметке про команду grep, которую вы можете найти по ссылке ниже.
Подведем итог
Мы познакомились с тем, что такое потоки ввода/вывода/ошибки и узнали про то, как эти потоки можно перенаправлять. Информация специально была дана в упрощенном виде, чтобы материал оказался понятным большинству читателей статьи. Лучшее усвоение и понимание написанного произойдет в случае практического использования описанных в посте команд и операторов перенаправления потоков. Про любые непонятные моменты пишите в комментариях, я или другие подписчики объяснят что к чему.
Также напоминаю, что на канале Просто Код есть большое количество полезных материалов для начинающих системных администраторов и активных пользователей Linux.