Лабораторная работа №2


НазваниеЛабораторная работа №2
страница6/9
ТипЛабораторная работа
1   2   3   4   5   6   7   8   9

Перенаправление ввода и вывода.


Допустим, нужно направить вывод команды sort в некоторый файл, чтобы сохранить упорядоченный по алфавиту список на диске. Командная оболочка позволяет перенаправить стандартный вывод команды в файл, используя символ > (больше). Приведём пример:

$ sort > list bananas carrots apples Ctrl-D$

Можно увидеть, что результат работы команды sort не выводится на экран, однако он сохраняется в файле с именем list. Выведем на экран содержимое этого файла:

$ cat list apples bananas carrots $

Пусть теперь исходный неупорядоченный список находится в файле items. Этот список можно упорядочить с помощью команды sort, если указать ей, что она должна читать данные из этого файла, а не из своего стандартного ввода, и, кроме того, перенаправить стандартный вывод в файл, как это делалось выше. Пример:

$ sort items > list $ cat list apples bananas carrots $

Однако можно поступить иначе, перенаправив не только стандартный вывод в файл, но и стандартный ввод утилиты из файла, используя для этого символ < (меньше):

$ sort < items apples bananas carrots $

Результат команды sort < items эквивалентен команде sort items, однако при выдаче команды sort < items система ведёт себя так, как если бы данные, которые содержатся в файле items, были введены со стандартного ввода. Перенаправление ввода-вывода осуществляется командной оболочкой. Команде sort не сообщалось имя файла items, эта команда читала данные из своего стандартного ввода, как если бы их вводили с клавиатуры.

Введём понятие фильтра. Фильтром является программа, которая читает данные из стандартного ввода, некоторым образом их обрабатывает и результат направляет в стандартный вывод. Когда применяется перенаправление, в качестве стандартного ввода и вывода могут выступать файлы. Как указывалось выше, по умолчанию, stdin и stdout относятся к клавиатуре и к экрану соответственно. Программа sort является простым фильтром: она сортирует входные данные и посылает результат на стандартный вывод. Совсем простым фильтром является программа cat: она ничего не делает с входными данными, а просто пересылает их на выход.

Если вывод команды не интересен, его можно перенаправить на специальное устройство /dev/null — как говорилось выше, все данные, посланные в это устройство, удаляются. Также существуют специальные устройства /dev/zero – из которого можно прочитать неограниченное число нулевых символов, /dev/random – из которого можно прочитать случайные символы, /dev/urandom – для чтения последовательности псевдослучайных символов.

Использование состыкованных команд (конвейер).


Выше уже демонстрировалось, как использовать программу sort в качестве фильтра. В этих примерах предполагалось, что исходные данные находятся в некотором файле, или что эти исходные данные будут введены с клавиатуры (стандартного ввода). Однако часто требуется отсортировать данные, которые являются результатом работы какой-либо другой команды, например, ls .

Будем сортировать данные в обратном алфавитном порядке, это делается опцией -r команды sort. Если нужно перечислить файлы в текущем каталоге в обратном алфавитном порядке, один из способов сделать это будет следующим. Для получения списка файлов используем команду ls :

$ ls /bin arch awk basename bash .... $

Теперь перенаправляем выход команды ls в файл с именем file-list, и далее сортируем этот файл с помощью команды sort:

$ ls /bin > file-list $ sort -r file-list zcat ypdomainname xargs wc ... $

Здесь вывод команды ls был сохранён в файле, а после этого файл был обработан командой sort -r. Однако этот путь является неэффективным — он требует использования временного файла для хранения выходных данных программы ls , лишних операций ввода-вывода для создания, записи и последующего чтения этого временного файла с диска.

Решением в данной ситуации может служить создание состыкованных команд (англ. pipelines). Стыковку осуществляет командная оболочка, которая stdout первой команды направляет на stdin второй команды. В данном случае мы хотим направить stdout команды ls на stdin команды sort. Для стыковки используется символ | (вертикальная черта), как это показано в следующем примере:

$ ls /bin | sort -r zcat ypdomainname xargs wc ... $

Эта команда короче, чем последовательность отдельных команд, и её проще набирать.

Рассмотрим ещё один пример. Команда

$ ls /usr/bin

