Программные каналы
Программный канал (pipe) создается с помощью символа |. При этом вывод первой команды используется как ввод для второй команды. На практике программные каналы часто объединяются командой less, если нужно просматривать длинный ввод в виде постраничной разбивки:
ls -l | less
Приведенная команда позволяет получить "оглавление" текущего каталога и записать его в программный канал. Оттуда команда less, выполняемая параллельно, считывает ввод предыдущей команды и отображает его на экране.
Программные каналы великолепно подходят для комбинирования различных команд. Так, например, следующая команда возвращает отсортированный список всех установленных пакетов RPM:
rpm -qa | sort
Вместо программных каналов для переадресации ввода и вывода могут использоваться так называемые FIFO-файлы. Работать с FIFO-файлами при вводе значительно сложнее, чем с программными каналами, однако они позволяют уяснить, на что же именно влияет символ |. На практике такие файлы применяются для того, чтобы две программы, работающие независимо друг от друга, могли обмениваться информацией.
mkfifo fifo
ls -l > fifo &
less < fifo
С помощью трех вышеуказанных команд сначала создается FIFO-файл. Кроме того, в виде фонового процесса запускается ls. Она записывает свой вывод в файл. Оттуда less вновь считывает данные и отображает их на экране.
Только такие команды подходят для формулирования программного канала, из которого команды, предназначенные для ввода, будут считывать информацию. Если ситуацией иная, можно достичь сходных эффектов с помощью подстановки команд или команды xargs.