Формат проведения проверочной работы

Проверочная работа будет проходить в удалённом режиме. Всем студентам будет одновременно выдано проверочное задание. Время выполнение задания — 1.5 часа с момента начала.

Задание для всех студентов выдаётся одинаковое. Совместное решение задач запрещено. При наличии признаков совместного решения всем участникам будет зачтена оценка 0.

Для каждого задания необходимо разработать Bash-скрипт, решающий поставленную задачу. Все скрипты необходимо объединить в архив и загрузить в качестве ответа на Moodle.

Проверяемые знания

  • Базовое использование командного интерфейса.
  • Понятие текущего рабочего каталога. Знание особенностей использования абсолютных и относительных путей. Изменение текущего рабочего каталога.
  • Манипулирование структуры каталогов файловой системы. Копирование, перемещение и удаление файлов и каталогов.
  • Понятие о типах команд в Bash. Чтение руководств и встроенной помощи в зависимости от типа команды.
  • Знание структуры файловой системы Linux: назначение каталогов и их структура.
  • Перенаправление потоков ввода-вывода, использование конвееров. Знание типичных фильтров для обработки данных.
  • Расширение строк в Bash: расширение пути, расширение скобок, арифметическое расширение, расширение параметров, подстановка команд.
  • Права доступа к файлам в Linux, изменение прав текстовым и буквенным способом, изменение владельца и группы файлов.
  • Написание скриптов на языке Bash.
  • Проверка качества исходного кода с помощью ShellCheck.
  • Поиск файлов с помощью приложений find и fd-find.
  • Установка приложений с помощью пакетного менеджера APT в Debian.
  • Настройка списка APT-репозиториев.
  • Переход между версиями дистрибутива.
  • Управление состоянием служб с помощью команд systemd.
  • Создание описания собственных служб systemd.

Задача

Необходимо разработать систему, позволяющую автоматизировать задачу выполнения резервного копирования данных. Данные, которые необходимо сохранить, лежат в каталоге. Каталог может содержать другие подкаталоги и т.д.

Необходимо разработать следующие скрипты:

  • Скрипт, создающий резервную копию всех данных из целевого каталога.
  • Скрипт, создающий резервную копию данных, которые изменились с момента создания последней копии. Так называемая инкрементальная копия. Например, мы сделали резервную копию в понедельник. А во вторник в каталог добавили 10 файлов. В архив с инкрементальной копией должны войти только эти 10 файлов. Удаление файлов учитывать не надо.
  • Конфигурация systemd для запуска первого скрипта один раз в неделю.
  • Конфигурация systemd для запуска второго скрипта каждый день ночью.

Желательно вынести пути к каталогу с исходными данными и с каталогом для хранения резервных копий в отдельный файл, который подгружался в скриптах для создания полной и инкрементальной резервных копий. Самый простой вариант — использовать отдельный bash-скрипт, в котором определить пару переменных и который подключать к целевым скриптам с помощью команды source.

В создаваемых архивах иерархия целевого каталога должна быть сохранена.

Вместе со скриптами разместите файл readme.txt, описывающий как следует использовать каждый из предоставленных файлов. Если для работы скриптов необходимо установить какие-то зависимости, то эту информацию также надо разместить в данном файле.

Реализованные скрипты не должны содержать ошибок с точки зрения ShellCheck.