выдаёт длинный список файлов. Большая часть этого списка выводится на экран слишком быстро, чтобы его содержимое можно было прочитать. Попробуем использовать команду more для того, чтобы выводить этот список частями:

$ ls /usr/bin | more

Теперь можно этот список «перелистывать».

Можно пойти дальше и состыковать более двух команд. Рассмотрим команду head, которая является фильтром, выводящим первые строки из входного потока (в нашем случае на вход будет подан выход от нескольких состыкованных команд). Если мы хотим вывести на экран последнее по алфавиту имя файла в текущем каталоге, можно использовать следующую длинную команду:

$ ls | sort -r | head -1 notes

где команда head -1 выводит на экран первую строку получаемого ей входного потока строк (в нашем случае поток состоит из данных от команды ls), отсортированных в обратном алфавитном порядке.

Фильтры не обязательно используются только для обработки текста. Например, в пакете netpbm содержатся утилиты для обработки изображений, которые тоже являются фильтрами. Для увеличения иконки Midnight Commander в 5 раз и преобразования её из формата PNG в JPEG можно использовать такую связку команд:

$ pngtopnm /usr/share/icons/mc.png | pnmenlarge 5 | pnmsmooth | pnmtojpeg > /tmp/mc.jpg

Здесь pngtopnm читает файл иконки (/usr/share/icons/mc.png)
в формате PNG, преобразует его в формат PNM и выдаёт результат в стандартный вывод. pnmenlarge принимает файл в формате PNM из стандартного ввода, увеличивает (масштабирует) картинку в 5 раз и выдаёт результат в стандартный вывод. Далее pnmsmooth выполняет операцию сглаживания, а pnmtojpeg преобразует поток данных в формат JPEG. Итоговый результат pnmtojpeg также выдаёт на стандартный выход, который средствами командного интерпретатора перенаправляется в файл /tmp/mc.jpg.

Другой пример: утилита mkisofs создаёт для файлов из заданного ей в качестве параметра каталога образ диска с файловой системой ISO9660 для записи на оптические диски. А утилита cdrecord умеет записывать такие образы непосредственно на сами диски. Утилиты могут использоваться по-отдельности, с записью образа файловой системы в файл и последующей записью такого файла на диск. Однако их можно объединить в связку и записывать диски без создания временных файлов:

$ mkisofs ~/mydisk | cdrecord -

Здесь для того, чтобы приказать cdrecord использовать данные со стандартного входа, а не читать их из файла, мы в качестве имени файла указали — (дефис).
1   2   3   4   5   6   7   8   9

Похожие:

Лабораторная работа №2 iconЛабораторная работа №8 распределенный udp сервер/ udp клиент 38 Лабораторная...
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Лабораторная работа №2 iconЛабораторная работа №1
Лабораторная работа Выполнение расчетов с использованием программирования в среде Visual Basic for Applications (vba). 8

Лабораторная работа №2 iconЛабораторная работа №1
Лабораторная работа №8. Структурирование таблицы с автоматическим подведением итогов

Лабораторная работа №2 iconЛабораторная работа №1. Изучение основ микроструктурного анализа...
...

Лабораторная работа №2 iconЛабораторная работа №1 (одномерные массивы) 27
Лабораторная работа №6 (статические массивы, знакомство с графическим режимом. Возможно будет изменена) 49

Лабораторная работа №2 iconЛабораторная работа Создание и использование запросов (продолжение)....
Задания на экзамен выполняются студентом в компьютерном классе при наличии конспектов под руководством преподавателя

Лабораторная работа №2 iconЛабораторная работа уважаемые студенты! Сейчас вам предстоит выполнить...
«Бухгалтерский учет и анализ». Она состоит из нескольких частей, каждая из которых относится к разделу 3 «Первичные бухгалтерские...

Лабораторная работа №2 iconЛабораторная работа уважаемые студенты! Сейчас вам предстоит выполнить...
«Бухгалтерский учет и анализ». Она состоит из нескольких частей, каждая из которых относится к разделу 3 «Первичные бухгалтерские...

Лабораторная работа №2 iconЛабораторная работа №1 «Выполнение работы в сети Интернет. Работа с электронной почтой»

Лабораторная работа №2 iconЛабораторная работа №7 Отпуск материалов на производство, прочее...
Лабораторная работа №7 Отпуск материалов на производство, прочее выбытие материалов

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск