Лабораторная работа № 2
Проверяемые знания учащихся
- Знание концепции текущего рабочего каталога.
- Умение формировать абсолютные и относительные пути в 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
. - Умение находить пакеты, устанавливать и удалять пакеты из системы.
Задача
Необходимо автоматизировать работу редакционной коллегии научного журнала. Автоматизации должна быть подвергнута процедура проверки рукописей на соответствие техническим требованиям:
- Рукопись должна поставляться в TAR-архиве.
- Внутри архива должен находится файл
article.tex
, содержащий собственно рукопись статьи. - Внутри архива может находится (а может и не присутствовать) каталог
images
, содержащий изображения для статьи. - Внутри архива файлы могут находится либо в корне архива, либо в одном каталоге внутри данного архива.
- Статья должна собираться (компилироваться) в .pdf-документ с помощью
pdflatex
, входящего в состав Debian GNU/Linux.
Вашей задачей становится реализация:
- Bash-скрипта, реализующего распаковку и проверку TAR-архива. Работает с правами обычного пользователя.
- Bash-скрипта по установке зависимостей для работы первого скрипта. Работает с правами суперпользователя.
Скрипт по проверке TAR-архива
Данный скрипт принимает два аргумента:
- Путь к архиву для проверки. Если по указанному пути нет архива, то об этом надо сообщить пользователю.
- Путь к каталогу, в котором разместить распакованное содержимое архива. Если путь к каталогу не существует, его следует создать. Если в целевом каталоге есть файлы, то необходимо сообщить об этом пользователю и завершить работу скрипта.
После проверки переданных аргументов скрипту необходимо разархивировать архив (если это возможно) и выполнить все проверки. При провале проверки необходимо сообщить об этому пользователю.
Необходимо запускать все проверки при каждом запуске (если это возможно).
Если скрипт не удовлетворяет хотя бы одному требованию, то скрипт должен возвращать код завершения, отличный от нуля.
Пример корректной заявки можно скачать по ссылке.
Комментарии к технической реализации
- Все скрипты, входящие в систему, должны быть написаны на языке Bash.
- Скрипты должны работать в режиме остановки при возникновении ошибочного вызова (
set -e
). Завершение скрипта в случае возникновения ошибки считается ошибкой разработчика скрипта, а не средством защиты от неправильных аргументов и т.п. действий. - Скрипты должны соответствовать требованиям статического анализатора ShellCheck, поставляемого в рамках дистрибутива Debian Buster.
- В скрипте, который устанавливает зависимости, должны ставится все зависимости, даже если они входят в «поставку по умолчанию».
- Скрипты должны корректно обрабатывать краевые ситуации: отсутствие необходимых аргументов, отсутствие файлов для обработки и так далее.
- Система публикации LaTeX может быть установлена с помощью пакетов
texlive-latex-recommended
иtexlive-lang-cyrillic
. - Для создания .pdf-документа из .tex-документа следует использовать команду
pdflatex article.tex
. Данная команда может завершится с ошибкой. - При работе скрипта должен отсутствовать вывод запускаемых приложений на стандартный поток вывода.