Перенаправление команд в терминале Linux

Подписка на LinuxFormat 2017 Инфофорум национальной безопасности

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

Перенаправление (составление конвейера) команд Linux

Метасимвол канала (|) связывает вывод одной команды с вводом другой. При этом следующая команда может работать с выводом предыдущей. Вот пример конвейера команд:

Эта команда Linux выводит содержимое файла /etc/password и перенаправляет вывод команде sort, сортирующей в алфавитном порядке имена пользователей и далее передает вывод команде less (для постраничного вывода результата сортировки).

Конвейеры хорошо демонстрируют, как лежавшая в основе Linux операционная система UNIX составлялась из отдельных строительных блоков. Связывание утилит разными способами для решения различных задач считается стандартным подходом в операционной системе UNIX. Например, до появления графических текстовых процессоров пользователи создавали простые текстовые файлы, содержащие макросы для обозначения форматирования. Для просмотра конечного результата приходилось применять соответствующие команды, например:

В этом примере содержимое страницы справочного руководства для команды grep (grep. 1 .gz) переадресуется команде gunzip для распаковки. Вывод команды gunzip перенаправляется команде nroff для форматирования с использованием макроса справочного руководства (-man). Результат форматирования передается команде less для постраничного вывода. Так как файл выводится в текстовом формате, можно добавить любое количество команд для обработки текста перед выводом. Можно отсортировать содержимое файла, изменить или удалить его часть или вставить текст из других документов. Главное, что все эти функции предоставляются не одной программой, а являются результатом перенаправления ввода и вывода команд между несколькими программами Linux.

Последовательное выполнение команд с последующим перенаправлением вывода команды Linux

Иногда команды должны выполняться последовательно, одна за другой. Для этого в командной строке можно ввести несколько команд и разделить их точкой с запятой (;).

В приведенном примере выполняется форматирование огромного документа, при этом необходимо знать, сколько времени занимает такая операция. Первая команда (date) выводит дату и время начала форматирования. Команда troff выполняет форматирование и передает результат работы на печать. По завершении форматирования опять выводится текущая дата и время (при этом можно подсчитать время, которое потребовалось команде troff для завершения форматирования).

Фоновое выполнение команд

Выполнение некоторых команд может потребовать значительного времени. Иногда желательно не блокировать интерпретатор до завершения выполнения команды. В таких случаях команды можно запускать в фоновом режиме с помощью символа амперсанда (&).
Команды форматирования текста (например, рассмотренные ранее nroff и troff) часто запускаются в фоновом режиме для форматирования больших документов. Кроме этого, иногда возникает необходимость создания собственных сценариев, которые реализуются в фоновом режиме и ожидают выполнения определенных событий, например переполнения жесткого диска или регистрации определенного пользователя.
Вот пример команды, запускаемой в фоновом режиме:

Комментарии:

Один комментарийПеренаправление команд в терминале Linux

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">