Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Введение в каналы и именованные каналы в Linux

Оригинал: An introduction to pipes and named pipes in Linux
Автор: Archit Modi
Дата публикации: 23 августа 2018 года
Перевод: А. Кривошей
Дата перевода: апрель 2019 г.

В Linux команда pipe позволяет отправлять вывод одной команды в другую. Каналы, как предполагает термин, могут перенаправлять стандартный вывод, ввод или ошибку одного процесса другому для дальнейшей обработки.

Синтаксис для команды pipe или команды pipe без имени - символ | между любыми двумя командами:

Command-1 | Command-2 | …| Command-N

Здесь канал не может быть доступен в другом сеансе; он создается временно, чтобы обеспечить выполнение Command-1 и перенаправить стандартный вывод. Он удаляется после успешного выполнения.

создание канала

В приведенном выше примере файл contents.txt содержит список всех файлов в определенном каталоге, то есть вывод команды ls -al. Сначала мы подбираем имена файлов с помощью ключевого слова «file» из contents.txt по каналу (как показано), поэтому выходные данные команды cat предоставляются в качестве входных данных для команды grep. Затем мы добавляем канал для выполнения команды awk, которая отображает 9-й столбец из отфильтрованного вывода команды grep. Мы также можем подсчитать количество строк в content.txt с помощью команды wc -l.

Именованный канал может работать, пока система не будет перезагружена, или пока он не будет удален. Это специальный файл, который использует механизм FIFO (первым пришел, первым вышел). Он может использоваться как обычный файл; то есть вы можете писать в него, читать из него, а также открывать или закрывать его. Чтобы создать именованный канал, используется команда:

mkfifo <pipe-name>

Она создает файл именованного канала, который можно использовать даже в нескольких сеансах оболочки.

Другой способ создать именованный канал FIFO - использовать следующую команду:

mknod p <pipe-name>

Чтобы перенаправить стандартный вывод любой команды другому процессу, используйте символ >. Чтобы перенаправить стандартный ввод любой команды, используйте символ <.

перенаправление вывода

Как показано выше, выходные данные команды ls -al перенаправляются в contents.txt и вставляются в файл. Аналогично, ввод для команды tail предоставляется как contents.txt через символ <.

создание именованного канала

проверка вывода

Здесь мы создали именованный канал my-named-pipe и перенаправили вывод команды ls -al в именованный канал. Мы можем открыть новый сеанс оболочки и отследить содержимое именованного канала, в котором показан вывод команды ls -al, как было указано ранее. Обратите внимание, что размер именованного канала равен нулю и имеет обозначение «p».

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


Другие статьи о программных каналах в Linux: