Лабораторная работа №3
.docxМинистерство цифрового развития связи и массовых коммуникаций
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
СВЯЗИ И ИНФОРМАТИКИ»
Кафедра «Системное программирование»
Отчёт по лабораторной работе №3
по дисциплине «Современные операционные системы»
на тему «Написание составных команд в командной оболочке bash»
Выполнил: студент группы М092501(70)
Ягудин Р.Р.
Проверил: доц. Трухманов В.Б.
Москва 2025 г.
СОДЕРЖАНИЕ
№ стр.
Цель лабораторной работы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Задачи работы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Теоретическая часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Экспериментальная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Подготовка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Перенаправление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Пайплайн . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Ответы на контрольные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Выводы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
ЦЕЛЬ ЛАБОРАТОРНОЙ РАБОТЫ
Получить практические навыки по созданию составных команд в оболочке bash.
ЗАДАЧИ РАБОТЫ
Подготовить виртуальный терминал для выполнения команд
Осуществить перенаправление потоков ввода и вывода
Создать пайплайн команд и переменные командной оболочки
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Команды сами по себе являются программами, скомпилированными в бинарные файлы, которые лежат в директории /bin. Вызывая команду в терминале, фактически мы запускаем отдельный процесс. Каждый запущенный процесс в системе Linux имеет связанные с ним три информационных канала:
Стандартный поток ввода stdin
Стандартный поток вывода stdout
Стандартный поток ошибок stderr.
Каждый из этих каналов имеет свой файловый дескриптор. Файловый дескриптор – это индекс (целое неотрицательное число), указывающий на строку в специальной таблице, содержащую информацию об открытых процессом файлах. Стандартные потоки имеют фиксированные значения файловых дескрипторов: STDIN – 0, STDOUT – 1, STDERR – 2.
Эти три стандартных потока фактически выступают универсальным интерфейсом, с помощью которого мы можем взаимодействовать с процессом, связывать команды, выстраивать цепочки (пайплайны) или перенаправлять потоки в места, отличные от терминала (файлы, сокеты и т. д.).
ЭКСПЕРИМЕНТАЛЬНАЯ ЧАСТЬ
Подготовка
Запускаем ВМ, дожидаемся загрузки ОС и запускаем терминал
Рисунок 1 – Запуск терминала ВМ
Запускаем запись терминала
Рисунок 2 – Запись терминала ВМ
Вводим команду ls -l и видим, что файл создался
Рисунок 3 – Вывод созданного файла
Перенаправление
Переходим на рабочий стол, создаём py-файл и записываем в него содержимое из приложения Б методического указания
Рисунок 4 – Переход на рабочий стол
Рисунок 5 – Создание py-файла lab3.py
Рисунок 6 – Запись данных в py-файл lab3.py
Аналогичным образом создаём второй py-файл lab3_2.py и записываем в него содержимое из приложения Б методического указания
Рисунок 7 – Создание py-файла lab3_2.py
Рисунок 8 – Запись данных в py-файл lab3_2.py
Оставшиеся файлы the-matrixreloaded.csv и variants.txt перемещаем на рабочий стол вручную и проверяем их наличие через ls -l
Рисунок 9 – Файлы, необходимые для выполнения лабораторной работы
Запускаем генерацию варианта, осуществляем перенаправление стандартного потока ошибок STDERR в файл yagudin_err, после чего открываем файлы. Затем, выполним подсчёт количества слов в каждом созданном файле, осуществим перенаправление STDOUT и STDIN в один файл и откроем файл
Рисунок 10 – Генерация варианта, перенаправление потоков и открытие файлов
Пайплайн
Вводим команду man grep для вывода руководства пользователя по утилите grep
Рисунок 11 – Ввод команды
Рисунок 12 – Вывод руководства пользователя по утилите grep
Вводим команду python3 lab3_2.py для генерации варианта, где:
Пункт «a» – чьи фразы необходимо найти
Пункт «б» – кто должен упоминаться в этих фразах
Пункт «в» – какой знак препинания должен содержаться
Пункт «г» – какой объект, явление, событие, действие упоминается
Рисунок 13 – Генерация варианта путём запуска скрипта lab3_2.py
Вводим нижеприведённую команду для перенаправления вывода содержимого файла на утилиту grep, где:
cat the-matrix-reloaded.csv | grep «^Иван» – строки, где говорит Иван
Добавление условия | grep «Мария» – поиск строк, в которых Иван упоминает Марию
Добавление условия | grep «\.» – поиск строк, в которых присутствует точка
Добавление условия | grep «новая работа» – поиск строк, где используется фраза «новая работа»
Рисунок 14 – Перенаправление вывода содержимого файла на утилиту grep
Добавим к команде выше | wc -l для подсчёта количества найденных строк
Рисунок 15 – Подсчёт количества найденных строк
Выведем количество строк с использованием ключа -с
Рисунок 16 – Подсчёт количества найденных строк через ключ -с
Переменные
Вводим команду man sed для вывода руководства пользователя по команде sed
Рисунок 17 – Ввод команды
Рисунок 18 – Вывод руководства пользователя по команде sed
Перекодируем файл the-matrixreloaded.csv из cp1251 в UTF-8, переименовываем его и выводим его содержимое
Рисунок 19 – Перекодирование, переименовывание и вывод содержимого файла
Задаём имя переменной и выводим первые 5 строк файла
Рисунок 20 – Задание имени переменной и вывод первых 5 строк файла
Заменим во всех фразах имя персонажа на имя актёра и запишем в файл данные
Рисунок 21 – Замена имени персонажа на имя актёра и вывод файла
Пронумеруем строки в файле
Рисунок 22 – Ввод нумерации строк в файле
Завершаем запись команд
Рисунок 23 – Завершение записи команд
ОТВЕТЫ НА КОНТРОЛЬНЫЕ ВОПРОСЫ
Перечислите потоки ввода и вывода, ассоциированные с любым процессом в операционной системе Linux
С каждым процессом в Linux ассоциированы три стандартных потока:
STDIN (Standard Input) — стандартный поток ввода (дескриптор 0): используется для передачи данных в процесс. По умолчанию связан с клавиатурой.
STDOUT (Standard Output) — стандартный поток вывода (дескриптор 1): используется для вывода результатов работы процесса. По умолчанию связан с терминалом (экраном).
STDERR (Standard Error) - стандартный поток ошибок (дескриптор 2): используется для вывода сообщений об ошибках. По умолчанию связан с терминалом.
Что такое пайплайн?
Пайплайн (конвейер) — это механизм в командной оболочке, позволяющий соединить стандартный вывод одной команды со стандартным вводом другой с помощью символа «|». Пример: cat file.txt | grep "text"
Как осуществляется перенаправление потоков ввода/вывода в командной оболочке bash?
Перенаправление потоков ввода/вывода в командной оболочке bash осуществляется следующими способами:
> – перенаправление STDOUT в файл (с перезаписью)
>> – перенаправление STDOUT в файл (с добавлением)
2> – перенаправление STDERR в файл
< – перенаправление ввода из файла
&> – перенаправление STDOUT и STDERR вместе
Для чего используется утилита grep?
Утилита grep используется для поиска текста по шаблону (регулярному выражению) в файлах или потоке данных.
ВЫВОДЫ
В ходе выполнения данной лабораторной работы я приобрёл навыки работы с командной оболочкой bash операционной системы семейства Linux и изучил основные команды файловой системы.
