Знакомство с Linux
8.Трубопроводы UNIX
8.1 Стандартный вход и стандартный выходМногие команды UNIX получают информацию с так называемого стандартного входа и посылают информацию на (опять же) так называемый стандартный выход. (Для них часто используются сокращения ``stdin'' и ``stdout'' соответственно). Ваш shell организует дело так, что стандартным входом служит клавиатура, а стандартным выходом - экран. Вот пример использования команды
на экран пойдет файл Но если команде cat не даны имена файлов в качестве параметров, она читает данные с stdin и опять же посылает на stdout. Вот пример.
Как видите, каждая строка, которую напечатал
пользователь, немедленно выдается командой cat на экран. При
вводе со стандартного входа команда знает, что ввод закончен
тогда, когда она получит в каком-то виде сигнал EOT
(End-Of-Text). Обычно он обеспечивается нажатием Вот другой пример. Команда сортировки sort читает построчно текст (здесь опять с stdin, поскольку имена файлов в параметрах не указаны, и посылает отсортированный результат на stdout. Попробуйте так.
Теперь мы можем упорядочить наш список продуктов, подлежащих закупке, в лексикографическом порядке... ну разве UNIX не полезная вещь? 8.2 Перенаправление входа и выходаТеперь, предположим, что мы хотим послать результат сортировки в файл, чтобы где-то сохранить список планируемых покупок. Shell дает нам возможность перенаправлять стандартный выход в файл, используя символ ``>''. Вот как это работает.
Как вы можете видеть, результат работы команды
Теперь мы можем не только сортировать (упорядочивать) список
планируемых покупок, но и сохранять его! Но предположим,
что мы хранили наш неотсортированный исходный закупочный список в
файле под именем
Но это можно сделать и по-другому. Перенаправлен может быть не только стандартный выход, но также и стандартный вход, используя символ ``<''.
Технически, Это иллюстрирует концепцию фильтра. Фильтр, это программа,
которая получает данные со стандартного входа, обрабатывает их
каким-то образом и посылает результат обработки на стандартный
выход. С помощью перенаправления стандартные вход и выход могут
быть переведены на файлы. 8.3 Использование конвейераМы уже показали, как использовать команду sort в качестве
фильтра. Но эти примеры предполагали, что вы откуда-то получили
данные в файл, или ввели данные с клавиатуры своими собственными
руками. А что, если данные, которые вы хотите отсортировать,
являются выходными данными другой программы, например, такой как
Здесь мы сохранили результат работы команды Выход из положения дает трубопровод (pipeline)
(прим.
переводчика: в нашей литературе принят термин "конвейер", так
далее и будем переводить "pipeline").
Конвейер - это еще одно
замечательное свойство shell, которое позволяет связывать
последовательность команд в конвейер, где stdout первой команды
посылается прямо на stdin второй команды и так далее. Здесь мы
хотим послать stdout команды
Эта команда намного короче и, очевидно, проще набирается. Другой полезный пример. Команда
выдает на дисплей длинный список имен файлов, большинство из которых слишком быстро промелькнет на экране, чтобы вы успели прочитать их. Давайте подключим к просмотру перечня имен файлов каталога /usr/bin команду more.
Теперь вы можете постранично листать файл в свое удовольствие. Но чудеса на этом не кончаются! Мы можем связать в конвейер более, чем две команды. Команда head представляет из себя фильтр, который отображает первые строки входного потока (здесь, пришедшего по конвейеру). Если мы хотим отобразить последнее имя текущего каталога, упорядоченного по алфавиту, мы можем написать:
где 8.4 Перенаправление с добавлениемИспользование ``>'' для перенаправления выхода смертельно для файла, в который происходит перенаправление (если было, что уничтожать), другими словами
уничтожает прежнее содержимое файла
добавит выходную информацию команды ls в файл Имейте в виду, что перенаправления и конвейер, это средства, предоставляемые оболочкой shell, это синтаксис shell и символы ``>'', ``>>'' и ``|'' не имеют никакого отношения к командам, как таковым. |
<<< | Оглавление | Страницы: 8 9 | >>> |