
- •«Операционные системы.Командный интерфейс» конспект лекций Тема 1. Введение. Содержание курса
- •Тема 2. Классификация режимов работы ос
- •Диалоговый пакетный
- •Тема 3. Виды нтерфейсов пользователя ос unix
- •Тема 4. Обобщенные принцпы построения современных ос
- •Тема 5. Состав ос unix
- •Тема 6. Среда для работы пользователя
- •Тема 7. Регистрация пользователя в системе
- •Тема 8. Группа коммуникационных команд
- •Тема 9. Группа вспомогательных команд
- •Тема 10. Перенаправление ввода-вывода
- •Файловая система unix
- •Тема 11. Файлы unix
- •Тема 12. Генерация имен файлов
- •Тема 13. Структура системы каталогов unix
- •Тема 14. Управление каталогами в unix
- •Тема 15. Команды поиска файлов в системе каталогов
- •Тема 16. Управление файлами
- •Тема 17. Управление правами доступа к файлам и каталогам
- •Здесь файл fil1.C, владельцем которого является пользова-
- •Тема 18. Конвееры и фильтры
- •Тема 19. Создание и редактирование текстовых файлов
- •Команды удаления текста
- •Введение в shell- программирование
- •Тема 20. Операторы – команды
- •В unix при написании операторов важное значение отводится
- •Тема 21. Управление локальными переменными
- •Тема 22. Подстановка значений переменных
- •Тема 23. Экспортирование локальных переменных в среду shell
- •Тема 24. Проверка условий
- •2. Сравнение числовых значений:
- •3. Сравнение строк:
- •If список_команд1
- •Тема 25. Построение циклов
- •Тема 26. Управление процессами в unix
- •Тема 27. Создание фоновых процессов
- •Тема 28. Управление приоритетами
- •Тема 29. Завершение процессов
- •Тема 30. Перехватывание сигналов
- •Тема 31. Сетевые средства unix
Тема 18. Конвееры и фильтры
Операционная система UNIX обеспечивает обмен информацией (управляющей и прикладной) между процессами. Обмен данными между процессами осуществляется через программный канал. По сути, это некоторый системный файл, в который одна команда пишет информацию, а другая - читает. Если команды считывают информацию со стандартного буферного системного файла ввода (stdin) и направляют в стандартный буферный файл вывода (stdout), то такие команды могут быть объединены в единую командную строку – конвеер. Конвеер позволяет использовать вывод одной команды в качестве ввода другой. Конвеер по сути это программный канал для создания потока данных от команды к команде.
Программный канал создается автоматически интерпретатором
shell при обнаружении в командной строке команды, связываемые специальным символом“|” (вертикальная черта):
команда_1 | команда_2 | команда_3 | ... | команда_n
Конвейер представляет собой технологическую цепочку обработки исходной информации.
Пример.
$ ls > buffile
$ wc -l < buffile
20
$ rm buffile <NewLine>
$
Эта же задача может быть решена проще и более компактно с использованием конвейера:
$ ls | wc -l <NewLine>
$
Если команда в конвеере не меняет или сокращает передаваемую информацию, то такие команды называются командами – фильтрами.
Пример.
$ ls -l| grep ‘mar’|wc -l <NewLine>
вывод на экран числа строк текущего каталога, содержащих подстроку "mar" (подсчитывается число файлов, модифицированных в марте).
Пример.
$who>fil
$sort<fil или:
$who|sort
$
Конвеер удобно использовать для просмотра вывода команды когда информация занимает больше одного экран:
$cat filmax|more
Если при решении задач возникае потребность отображения результатов одновременно на нескольких внешних устройствах, то это обеспечивает следующая команда- тройник:
tee [-ключи] файл -дублирование стандартного вывода(экран)
в указанный файл
Ключи:
-i - игнорирование прерываний, что обеспечивает непрерывность
вывода;
-a - содержимое ввода добавляется к существующему файлу в его
конец (накопление данных).
Пример.
$ ls -l | tee -a fil.res
Конвейер обеспечивает вывод содержимого каталога на экран
и добавляет эти данные к содержимому fil.res
Пример.
$ ls -l | tee fil | wc -l
20
$сat fil - содержимое файла можно просмотреть на экране.
Полный листинг каталога выводится в файл fil, а число
строк в каталоге - на экран (на стандартный вывод). Однако вывода
каталога на экран в данном случае не будет, т.к. выходной поток
команды ls после команды tee перенаправляется опять в конвеер
(для команды wc).
Пример.
$find . -type d|tee fil|wc -l - подсчет числа подкаталогов в текущем каталоге и вывод их полных маршрутных имен в файл fil.
Рассмотренные возможности использования программных кана-
лов сильно расширяют возможности командного языка операционной системы. Устойчивые языковые конструкции, введенные для специальных целей, являются, по существу, новыми командами.
Еще одна команда – фильтр разделяет и объединяет по составляющим элементам строки символов во входном потоке данных с выводом результата на экран:
$cut -k [имя_входного_файла]
если имя входного файла не указано,то входной поток поступает со стандартного устройства ввода (клавиатура) или из программного канала.
Некоторые ключи:
-f<список_номеров_полей_в_строке_файла> - в выходной поток передаются только указанные поля, разделенные символьными разделителями;
-d<вид_разделителя_полей_в_строке_файла> примеры разделителей: ‘;’ или ‘:’ или ‘ ’ , по умолчанию – табуляция.
Эти два ключа применяются совместно.
Если указанный в ключе разделитель не найден, то в стандартный выходной поток передается строка целиком.
-b<число_байтов_или_выражение_для_подсчета числа> побайтовое вырезание полей из строк входного потока и направление их в выходной поток;
-c<число_символов_или_выражение> - посимвольное вырезание полей из строк входного потока и направление их в выходной поток.
Несколько не связанных между собой примеров использования команды:
$сut -f1 -d’:’ /etc/passwd -формируется и выводится на экран список зарегистрированных пользователей
$who|cut -f1 -d’ ’|tee filuser -то же и дополнительный вывод в файл
$cat /etc/passwd|cut -d’:’ -f1
$ls -l|cut -b-15 -вырезаются байты с первого по 15
$ls -l|cut -с11-25 - диапазон номеров символов в строке
$ls -l|cut -с25- |cat >>fil - вырезаются байты от 25 до конца строки
Значение числа элементов может быть вычислено, например:
-c$a - значение задается переменной или
-с`expr ………..` -может быть использовано арифметическое или логическое выражение (см. ниже) и т.п..