Механизмы перенаправления потоков ввода-вывода, изученные в предыдущем уроке, имеют схожие черты с предметом рассмотрения данной статьи. Однако программные каналы Linux являются инструментами совершенно другого порядка. Они служат для передачи результата одной программы на вход другой. Использование программных каналов (англ. pipe) очень эффективно при решении широкого круга задач. Это проявляется как в лаконичности командных конструкций, так и в скорости выполнения.
Приведем пример. Нам нужно получить первые десять записей пользователей, хранящихся в файле /etc/passwd. Дополнительным условием является то, что эти пользователи по умолчанию используют командный интерпретатор Bash. Для решения поставленной задачи можно применить стандартные средства Linux по перенаправлению потоков ввода-вывода.
Сначала выполним cat с сохранением результата в файл users-test.txt. Затем достанем из него информацию и передадим команде grep. Она осуществит фильтрацию строк, оканчивающихся на /bin/bash. Далее мы снова извлечем информацию из файла и перезапишем, пропустив через команду head, которая оставит первые десять записей.
Даже поверхностного анализа достаточно, чтобы сделать вывод о неэффективности таких действий. Использование программных каналов позволило бы избавиться от лишних операций.
Применение программных каналов
Для использования программных каналов в консоли Linux существует специальный символ «|». Он должен располагаться между вызовами двух программ. Принцип действия очень прост. Программа, стоящая слева, будет передавать свой вывод программе, которая стоит справа. Посмотрите, как записывается пример, приведенный выше, с применением новых возможностей.
Рассмотрим ещё один пример. В нём используется три программных канала. Первая команда ls выполняет рекурсивный поиск всех файлов и директорий, начиная от корня. Её ошибки перенаправляются в системный файл /dev/null, являющийся своего рода «черной дырой». Вся информация, попадающая в него, исчезает.
Вывод команды ls через первый программный канал передается на вход grep. Эта программа фильтрует полученные строки, и оставляет только те, в которых присутствует слово .config. grep передает свой вывод через второй канал программе sort. Она, согласно названию, сортирует строки по алфавиту. Последний канал передает результат всех предыдущих команд на вход head, что выводит в терминал первые десять строк.