Перенаправление потоков

  • > - перенаправить поток вывода в файл.
  • >> - добавлять данные в конец файла, а не перезаписывать
  • < - перенаправление потока ввода из файла.
  • 2> - перенаправить поток ошибок в файл.
  • &> - перенаправить ВСЕ потоки вывода в файл.

Pipeline, pipe и т.д.

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

Как использовать:

  1. Создать pipe в родительском процессе.
  2. Создать новый процесс.
  3. Использовать один из концов pipe в каждом процессе.

Важно, что pipe предоставляет именно файловые дискрипторы. В результате мы можем расширить предыдущий вариант на следующую схему:

  1. Создать pipe.
  2. Заменить стандартный поток вывода на вход pipe.
  3. Создать первый дочерний процесс.
  4. Заменить стандартный поток ввода на выход pipe.
  5. Создать второй дочерний процесс.

=> Результат работы первого процесса будет передан второму процессу.

Для реализации такой схемы в BASH используется оператор |: command1 | command2. В этом случае вывод команды 1 будет перенаправлен на станадртный вход команды 2.

А для чего это можно использовать?

Просмотр большого количества информации в программе-пейджере. ls /usr/bin | less.

Сортировкой потока данных. sort - сортировать поток входящих строк в лексикографическом порядке.

  • Мы хотим посмотреть список всех исполняемых файлов, отсортированных по имени. ls /bin /usr/bin | sort
  • Мы хотим посмотреть на содержимое всех файлов в лексикографическом порядке. Например у меня есть файлы контрольных, а я хочу посмотреть результаты студента в целом. cat data* | sort.
  • А если результаты в обратном порядке, надо использовать аргумент -r.

Получить уникальные результаты. uniq.

Приложение работает только в связке с sort. А как можно узнать количество повторений? Для этого надо использовать аргумент -c: cat data* | sort | uniq -c

Подсчитать количество строк. wc.

  • Для получения количества строк: -l
  • Для получения количества слов: -w

Сделать фильтрацию по содержимому. grep

Grep может самостоятельно считывать содержимое файлов. Т.е. он не просто фильт по потокам данных, а более сложное приложение.

grep PATTERN [file ...]

В случае фильтрации потока не надо указывать файлы, достаточно просто указать фильтр.

Для описания фильтров используются регулярные выражения.

Найти все исполняемые файлы, в имени которых присутствует слово zip. Отсортируйте результаты в обратном порядке.

ls /usr/bin /bin | grep zip | sort -r

Получить только лишь начало потока. head.

Для получения конкретного количества символов надо использовать -n N. N - количество строк, которое надо показать.

Получить только лишь окончание потока. tail.

tail может следить за состоянием файла и печатать новые строки в нём. Для этих целей используем аргумент -f.

Мы можем отводить поток в файл. tee

-T- - отведение потока. Tee копирует содержимое потока не только на stdout, но также и в файл. Оно удобно для тестирования и отладки поведенеия потоков данных между приложениями.

Вывод | используется в основном для обработки и фильтрации потоков данных от пользователя.