Эксперты в подборе IT-оборудования

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

19 Марта 2020

В сегодняшней публикации поговорим о такой часто используемой Linux-сисадминами возможности оболочки, интерпретатора команд Linux, как перенаправление трех стандартных потоков ввода / вывода данных. Благодаря этому можно осуществлять вывод команд в файл, передавать файлы на ввод команды, объединять команды и создавать из них цепочки.


Механизм перенаправления ввода-вывода

При выполнении всех команд к пользователю возвращаются три типа данных: результат выполнения (обычно текстовая информация, запрошенная пользователем), сообщения об ошибках (информация о ходе выполнения команды и возникших проблемах) и код возврата (числовая оценка правильности выполнения команды).

Как известно, в Linux все типы данных считаются файлами. Каждый дистрибутив содержит три главных файла потоков, доступные для использования программами: standard input, standard output и standard error. Они определяются оболочкой и идентифицируются по номеру дескриптора файла: «0», «1» и «2» соответственно.

Перенаправление ввода / вывода дает возможность для замены одного из этих файлов на свой. Так, например, можно можно добиться того, чтобы программа считывала данные из файла в файловой системе, а не с клавиатуры или чтобы ошибки выводились сразу в файл, а не на экран и т.д. также можете выводить ошибки в файл, а не на экран и т д.

Осуществляется это посредством операторов «>» и «<» в разных конфигурациях команд, вводимых с терминала и отвечающих за то, куда конкретно должны перенаправляться данные.


Стандартный поток ввода (standard input), системный дескриптор «0»

Информация, транслируемая в терминал, такая как инструкции, которые поступают в оболочку для выполнения. Как правило, данные этого потока вводятся пользователем с клавиатуры. Однако можно заставить программу считывать данные из файла, использовав оператор «<». Также можно той же командой сразу перенаправить в файл и вывод, пересортировав список.


Стандартный поток вывода (standard output), системный дескриптор «1»

Информация, поступающая в окно терминала из оболочки после выполнения команд. Перенаправление вывода в файл осуществляется с помощью оператора «>». Например, сохраняя вывод команды, можно заставить работать программу в неинтерактивном пакетном режиме и повторять операцию нужно число раз для получения информации обо всех процессах. В других командах символ «>» может перезаписывать информацию из файла, если там уже что-то есть. Если информацию требуется добавить в конец файла – необходимо применить «>>».


Стандартный поток ошибок (standard error), системный дескриптор «2»

Похож на предыдущий с точки зрения места поступления информации, являясь при этом его частным случаем. При обработке больших массивов данных служит для выделения сообщений об ошибках в отдельный поток, не давая им смешиваться с полезной информацией, которая идет в standard output; для перенаправления вывода ошибок в файл требуется указать его дескриптор. Если же потребности в разделении данных нет и весь вывод нужно перенаправить в один файл, нужно указать оба дескриптора. Сначала произойдет отправка вывода команды ls в файл ls-error.log посредством первого оператора перенаправления. Затем в тот же файл поступят все ошибки.


Конгломераты команд

По мере освоения перенаправления в Linux можно начать работать не только с файлами, но и перенаправлять вывод одной команды в качестве ввода другой, что может существенно упростить некоторые сложные операции. В качестве примера выведем три файла, которые недавно были изменены. Утилита «xargs» позволяет комбинировать команды так, что стандартный ввод будет транслироваться в параметры.

Например создадим в нескольких папках копию одного файла. Параметр «n» со значением «1» здесь будет означать, что для одной команды потребуется подстановка лишь одного параметра, а опция «v» в «cp» даст возможность для вывода информации о перемещениях. Также следует взять на вооружение такую команду как «tee», которая считывает данные из стандартного ввода и записывает в стандартный вывод или файлы.


Вместо итогов

В этой публикации мы затронули лишь общую механику перенаправления потоков в интерпретаторе командной строки Linux, однако кому-то она может дать толчок к тому, чтобы разбираться с этой темой глубже, а кому-то – поможет освежить в памяти некоторые принципы работы с терминалом. Как и все остальное, перенаправление потоков нуждается в практике и тут можно лишь порекомендовать не бояться самостоятельно экспериментировать с «>» и «<».

 
Поделитесь статьей в соцсетях   
 
Вам также может быть интересно

Товар добавлен в список сравнения
Перейти в сравнение
Продолжить просмотр
Подбираете сервер для 1С?
Подпишитесь на специальную серию писем про выбор и настройку сервера под 1С
Подписаться
Боитесь неправильно выбрать сервер?
Оставьте свой email, и мы пришлем чек-лист с 5 самыми распространенными ошибками
Получить чек-лист
Нажимая кнопку "Получить чек-лист", вы даёте согласие на обработку персональных данных
Заказать консультацию
IT-архитектор подберет сервер под вашу задачу
Заказать сервер
Мы свяжемся с вами в течение 15 мин
Заявка на лизинг