Именованные каналы

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

Чтобы создать именованный канал используется команда mkfifo либо команда mknod с типом файла p. Например:

mkfifo mypipe1
mknod mypipe2 p

Первая команда создаст в текущем каталоге именованный канал с названием mypipe1, вторая - именованный канал с названием mypipe2.

Попробуем использовать канал mypipe1 для поиска файлов в каталогах /usr/share и /usr/local/share файлов и каталогов в названии которых встречается font.

find /usr/share >mypipe1 &
find /usr/local/share >mypipe1 &
cat mypipe1 | grep font | less

Вывод первых двух команд перенаправляется в именованный канал mypipe1. При этом обе команды запускаются на исполнение в фоновом режиме. Это делается с помощью символа & в конце строки.

Третья команда состоит из трёх команд, вывод которых перенаправляется в поток ввода следующей команды:

  • Команда cat mypipe1 выводит содержимое файла, в данном случае это именованный канал mypipe1.
  • Команда grep font выводит только строки, содержащие font.
  • Команда less испольуется для того, чтобы вывод можно было удобно просматривать. Завершение работы команды less - клавиша q.

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