У нас должны быть какие-то способы стыковки программ вроде садового шланга — вкрутить другой сегмент, когда станет нужно массировать данные другим способом.
Доктор медицины Макилрой
11 октября 1964 г.
До оригинальной Unix программы обычно писались как монолитные программы, которые представляли собой огромные программы, каждая из которых выполняла определенную задачу. Однако с появлением Unix и конвейеров Unix это означало, что стандартный вывод одной программы мог быть передан в стандартный ввод другой программы. Это позволило разбить монолитные программы на более мелкие программисты. Следуя популярному сегодня принципу DRY-программирования, это означало, что меньшие программы можно было писать, а затем использовать как часть входных данных другой программы. Вместо того, чтобы каждый раз вводить код. В то время, когда была представлена Unix, дисковое пространство было намного более ограниченным, чем сегодня, программисты были обеспокоены тем, что вывод одной программы был слишком большим, чтобы его можно было сохранить, прежде чем его сможет использовать другая программа. Конвейер Unix работает таким образом, что вывод никогда не должен сохраняться до того, как будет использован следующей программой.
Оператор конвейера в Unix — «|». (вертикальная черта), которая позволяет использовать выдающуюся часть одной программы в следующей программе, которая отделена вертикальной чертой. Отличным из них является использование команды «ls», которая выводит список всех файлов в каталоге.
Однако вы увидите, что «ls» приведет вас прямо к нижней части списка ваших файлов, и вы не сможете перемещаться вверх и вниз по списку с помощью клавиатуры. Мы можем изменить эту команду, чтобы включить « | меньше".
Используя оператор канала, мы сказали нашей системе bash взять вывод ls и вызвать для него команду less. Less предоставляет вам прокручиваемый список содержимого, по которому вы можете перемещаться вверх и вниз с помощью клавиш со стрелками.
Затем вы можете использовать «q», чтобы выйти из этого
Фильтры
Это философия Unix: писать программы, которые делают одну вещь и делают ее хорошо. Пишите программы для совместной работы. Пишите программы для обработки текстовых потоков, потому что это универсальный интерфейс.
MD McIlroy — Четверть века Unix https://homepage.cs.uri.edu/~thenry/resources/unix_art/ch01s06.html
Фильтры — это термин, используемый для обозначения кода, использующего конвейеры для выполнения сложных операций над несколькими командами. Фильтры принимают входные данные, каким-то образом изменяют их, а затем выводят.
Вы могли бы увидеть это, если бы мы добавили команду сортировки к предыдущему коду:
Метод sort принимает наш список файлов, сортирует их в алфавитном порядке и выводит это нашей команде less, которая обеспечивает просмотр файлов постранично.
Мы также можем расширить этот код с помощью команды uniq.
Метод sort берет наш список файлов, сортирует их в алфавитном порядке и выводит в нашу уникальную команду, которая удаляет все дубликаты из списка и выводит в команду less, которая обеспечивает постраничный просмотр файлов.
Я надеюсь, что это дало представление о каналах и фильтрах Unix. Пожалуйста, дай мне знать, если возникнут какие-либо вопросы.