Программные каналы

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

ls -l | less

Приведенная команда позволяет получить "оглавление" текущего каталога и записать его в программный канал. Оттуда команда less, выполняемая параллельно, считывает ввод предыдущей команды и отображает его на экране.

Программные каналы великолепно подходят для комбинирования различных команд. Так, например, следующая команда возвращает отсортированный список всех установленных пакетов RPM:

rpm -qa | sort

Вместо программных каналов для переадресации ввода и вывода могут использоваться так называемые FIFO-файлы. Работать с FIFO-файлами при вводе значительно сложнее, чем с программными каналами, однако они позволяют уяснить, на что же именно влияет символ |. На практике такие файлы применяются для того, чтобы две программы, работающие независимо друг от друга, могли обмениваться информацией.

mkfifo fifo
ls -l > fifo &
less < fifo

С помощью трех вышеуказанных команд сначала создается FIFO-файл. Кроме того, в виде фонового процесса запускается ls. Она записывает свой вывод в файл. Оттуда less вновь считывает данные и отображает их на экране.

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