Пт. Май 3rd, 2024

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

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

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

cat /etc/password | sort | less

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

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

gunzip < /usr/share/man/manl/grep.1.gz | nroff -с -man | less

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

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

[ads]

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

date ; troff -me очень_большой_документ | lpr ; date

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

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

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

troff –me очень_большой_документ | lpr &

От Pavel

Мне нравиться пользоваться Linux.

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

Добавить комментарий