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

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

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

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

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

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

Задача №1. Создание структуры каталогов

Рассмотрим следующую ситуацию. Мы работаем в фирме, которой каждый месяц необходимо формировать отчётность согласно строгой структуре каталогов. Необходимо разработать скрипт, который будет формировать структуру каталогов для данной отчётности.

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

Пример работы скрипта:

$ ./create-template.sh template
$ tree template
template
├── hours
│   └── hours.md
├── index.md
├── projects
│   └── projects.md
├── source
└── workers
    └── workers.md

Содержимое .md-файлов:

$ cat index.md
# Результаты работ
$ cat hours/hours.md
# Отчёт по часам отработки
$ cat projects/projects.md
# Отчёт по проектам
$ cat workers/workers.md
# Отчёт по работникам

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

Если скрипту передан путь к существующему каталогу, то скрипт должен завершить работу, указав, что необходимо указать путь к несуществующему каталогу.

Скрипт не должен содержать ошибок согласно проверкам ShellCheck.

Задача №2. Сортировка содержимого каталога

Рассмотрим следующую ситуацию. Вас назначили ответственным за ведение архива документов. В настоящий момент все документы свалены в один большой каталог, в котором нет подкаталогов. В качестве начала работы над задачей вы решили написать скрипт, который позволит отсортировать документы по их mime-типу.

Скрипт должен принимать два аргумента:

  • путь к каталогу с исходными данными;
  • путь к каталогу с отсортированными данными.

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

Скрипт должен проверить, что каталог с отсортированными данными не существует. Если он существует, надо вывести предупреждение пользователю.

Для получения mime-типа файла предлагается использовать приложение file.

Для проверки работоспособности скрипта предлагается использовать каталог /var/log в качестве каталога с исходными данными.

Пример результата работы приложения:

$ tree sorted
sorted
├── application
│   └── gzip
│       └── alternatives.log.2.gz
└── text
    └── plain
        └── alternatives.log

Скрипт не должен содержать ошибок согласно проверкам ShellCheck.