Лабораторная работа № 1
Проверяемые знания учащихся
- Знание концепции текущего рабочего каталога.
- Умение формировать абсолютные и относительные пути в GNU/Linux.
- Умение изменять текущий рабочий каталог.
- Знание о типах команд в интерпретаторе Bash.
- Умение получать информацию о работе встроенных команд в Bash.
- Умение получать и читать руководства о приложениях.
- Умение использовать справочную систему
man
. - Знание о поиске исполняемых файлов в Bash.
- Знание о стандартной структуре файловой системы GNU/Linux и о структуре файловой системы Debian GNU/Linux.
- Умение формировать физические и логические ссылки.
- Умение просматривать, формировать и изменять структуру файловой системы.
- Знание о структуре потоков ввода-вывода приложений.
- Умение перенаправлять потоки вывода в файл, потоки ввода из файлов, формировать конвейеры по обработке потоков данных.
- Знание о предназначении приложений-фильтров
sort
,uniq
,grep
,tail
,head
,awk
. - Умение использовать консольные текстовые редакторы
vim
илиemacs
. - Знание о структуре скриптовых файлов на языке Bash.
- Умение написания скриптовых файлов на языке Bash для автоматизации действий.
- Умение использования расширения команд в языке Bash: пути, скобок, арифметическое, переменных, команд.
- Знание о способах установки новых приложений в GNU/Debian: система
dpkg
иapt
. - Умение находить пакеты, устанавливать и удалять пакеты из системы.
Задача
Реализуйте систему обработки запросов в фотоателье.
Запрос поступает в формате каталога с набором изображений в формате JPEG. Система должна решать следующий набор задач:
- Формировать информацию обо всех изображениях, которые находятся в запросе.
- Сортировать изображения в соответствии с размером фотокарточек, на которых данное изображение может быть распечатано.
- Подготавливать уменьшенные версии изображений для их публикации онлайн.
Система также должна содержать в себе скрипт, который будет устанавливать все необходимые зависимости для работы системы.
Необходимо предоставить руководство, поясняющее предназначение системы. Файл должен называться readme.md
. В данном файле:
- Надо рассказать о предназначении каждого из скриптов системы.
- Привести примеры вызова скриптов для решения каждой из поставленных задач.
Если файл с руководством будет отсутствовать, то задача будет считаться нерешённой.
Формирование информации
Для каждого изображения необходимо вывести следующую информацию:
- Название файла.
- Время создания файла.
- Ширину и высоту изображения.
- Наиболее близкое соотношение сторон: 1:1 (1,0), 4:3 (1,3), 3:2 (1,5), 16:10 (1,6), 16:9 (1,7), 2:1.
Помимо информации по каждому файлу необходимо также предоставить статистическую информацию:
- Общее количество файлов.
- Количество изображений, сделанных в этом году.
Сортировка изображений
Для работы данного режима система должна получить от пользователя путь к каталогу, в котором будет размещены результаты. Запрещено использовать каталог с исходными данными как каталог с результирующими данными. Если целевого каталога не существует необходимо либо его создать, либо завершить работу системы.
Ниже представлена таблица, в соответствии с которой определяется подходящий размер для фотопечати. Ателье выгодно печатать изображения самого большого размера.
Разрешение | Mpx | 9x13 | 10x15 | 13x18 | 15x20 | 20x30 | 30x40 |
---|---|---|---|---|---|---|---|
640х480 | 0.3 | Очень плохо | Очень плохо | Очень плохо | Очень плохо | Очень плохо | Очень плохо |
1280х1024 | 1.3 | Хорошо | Нормально | Плохо | Плохо | Очень плохо | Очень плохо |
2048x1536 | 3.1 | Отлично | Отлично | Хорошо | Хорошо | Плохо | Очень плохо |
2304x1729 | 4.0 | Отлично | Отлично | Отлично | Хорошо | Нормально | Очень плохо |
2592x1944 | 5.0 | Отлично | Отлично | Отлично | Отлично | Нормально | Плохо |
3000x2000 | 6.0 | Отлично | Отлично | Отлично | Отлично | Хорошо | Плохо |
3200x2200 | 7.0 | Отлично | Отлично | Отлично | Отлично | Хорошо | Нормально |
3600x2300 | 8.3 | Отлично | Отлично | Отлично | Отлично | Хорошо | Хорошо |
Система должна формировать следующую структуру каталогов в целевом каталоге:
result
├── 10x15/
│ ├── 0001.jpeg
│ ├── 0002.jpeg
│ └── 0003.jpeg
└── 15x20/
├── 0001.jpeg
├── 0002.jpeg
├── 0003.jpeg
├── 0004.jpeg
└── 0005.jpeg
В целевом каталоге должны находится подкаталоги, которые соответствуют размеру фотобумаги, на которой надо провести печать файлов. Не должно быть подкаталогов, которые не содержат в себе никаких файлов.
Внутри каждого из каталогов должна находиться символическая ссылка, которая содержит путь к оригинальному файлу изображению. Таким образом целевой каталог должен содержать только подкаталоги, наполненные символическими ссылками.
Подготовка изображений к публикации
Для работы данного режима система должна получить от пользователя путь к каталогу, в котором будет размещены результаты. Запрещено использовать каталог с исходными данными как каталог с результирующими данными. Если целевого каталога не существует необходимо либо его создать, либо завершить работу системы.
Для публикации изображений их необходимо подготовить:
- Уменьшить их размер в мегабайтах. Максимальный размер должен составить 100 килобайт.
- Заменить все непечатные символы (пробелы, табуляции) в названии файла знаками подчёркивания.
Для уменьшения размера в мегабайтах можно применить следующие подходы:
- Уменьшить размер в пикселях. Минимальный размер изображения (ширина или высота) должны быть не меньше 300 пикселей. Соотношение сторон изображения после изменения размера должно совпадать с оригинальным файлом.
- Уменьшить параметр качества. Качество не должно быть ниже 70.
Комментарии к технической реализации
- Все скрипты, входящие в систему, должны быть написаны на языке Bash.
- Скрипты должны работать в режиме остановки при возникновении ошибочного вызова (
set -e
). - Скрипты должны соответствовать требованиям статического анализатора ShellCheck, поставляемого в рамках дистрибутива Debian Buster.
- В скрипте, который устанавливает зависимости, должны ставится все зависимости, даже если они входят в «поставку по умолчанию».
- Для выяснения информации об изображении рекомендуется использовать приложение
identify
из пакета инструментов ImageMagic. - Для изменения размеров изображения рекомендуется использовать приложение
convert
из пакета инструментов ImageMagic. - Система может быть реализована в виде набора скриптов.
- Скрипты должны корректно обрабатывать краевые ситуации: отсутствие необходимых аргументов, отсутствие файлов для обработки и так далее.